USB HAT MMDVM 環境構築手順書(Debian 直接インストール版 / amd64 / TGIF 直結版)

Debian 12(amd64)本体に直接インストール + MMDVM_HS USB HAT + TGIF 直結版


概要

実機 MMDVM_HS ハット(USB / CH340 接続)を、Incus コンテナを使わず Debian 12 本体に直接収容し、MMDVMHost + DMRGateway(G4KLX 最新版をソースビルド)で TGIF に直結する RF ホットスポットを構築する手順です。Pi-Star / WPSD は使いません(ARM 前提のため x86 では動かない)。

すでに公開している Incus コンテナ版 は、母艦の中に隔離した「箱」を作ってそこへ収容する構成でした。本記事はその箱を作らず、Debian マシンそのものに入れてしまういちばん素直な構成です。箱作り(コンテナ生成・macvlan・USB パススルー)が丸ごと不要になり、代わりに「自分のユーザーがシリアルを触れる権限」と「ホスト自身のネットワーク」を直接整えるだけになります。ビルド・ini 設定・常駐化・調整はコンテナ版と共通です。

📝 コンテナ版と直接版、どちらを選ぶ? 1 台のマシンを他用途と兼ねる/作り直しや複製を頻繁にしたいなら、隔離できるコンテナ版が有利です。ホットスポット専用の Debian マシンが 1 台あるなら、部品点数が少なく分かりやすい本「直接版」がおすすめです。無線・ビルド・設定の中身はどちらも同じです。

はじめに:この手順書に出てくる用語(先に一読)

📘 はじめて読む方向けに、本文に出てくる用語を先にまとめます。仕組みのイメージだけ掴めれば OK です。
Debian 12 / amd64
箱を使わず直接入れる土台の OS の種類(Debian)と CPU の種類(amd64=64 bit の Intel/AMD、いわゆる x86)。Raspberry Pi は arm で別物。Pi-Star/WPSD が使えないのはこの違いのため。
MMDVM_HS ハット(HAT)
DMR などデジタル無線の信号を無線機と PC の間で変換するモデム基板。本来 Raspberry Pi に載せる形だが、本手順では USB 基板経由で x86 PC につなぐ。
CH340 / /dev/ttyUSB0/dev/ttyACM0
CH340 は USB 基板上の「USB⇄シリアル(UART)変換チップ」(lsusb1a86:7523)。/dev/ttyUSB0 等は Linux がその機器に付ける「入口の名札」。環境により ttyACM0 のこともあり、その場合は本文の ttyUSB0 を読み替える。
dialout(ダイヤルアウト)グループ
シリアルポートを触ってよいユーザーの集まり。/dev/ttyUSB0root:dialout 所有なので、自分のユーザーをこのグループに入れないとモデムを開けない(本「直接版」で最重要)。
MMDVMHost / DMRGateway
MMDVMHost=モデムを制御し RF を送受信する中核。DMRGateway=MMDVMHost とネット(TGIF 等)の間に立ち、通話グループ(TG)の振り分け・書き換えをする中継役。
TGIF Network / DMR ID・ESSID
TGIF=DMR の通話をインターネット経由でつなぐネットワークの一つ。ログイン ID は「7 桁の DMR ID+2 桁の ESSID」の 9 桁。同じ ID で二重ログインすると接続ループになるので、機体ごとに ESSID を変える。
systemd(サービス化)
Linux でプログラムを常駐させるしくみ。サービス登録するとマシン起動時に自動で立ち上がり、落ちても再起動される(第 5 章)。
BER(ビット誤り率)
受信信号の誤りの割合。高いと音が崩れる。水晶の個体差による周波数ずれを RXOffset で補正して下げる(第 6 章)。

前提条件

動作の目安となる構成は以下(コンテナ版の実機検証値をベースに、コンテナ関連を除いたもの)。

  • マシン:Debian 12 Bookworm(amd64)専用機を想定(例:ホスト名 HAT1、IP 192.168.1.172)
  • モデム:MMDVM_HS ハット + USB キャリア基板(CH340、VID:PID 1a86:7523)
  • 自局:JJ2ZAR / DMR ID 4402519 + ESSID 73 = 440251973 / 430.730 MHz 単信
  • 接続先:TGIF Network(DMRGateway 経由)
  • 作業ユーザー:例 ocv(sudo 可)。以降のコマンド例はこの ocv 前提。自分のログイン名に読み替え可
📝 コンテナ版では作業用に新規ユーザー ocv を作りましたが、直接版ではいま使っているログインユーザーをそのまま使って構いません。以降の ocv は自分のユーザー名に読み替えてください。

第 1 章:下準備(USB 認識・シリアル権限・ネットワーク)

直接版の下ごしらえは 3 つ。①USB モデムを挿して認識を確認 ②自分のユーザーがシリアルを触れるように dialout に入れる ③(必要なら)固定 IP と SSH・時刻を整える。以降は普通に Debian のシェル(コンソール直、または SSH)で作業します。incus 系のコマンドは一切出てきません。

⚠️ 作業ユーザーは sudo が使える前提です。インストール時に作った一般ユーザーに sudo が無い場合は、一度 root で usermod -aG sudo ocv してから再ログインしてください。

1. モデムの物理確認

⚠️ ハットのアップグレードスイッチは運用側(横)にしてから USB を挿すこと。ファーム書換モード(B 側リセット長押し)のままではモデムを掴めません。
# USB を挿してから
lsusb | grep -i 1a86
ls -l /dev/ttyUSB0
📝 CH340 とは、ハットの USB 基板に載っている「USB⇄シリアル(UART)変換チップ」の名前です。PC からは USB 機器として見え、lsusb1a86:7523(=ベンダー ID : プロダクト ID)と出ます。
/dev/ttyUSB0/dev/ttyACM0 は、Linux がこのシリアル機器に自動で割り当てる「入口の名札(デバイスファイル)」です。CH340 系はふつう ttyUSB0、チップの種類によっては ttyACM0 になります。どちらになるかは USB を挿した直後に ls /dev/ttyUSB* /dev/ttyACM* で確認し、以降の手順の ttyUSB0 を自分の名札に読み替えてください。
⚠️ 個体によっては /dev/ttyACM0 になります。以降の手順の ttyUSB0 を読み替えてください。
✅ 確認: lsusb1a86:7523(CH340)が見え、/dev/ttyUSB0root:dialout 所有・0660 で生成されていれば OK。所有グループが dialout であることが、次の権限設定の前提です。

2. シリアルを開ける権限(自分を dialout に入れる)

ここが直接版のいちばんの肝です。コンテナ版では USB を箱へ「パススルー」して gid=20 を付けましたが、本体直接なら udev が最初から /dev/ttyUSB0root:dialout 0660 で作ってくれます。あとは自分のユーザーを dialout グループに入れるだけです。

sudo usermod -aG dialout ocv
# 反映には一度ログアウト→再ログイン(今のシェルですぐ効かせるなら newgrp dialout)
# 確認(出力に dialout が含まれること)
id
⚠️ これを忘れると、MMDVMHost が起動時に Cannot open the serial port で止まります(付録 A)。usermod 後は必ず再ログインして反映してください。

3. 固定 IP(推奨:ルーター側で DHCP 予約)

ホットスポットは常に同じ IP のほうが運用が楽です。いちばん確実でホストを汚さないのはルーターの DHCP 固定割り当て(予約)。ホストの MAC アドレス(ip link で確認)をルーターの予約に登録するだけで、ホスト側の設定は不要です。

ホスト側で静的設定したい場合は、Debian 標準の ifupdown なら例:

# /etc/network/interfaces(有線 enp2s0 を固定する例。NIC 名は ip link で確認)
auto enp2s0
iface enp2s0 inet static
    address 192.168.1.172/24
    gateway 192.168.1.1
    dns-nameservers 192.168.1.1
sudo systemctl restart networking
📝 デスクトップ入りの Debian は NetworkManager 管理のことがあります。その場合は上の interfaces は使わず、nmcli か GUI で固定 IP を設定してください。systemd-networkd を使っている環境なら(コンテナ版と同じ)/etc/systemd/network/eth0.network 方式です。自分のマシンのネットワーク管理方式に合わせて 1 つだけ選びます。
# 確認
ip -4 addr show
ping -c3 192.168.1.1
ping -c3 1.1.1.1
✅ IP が付き、ゲートウェイと外向き(apt に必要)の両方で ping が通れば OK です。

4. SSH・タイムゾーン・ログ権限(必要な分だけ)

通常インストールなら大半は設定済みです。足りないものだけ入れます。

# 別端末から操作したい場合のみ
sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable --now ssh

# ログの時刻を JST に
sudo timedatectl set-timezone Asia/Tokyo

# 自分のユーザーで journalctl を読めるように(任意)
sudo usermod -aG systemd-journal ocv
📝 ここまでで下準備は完了です。以降のビルド・設定はコンテナ版とまったく同じ手順になります。

第 2 章:ビルド

5. 依存パッケージ

sudo apt install -y git build-essential nlohmann-json3-dev libmosquitto-dev mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
⚠️ nlohmann-json3-devlibmosquitto-dev は必須。最新の G4KLX 版はログ基盤に nlohmann/json、状態出力に MQTT を使うため、無いとビルドが nlohmann/json.hpp: No such file / mosquitto.h: No such file で失敗します。
📝 mosquitto(ブローカー本体)は必須ではありませんが、両プログラムが起動時に localhost:1883 へ接続を試みるため、立てておくと警告が消え、将来のダッシュボード連携(MQTT 購読)にもそのまま使えます。

6. MMDVMHost / DMRGateway のビルド

cd /opt
sudo git clone https://github.com/g4klx/MMDVMHost
sudo git clone https://github.com/g4klx/DMRGateway
sudo chown -R ocv:ocv /opt/MMDVMHost /opt/DMRGateway

cd /opt/MMDVMHost && make -j$(nproc)
cd /opt/DMRGateway && make -j$(nproc)

確認(バイナリが生成されたか):

ls -l /opt/MMDVMHost/MMDVM-Host /opt/DMRGateway/DMRGateway
⚠️ 生成物・設定ファイルの名前はハイフン付き。MMDVM-Host(バイナリ)、MMDVM-Host.ini(設定)です。MMDVMHost / MMDVMHost.ini という名前のファイルは存在しません。DMRGateway 側は DMRGateway / DMRGateway.ini です。
📝 DMR ID テーブル(DMRIds.dat)と XLX ホストファイル(XLXHosts.txt)はリポジトリに同梱されているため、別途ダウンロード不要です。

第 3 章:設定

構成の全体像です。MMDVMHost は TGIF に直接繋がず、必ずローカルの DMRGateway を経由します(TG の振り分け・書き換えのため)。

無線機 ⇄ RF(430.730 MHz) ⇄ MMDVM_HS(USB /dev/ttyUSB0)
                                    │
                              [MMDVMHost]  ← モデム制御・RF 送受信
                                    │ UDP 62031/62032 (localhost)
                              [DMRGateway] ← ネットワーク振り分け
                                    │ UDP 62031
                              TGIF Network

7. MMDVM-Host.ini の設定

原本を退避してから、sed で必要箇所のみ書き換えます(テンプレートは全モード網羅の英国仕様なので、差分方式が安全)。対象パスは /opt/MMDVMHost/MMDVM-Host.ini です。

cd /opt/MMDVMHost
cp MMDVM-Host.ini MMDVM-Host.ini.orig

sed -i \
-e '/^\[General\]/,/^\[/{ s/^Callsign=.*/Callsign=JJ2ZAR/; s/^Id=.*/Id=440251973/; s/^Duplex=.*/Duplex=0/; s/^RFModeHang=.*/RFModeHang=300/; s/^NetModeHang=.*/NetModeHang=300/ }' \
-e '/^\[Info\]/,/^\[/{ s/^RXFrequency=.*/RXFrequency=430730000/; s/^TXFrequency=.*/TXFrequency=430730000/ }' \
-e '/^\[Log\]/,/^\[/{ s/^MQTTLevel=.*/MQTTLevel=0/ }' \
-e '/^\[DMR Id Lookup\]/,/^\[/{ s#^File=.*#File=/opt/MMDVMHost/DMRIds.dat# }' \
-e '/^\[Modem\]/,/^\[/{ s/^Protocol=.*/Protocol=uart/; s#^UARTPort=.*#UARTPort=/dev/ttyUSB0#; s/^RXOffset=.*/RXOffset=-300/ }' \
-e '/^\[CW Id\]/,/^\[/{ s/^Enable=.*/Enable=0/ }' \
-e '/^\[POCSAG\]/,/^\[/{ s/^Enable=.*/Enable=0/ }' \
-e '/^\[FM\]/,/^\[/{ s/^Enable=.*/Enable=0/ }' \
-e '/^\[DMR Network\]/,/^\[/{ s/^Enable=.*/Enable=1/; s/^Jitter=.*/Jitter=200/ }' \
-e '/^\[FM Network\]/,/^\[/{ s/^Enable=.*/Enable=0/ }' \
MMDVM-Host.ini

各設定の意味と注意:

項目説明
Callsign / IdJJ2ZAR / 440251973Id は 7 桁 DMR ID + 2 桁 ESSID の 9 桁。既存機(素の 4402519)と並行運用するため ESSID=73 で分離。同一 ID で TGIF に二重ログインすると 1〜2 分周期の再接続ループになる
Duplex=0単信MMDVM_HS 単体はデュプレクサ無し=単信(RX=TX 同一周波数)
RFModeHang / NetModeHang=300テンプレート既定は 10 / 3 と短く、通話のたびにモード再設定が走って頭にラグが乗る。Pi-Star 同等の 300 に
Protocol=uart / UARTPort/dev/ttyUSB0テンプレート既定は Protocol=null(=モデム無し)。キー名は Port= ではなく UARTPort=
RXOffset=-300個体値本個体の実測最適値(BER 0.0〜0.1%)。個体差があるので手順 11 の方法で各自追い込むこと
MQTTLevel=0ログは journalMQTT へのログ出力は使わない(画面 / journal で見る)
[DMR Network] Enable=1既定値が LocalPort=62032 / GatewayPort=62031(127.0.0.1)で、そのまま DMRGateway と噛み合う。Enable を 1 にするだけ
CW/POCSAG/FM Enable=0英国仕様テンプレートで既定 ON のものを止める

8. DMRGateway.ini の設定(TGIF)

テンプレートには TGIF 用ブロックが [DMR Network 3]Name=TGIF_Network)として最初から用意されています。新規に書くのではなく、そこを有効化します。対象パスは /opt/DMRGateway/DMRGateway.ini です。

cd /opt/DMRGateway
cp DMRGateway.ini DMRGateway.ini.orig

# 基本設定と TGIF 有効化
sed -i \
-e '/^\[General\]/,/^\[/{ s/^RuleTrace=.*/RuleTrace=1/ }' \
-e '/^\[Log\]/,/^\[/{ s/^MQTTLevel=.*/MQTTLevel=0/ }' \
-e '/^\[Voice\]/,/^\[/{ s/^Enabled=.*/Enabled=0/ }' \
-e '/^\[XLX Network\]/,/^\[/{ s/^Enabled=.*/Enabled=0/ }' \
-e '/^\[DMR Network 3\]/,/^\[/{ s/^Enabled=.*/Enabled=1/; s/^Password=.*/Password="<YOUR_TGIF_PASSWORD>"/ }' \
DMRGateway.ini

# 既定の TG リライトを撤去し、TS2 全通し(PassAll)に置き換え
sed -i \
-e '/^\[DMR Network 3\]/,/^\[/{ /^TGRewrite0=/d; /^SrcRewrite0=/d }' \
DMRGateway.ini
sed -i \
'/^\[DMR Network 3\]/,/^\[/ s/^\(Name=TGIF_Network\)/\1\nPassAllTG=2\nPassAllPC=2/' \
DMRGateway.ini

確認(この形になっていること):

sed -n '/^\[DMR Network 3\]/,/^# Local HBLink 1/p' DMRGateway.ini

期待する最終形:

[DMR Network 3]
Enabled=1
Name=TGIF_Network
PassAllTG=2
PassAllPC=2
Address=tgif.network
Password="<YOUR_TGIF_PASSWORD>"
Port=62031
Location=0
Debug=0
⚠️ Password には TGIF セルフケアのパスワードを設定します。公開リポジトリに置く場合は必ずマスクすること。
⚠️ PassAll への置き換えは必須。テンプレート既定の TGRewrite0=1,1,2,1,... はスロット 1 前提のルールで、単信ホットスポット(実質 TS2 運用)の RF はどのルールにも当たらず全部捨てられます(Rule Trace に not matched so rejected と出る)。PassAllTG=2 / PassAllPC=2 で「TS2 に来たものは全部 TGIF へ」にします。
📝 RuleTrace=1 は振り分けの動作確認用です。安定後は 0 に戻します(手順 10)。
📝 DMRGateway 側に Id= は書きません。ログイン ID は MMDVMHost の [General] Id がそのまま使われます。

第 4 章:試験起動と確認

9. 手動起動と成功サイン

ターミナルを 2 つ開き(SSH を 2 本張る)、DMRGateway → MMDVMHost の順で起動します。

# ターミナル A
/opt/DMRGateway/DMRGateway /opt/DMRGateway/DMRGateway.ini
# ターミナル B
/opt/MMDVMHost/MMDVM-Host /opt/MMDVMHost/MMDVM-Host.ini

成功サイン(この順で出る):

  • B: MMDVM protocol version: 1, description: MMDVM_HS-v1.6.1 ... → USB モデムを掴めた決定的証拠。ここで止まる場合は付録 A 参照。
  • A: MMDVM has connected → MMDVMHost⇄DMRGateway のローカル接続成立。
  • A: TGIF_Network, Logged into the master successfully → TGIF ログイン成功。
  • 無線機からカーチャンク → B に received RF voice header from <ID> to TG <n>、A に Rule Trace, ... PassAllTG TGIF_Network Slot=2: matched → RF→TGIF の振り分け成立。
  • TGIF 側から音声が来ると B に received network voice header ... → TGIF→RF(送信)成立。
✅ 確認できたら両方「Ctrl + C」で止め、次章で常駐化します。

第 5 章:常駐化(systemd)

10. サービス化と日常運用コマンド

手動起動はターミナルを閉じると止まります。systemd に載せて「マシン起動=ホットスポット稼働」にします。

sudo tee /etc/systemd/system/dmrgateway.service > /dev/null << 'EOF'
[Unit]
Description=DMRGateway
After=network-online.target mosquitto.service
[Service]
User=ocv
ExecStart=/opt/DMRGateway/DMRGateway /opt/DMRGateway/DMRGateway.ini
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

sudo tee /etc/systemd/system/mmdvm-host.service > /dev/null << 'EOF'
[Unit]
Description=MMDVMHost
After=dmrgateway.service
Wants=dmrgateway.service
[Service]
User=ocv
ExecStart=/opt/MMDVMHost/MMDVM-Host /opt/MMDVMHost/MMDVM-Host.ini
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now dmrgateway mmdvm-host
systemctl status dmrgateway mmdvm-host --no-pager
✅ 両方 active (running) になれば完成です。

動作確認が済んだら RuleTrace を戻しておきます。

sudo sed -i '/^\[General\]/,/^\[/{ s/^RuleTrace=.*/RuleTrace=0/ }' /opt/DMRGateway/DMRGateway.ini
sudo systemctl restart dmrgateway

日常運用コマンド:

systemctl status mmdvm-host dmrgateway    # 生死確認
journalctl -u mmdvm-host -f               # RF/QSO ログを流し見
journalctl -u dmrgateway -f               # TGIF 接続・振り分けログ
sudo systemctl restart mmdvm-host         # ini 変更の反映(MMDVM-Host.ini)
sudo systemctl restart dmrgateway         # ini 変更の反映(DMRGateway.ini)
⚠️ ini を編集しただけでは反映されません。必ず該当サービスを restart すること。

第 6 章:調整

11. RXOffset(BER 追い込み)

RF 受信の BER(end of voice transmission ... BER: x.x%)が高いと音が崩れます。ADF7021 系ハットは水晶の個体差で数百 Hz ずれているのが普通で、RXOffset で補正します。

手順(二分探索):

  1. journalctl -u mmdvm-host -f を流したまま、無線機から短く送信して BER を記録(例: RXOffset=0 で 6〜9%)。
  2. 値を振って再測定(例: 300 に変更してサービス再起動)。
  3. 下がれば同方向に、上がれば逆方向(-300)に。±100 刻みで最小点を探す。
  4. 本個体は -300 で BER 0.0〜0.1% に収束(目標: 1% 以下)。
sudo sed -i '/^\[Modem\]/,/^\[/{ s/^RXOffset=.*/RXOffset=300/ }' /opt/MMDVMHost/MMDVM-Host.ini
sudo systemctl restart mmdvm-host
⚠️ 最適値は個体ごとに違います。この -300 をそのまま別個体に使い回さないこと。

12. 頭切れ・音途切れ関連(ModeHang / Jitter)

症状原因対処
2 オーバー目以降も毎回頭にラグModeHang が短い(既定 10 / 3 s)でモードが冷めるRFModeHang / NetModeHang=300(手順 7 で設定済み)
ネット→RF の立ち上がりが遅いJitter バッファ充填Jitter=200(既定 360)。下げすぎるとネット揺らぎで音切れ
ネット音声が「プツッ」と途切れ、ログに lost audio for XXXms filling inネット側パケットロスJitter を 240〜300 へ戻す(立ち上がりとのトレードオフ)
特定の局だけ頭が約 1 秒欠け、ログが received network late entry(voice header ではない)送信元 / 経路の問題。ホットスポットでは直せない。ヘッダ無しで届いたストリームは、埋め込み LC の再構成完了(約 0.7〜1 秒)まで電波を出せない仕様送信元側で対処(例: 自動応答局なら音声先頭に無音を焼き込む)。受信側の設定変更は無意味
📝 late entry かどうかはログで判別できます。正常なら received network voice header from ...、異常なら received network late entry from ...。他のホットスポット(Pi-Star 等)でも同じ送信が late entry になるなら、受信側はシロと確定できます。

付録 A:トラブルシューティング早見表

症状原因対処
ビルドが nlohmann/json.hpp / mosquitto.h で失敗dev パッケージ不足apt install nlohmann-json3-dev libmosquitto-dev(手順 5)
MMDVMHost.ini が見つからないファイル名はハイフン付きMMDVM-Host.ini / バイナリは MMDVM-Host(手順 6)
モデム版数が出ず起動が止まる/Cannot open the serial port①アップグレードスイッチが書換側 ②/dev/ttyUSB0 の権限 ③二重起動①スイッチを運用側に ②自分を dialout に入れて再ログイン(手順 2) ③pgrep -a -f MMDVM-Host で古いプロセスを kill
Protocol=null のまま/Port= を書いても効かないキー名違いProtocol=uart + UARTPort=(手順 7)
TGIF ログインは成功するが RF が流れない。Rule Trace が not matched so rejected既定 TGRewrite がスロット 1 前提TGRewrite0 / SrcRewrite0 を消し PassAllTG=2 / PassAllPC=2(手順 8)
TGIF が 1〜2 分周期でタイムアウト・再接続を繰り返すDMR ID(ESSID 含む 9 桁)が他機と重複ESSID を変えて分離(手順 7)
ini を直したのに挙動が変わらないサービス未再起動systemctl restart mmdvm-host(または dmrgateway
USB を抜き差ししたらモデムが見えないデバイスノードが再生成される前数秒待つか挿し直す。dmesg / ls -l /dev/ttyUSB* /dev/ttyACM* で確認(本体直結なので udev が自動で再生成。コンテナ版のような incus restart は不要)
journalctl で自分のログが見えない権限usermod -aG systemd-journal ocv して再ログイン(手順 4)

付録 B:設計メモ

なぜ MMDVMHost + DMRGateway をソースビルドするのか

  • Pi-Star / WPSD は Raspberry Pi(ARM)用ディストリビューションで、x86 母艦では使えない。
  • x86 で実機モデムを扱う標準構成が「素の G4KLX スタック」。
  • DMRGateway を挟むのは、TG の振り分け・書き換え・複数ネットワーク併用のため(TGIF 単独でも、将来の拡張を考えると挟んでおくのが定石)。

OLED が使えない理由(USB 接続時)

MMDVM_HS ハット上の OLED(SSD1306)は、モデムチップ(STM32)ではなく 40 ピンヘッダ越しの Raspberry Pi の I2C に配線されており、描画するのは Pi 上の MMDVMHost です。USB キャリア基板は UART と電源しか結線していないため、OLED への電気的経路が存在しません。Display=OLED にしても動かないのは仕様です。物理表示が欲しい場合の現実解:

  • Nextion ディスプレイ — モデムのシリアルにトンネルできる(Display=Nextion / Port=modem)唯一の直結表示。USB 接続でも動く。
  • MQTT 連携の自作表示器 / ダッシュボード — MMDVMHost の MQTTLevel=1 で状態を mosquitto に流し、ESP32+OLED や Web ページで購読・表示。

DMR ID と ESSID

  • ネットワークログイン ID = 7 桁 DMR ID + 2 桁 ESSID の 9 桁(例: 4402519 + 73 = 440251973)。
  • 同一 ID で同一ネットワークに複数ログインすると重複扱いで接続ループになるため、機体ごとに ESSID を変える。
  • ID は MMDVMHost の [General] Id に書く(DMRGateway はそれを引き継ぐ)。

付録 C:XLX を併用したい場合

DMRGateway は TGIF と XLX の同時接続が可能です(本構成では TGIF 専用に決定したため無効化済み)。使う場合の要点のみ:

# XLX ホストファイルを公式 API から自動生成(既存ファイルは上書きされる)
sudo bash /opt/DMRGateway/XLXHostsupdate.sh /opt/DMRGateway/XLXHosts.txt
grep -E '^<番号>;' /opt/DMRGateway/XLXHosts.txt   # 目的の XLX があるか確認

[XLX Network] の主要キー: Enabled=1 / Startup=<XLX番号> / Module=<モジュール文字> / Base=<TGベース> / Slot=2 / File=/opt/DMRGateway/XLXHosts.txt

  • モジュール切替 TG = Base + モジュール番号(A=1 … Z=26。例: Base=4026 で module Z → TG4052)。
  • 公式リスト(xlxapi.rlx.lu)に未登録の私設 XLX は自動生成に含まれないため、<番号>;<IP>;<既定TG> 形式で 1 行手動追記する(その場合は XLXHostsupdate.sh を実行すると消えるので再実行しないこと)。
  • XLX と TGIF は同じ TS2 に同居するため、RuleTrace=1 で振り分けを必ず目視確認すること。

関連記事(サイト内)


まとめ

USB HAT MMDVM 環境構築手順書(Debian 直接インストール版 / amd64 / TGIF 直結版)。Incus コンテナ版から箱まわり(コンテナ生成・macvlan・USB パススルー)を外し、Debian 本体へ直接導入する構成に書き換えたものです。無線・ビルド・ini 設定・常駐化・調整はコンテナ版と共通で、実機検証(2026-07-13〜15)の設定値をそのまま踏襲しています。

📝 執筆:JI2TAB(尾張旭 DMR デジピーター 管理人)
🏛 JJ2YYK あいちデジタルコミュニケーションハムクラブ

JJ2YYK
  • JJ2YYK

1件のピンバック

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です