Rocky Linux 10でSDRとgqrxを使ってNHK‑FM (82.5 MHz) を聴く

夏真っ盛りで日々、最高気温が更新されています。
毎年いつ落ち着くのかと、祈るばかりです。

こんにちは、Ndictです。
今年の夏の対策として、毎日3L以上を飲むように心掛けています。

今回はRocky Linux 10でSDRをしていきたいと思います。

前提として
1. RTL-SDR ドライバは EPEL10 に公式 RPM(rtl-sdr-2.0.1-3.el10_0)が存在。依存関係を壊さず導入可能です。

2. gqrx は現時点で EL9 までしかビルドしていません。

  • EL9 RPM を強引に導入すると libqt5core.so.5()(64bit) など ABI 不一致で破綻します。
  • 代替として公式 AppImage(v2.17.6 以降)を採用。RTL-SDR ドライバ同梱しています。

そこで「RTL-SDRはEPEL10のRPMをそのまま」「gqrxはAppImageで完結」という切り分けが現状、ノーコンパイルで動く唯一のルートになると考えました。
目標は NHK-FM 82.5 MHz を聞くことです。

動作環境

バージョンは 10.0 (Red Quartz) です。
使うドングルはRTL-SDR.COM V4です。
アンテナはRTL-SDR.COM V4付属のアンテナを使用します。

手順

  1. RTL-SDR インストール
  2. DVB ドライバ競合回避
  3. udev ルール&権限設定
  4. FUSE3/fusermount 準備
  5. ドングルテスト
  6. gqrx AppImage 取得
  7. gqrx の初回起動とセットアップ

① RTL-SDR インストール


sudo dnf install rtl-sdr -y
sudo dnf install epel-release -y
sudo dnf update -y

これで /usr/bin/rtl_test などが使えるようになります。
EPEL10 の rtl-sdr-2.0.1-3.el10_0 をそのまま使えるのは良いですね。

② DVB ドライバ競合回避

USB を挿した瞬間に DVB 用カーネルモジュール が先に掴むと
rtl_test: usb_open(): Device or resource busy が出てハマります。
デフォルトで有効な DVB USB ドライバをブラックリスト化します。

②-① ブラックリスト設定


# /etc/modprobe.d/rtl-blacklist.conf を新規作成
sudo tee /etc/modprobe.d/rtl-blacklist.conf <<'EOF'
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist r820t
EOF

sudo depmod -a
# 既にロード済みならその場で外す
sudo modprobe -r dvb_usb_rtl28xxu rtl2832 r820t || true

②-② 成功確認


lsmod | grep -E 'dvb_usb_rtl28xxu|rtl2832|r820t' \
  || echo '競合モジュールなし → OK'

③udev ルール&権限設定


sudo groupadd -f plugdev
sudo usermod -aG plugdev $USER

sudo tee /etc/udev/rules.d/20-rtlsdr.rules <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="0bda", ATTR{idProduct}=="2838", \
  GROUP="plugdev", MODE="0666"
EOF

sudo udevadm control --reload-rules
sudo udevadm trigger

再ログイン必須 — 反映しないと rtl_test が Permission Denied になります。

※ DVB ドライバでハマらないための確認

WindowsではZadigでWinUSBを手動バインドしないと始まりませんが、
「Linuxなら挿すだけで OK」というのは半分合っています。
実際には カーネルの DVB ドライバが先に掴む/udev 権限が足りないことの 2 点で沼ります。
僕もここで何度もハマったので、チェックリストが以下のものになります。
「rtl_testがBusy/Permission denied になる」という人は試してみてください。

追加チェックリスト(沼脱出フロー)

手順 コマンド 成功の目安
① DVB モジュール残存チェック lsmod | grep rtl28 何も表示されない
② 残っていたら即アンロード sudo modprobe -r dvb_usb_rtl28xxu rtl2832 r820t エラーなしで戻る
③ ブラックリスト確認 grep dvb_usb_rtl28xxu /etc/modprobe.d/* 1 行以上ヒット
④ udev 反映確認 udevadm info -q property -n /dev/bus/usb/* | grep GROUP GROUP=plugdev
⑤ 権限テスト groups $USER | grep plugdev plugdev が含まれる
⑥ ドングル再挿→テスト rtl_test -t R828D / 2.4 MS/s が走る

ワンライナーで一気に診断したい場合


lsmod | grep -E 'dvb_usb_rtl28xxu|rtl2832|r820t' \
  && echo '⚠️ DVB ドライバが残っています' \
  || echo '✅ DVB ドライバはロードされていません'

# ⚠️ が出たら ②→③ を、Permission denied が出たら ④→⑤ をチェック

④FUSE3/fusermount 準備

これで gqrx の AppImage が Cannot mount AppImage… で落ちることはありません。

① FUSE3 本体とランタイムを導入


sudo dnf install -y fuse3 fuse3-libs

② 旧コマンド名 “fusermount” 互換リンクを作成


sudo ln -sf /usr/bin/fusermount3 /usr/bin/fusermount

③ fusermount3 に set-uid を付与(念のため)


sudo chmod u+s /usr/bin/fusermount3

AppImage は内部で fusermount を呼び出します。
Rocky Linux 10 には fusermount3 しか無いのでリンクで名前を合わせるだけ。
インストールするのは fuse2 系ではなく fuse3 パッケージです。

⑤ドングルテスト


rtl_test -t

No E4000 tuner found は「E4000 用の専用サブテストをスキップします」というメッセージ。

  • E4000は旧世代チップ。V4はR828Dなので見つかりません。
  • rtl_testはE4000用ルーチンに入れなかった時点でテストを切り上げる仕様です。
  • デバイス検出・サンプリング開始まで通っているので ハードもドライバも問題ないことがわかります。

⑥gqrx AppImage 取得

公式リリース 2.17.6 以降は RTL-SDR ドライバを内包しています。
ダウンロード先はユーザー環境ごとの「ダウンロード」フォルダ(日本語環境なら ~/ダウンロード)です。


cd "$(xdg-user-dir DOWNLOAD)"
wget https://github.com/gqrx-sdr/gqrx/releases/download/v2.17.6/Gqrx-2.17.6-x86_64.AppImage
chmod +x Gqrx-2.17.6-x86_64.AppImage

起動時に xcb plugin エラーが出た場合は Qt の X11 プラットフォームプラグインが不足しているだけなので、下記を追加して再実行してください。


sudo dnf install -y libxcb xcb-util*

⑦gqrx の初回起動とセットアップ


cd "$(xdg-user-dir DOWNLOAD)"
./Gqrx-2.17.6-x86_64.AppImage &

gqrxの初回起動を実施すると、起動直後に 「Configure I/O devices」ダイアログが出ます。

項目 設定例 補足
Device RTLSDR Blog V4 … 1 行だけ出る
Input rate 2400000 2.4 MSPS(V4の安定上限)
Audio output → Device Default 無音なら変更

FM 82.5 MHz(NHK-FM 東京)の例

  1. 上部周波数バーをダブルクリック → 82.500.000 と入力 → Enter
  2. 右ペイン Mode → WFM
  3. Gain スライダーを 15–30 dB で上下し S/N を調整
  4. オーディオ波形が動き、スピーカーから放送が流れれば成功

ここまで来れば Rocky Linux 10 上で RTL-SDR + gqrx が動作完了です。
あとはお好きな局へ周波数を合わせて遊んでみてください。

※注意事項 — 音が出ない/起動しない

症状 確認ポイント コマンド・操作 解決例
AppImage が「xcb plugin」エラー Qt X11 プラグイン不足 — sudo dnf install -y libxcb xcb-util*
ウォーターフォールは動くが無音 gqrx Audio ウィンドウ Mute OFF / Gain ≥0 dB Mute 切替
ALSA ミュート alsamixer -D hw:0 → M MM → 00
ドングル認識せず USB lsusb | grep 2838 ポート変更
DVB 衝突 lsmod | grep rtl28 sudo modprobe -r …
rtl_test Permission denied plugdev 反映 groups $USER | grep plugdev 再ログイン / 追加
AppImage mount 失敗 FUSE3 — sudo dnf install fuse3 fuse3-libs
sudo ln -sf /usr/bin/fusermount3 /usr/bin/fusermount

見落としがちなのは ALSA の Headphon チャンネルがミュート のケースです。
alsamixer で緑 (00) 表示になれば 大丈夫です。

以上、 Rocky Linux 10 でも SDR が実現できました。
最後まで読んでくださり、ありがとうございました。

最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG