XLX168-X ↔ TGIF 44833 ブリッジ 手順書(SSH 運用版)
最終更新: 2026-07-17 / 動作確認済み構成
概要
XLX168 の module X と TGIF の TG 44833 を MMDVM_Bridge で直結する DMR ブリッジの構築・運用手順です。Analog_Bridge と md380-emu を使わない直結構成のため、二重ボコーダによる音声劣化がなく、遅延も小さく、src ID や Talker Alias が透過します。SSH で日常運用する手順を中心にまとめます。
前提条件
本手順は次の環境で動作確認しています。
| コンテナ基盤 | Incus(母艦: ubuntu、192.168.1.67) |
| OS | Debian 12(コンテナ、最小イメージ) |
| ネットワーク管理 | systemd-networkd |
| ブリッジ | MMDVM_Bridge(Analog_Bridge / md380-emu は不使用) |
| コンテナ | br-tgif(192.168.1.150、TGIF 側)/ br-xlx(192.168.1.151、XLX 側) |
1. ログイン
LAN 上の別マシンから SSH で接続します。
ssh kshinoda@192.168.1.150 # br-tgif (TGIF 側) ssh kshinoda@192.168.1.151 # br-xlx (XLX 側)
ubuntu(192.168.1.67)からは SSH できません。macvlan の制約で、親 NIC とコンテナ間は直接通信できないためです。PC など LAN 上の別機から入ってください。コンテナ同士(.150 ↔ .151)は通るので、ブリッジ自体には影響しません。以降、プロンプトで作業対象を確認してください。
kshinoda@br-tgif:~$ ← TGIF 側 kshinoda@br-xlx:~$ ← XLX 側
grep -E '^Address=' /opt/MMDVM_Bridge/MMDVM_Bridge.ini
確認: 出力が tgif.network なら br-tgif、xlx168.mydns.jp なら br-xlx です。
2. 構成
TGIF TG44833 XLX168 module X
| udp/62031 | udp/62030
+-----------------------+ +-----------------------+
| br-tgif 192.168.1.150| | br-xlx 192.168.1.151|
| MMDVM_Bridge | | MMDVM_Bridge |
| tx 31103 --------------------------- > rx 31103 |
| rx 31100 <--------------------------- tx 31100 |
+-----------------------+ +-----------------------+Analog_Bridge と md380-emu は使いません(停止 + disable 済み)。
md380-emu 不要、USRP の PCM 経路がないのでループしない、src ID / Talker Alias が透過。3. 確定した設定値
3.1 exportTG の意味(重要)
exportTG は「拾う TG」のフィルタではなく、パートナーへ送出する TG です。 直結構成では、これが TG 変換を担います。したがって自分の接続先ではなく、相手の TG を書きます。
exportTG | 意味 | |
|---|---|---|
| br-tgif(TGIF 側) | 4024 | XLX へ 4024 で出す |
| br-xlx(XLX 側) | 44833 | TGIF へ 44833 で出す |
3.2 DMR ID の桁数(重要)
| ネットワーク | ID | 備考 |
|---|---|---|
| XLX | 7 桁のみ 4402519 | SSID 付き 9 桁は unrecognized id で拒否 |
| TGIF | 9 桁可 440251950 | SSID 付きで OK |
3.3 br-tgif(192.168.1.150)
対象パス: /opt/MMDVM_Bridge/MMDVM_Bridge.ini
[General]
Callsign=JJ2ZAR
Id=440251950 ; TGIF は 9 桁可
[DMR Network]
Enable=1
Address=tgif.network
Port=62031
Local=62032
Password=<TGIF_PASSWORD> ; TGIF ダッシュボードで発行した実パスワード。
; 実値は本書に書かない。現物は
; /opt/MMDVM_Bridge/MMDVM_Bridge.ini を参照
# Options= ; TGIF は Options で TG 指定しない。空が正解
Slot1=0
Slot2=1対象パス: /opt/MMDVM_Bridge/DVSwitch.ini
[DMR] address = 192.168.1.151 txPort = 31103 ; br-xlx の rxPort rxPort = 31100 ; br-xlx の txPort slot = 2 exportTG = 4024 ; XLX へ出す TG hangTimerInFrames = 0 talkerAlias = %callsign %location %description
3.4 br-xlx(192.168.1.151)
対象パス: /opt/MMDVM_Bridge/MMDVM_Bridge.ini
[General] Callsign=JJ2ZAR Id=4402519 ; XLX は 7 桁のみ。SSID 厳禁 [DMR Network] Enable=1 Address=xlx168.mydns.jp Port=62030 Local=62032 Password=passw0rd Options=XLX:4024 ; module X = 4024 Slot1=0 Slot2=1
対象パス: /opt/MMDVM_Bridge/DVSwitch.ini
[DMR] address = 192.168.1.150 txPort = 31100 ; br-tgif の rxPort rxPort = 31103 ; br-tgif の txPort slot = 2 exportTG = 44833 ; TGIF へ出す TG hangTimerInFrames = 0 talkerAlias = %callsign %location
3.5 両側共通
MMDVM_Bridge.ini でDMR 以外は全て Enable=0。[Modem] Port=/dev/null(RF なし局)。RXFrequency / TXFrequency = 145750000 は表示用ダミーです。
4. TGIF 側の準備
Options= は空のままです。 TGIF は XLX と違い Options で TG を指定しません。
TGIF ダッシュボード(https://tgif.network/)で JJ2ZAR に TG 44833 を static 登録してください。これをやらないと TGIF 側の音が来ません。
5. 日常操作(SSH 内)
サービス
sudo systemctl restart mmdvm_bridge sudo systemctl status mmdvm_bridge --no-pager sudo systemctl is-active mmdvm_bridge
Analog_Bridge / md380-emu は disable 済みです。起動しないのが正常です。
systemctl is-enabled analog_bridge md380-emu
確認: disabled と出れば正しい状態です。
ログ
# 当日分 tail -n 20 /var/log/mmdvm/MMDVM_Bridge-$(date +%F).log # リアルタイム tail -f /var/log/mmdvm/MMDVM_Bridge-$(date +%F).log # systemd 側 sudo journalctl -u mmdvm_bridge -n 50 --no-pager sudo journalctl -u mmdvm_bridge -f
設定確認
grep -vE '^\s*[;#]|^\s*$' /opt/MMDVM_Bridge/MMDVM_Bridge.ini grep -n -A8 '^\[DMR\]' /opt/MMDVM_Bridge/DVSwitch.ini
ポート
ss -ulnp | grep -E '31100|31103|62032'
6. 正常時のログ(確認)
br-tgif
DMR, Transmitting on 192.168.1.151:31103, and listening on port 31100. Result = 1 DMR, Logged into the master successfully: tgif.network:62031 DMR Slot 2, received network voice header from JJ2ZAR to TG 44833 DMR Talker Alias (Data Format 1, Received 27/27 char): 'JJ2YYK AichiPref Japan MMDV'
br-xlx
DMR, Transmitting on 192.168.1.150:31100, and listening on port 31103. Result = 1 DMR, Logged into the master successfully: xlx168.mydns.jp:62030 DMR, Remote CMD: txTg=4000 DMR, Tune: id=4402519, tg=4000, mode=Group DMR, Remote CMD: txTg=4024 DMR, Tune: id=4402519, tg=4024, mode=Group DMR Slot 2, received network voice header from JJ2ZAR to TG 9
Remote CMD / Tune は Options=XLX:4024 が自動発行するもので正常です。XLX からの受信が TG 9 なのも正常です(module Z でも X でも同じ)。
7. トラブルシュート
Cannot bind the UDP address, err: 98 / Can not open listener port 31100
Analog_Bridge が 31100 を掴んでいます。
sudo systemctl stop analog_bridge md380-emu sudo systemctl disable analog_bridge md380-emu sudo systemctl restart mmdvm_bridge
unrecognized id 440251950(XLX 側 xlxd のログに出る)
br-xlx に SSID 付き 9 桁 ID が入っています。7 桁に直します。
sudo sed -i 's|^Id=440251950$|Id=4402519|' /opt/MMDVM_Bridge/MMDVM_Bridge.ini grep '^Id=' /opt/MMDVM_Bridge/MMDVM_Bridge.ini sudo systemctl restart mmdvm_bridge
Connection to the master has timed out
ログインパケットへの無応答です。パスワード違いなら Login to the master has failed が返るので、それとは別物です。
getent hosts xlx168.mydns.jp
ping が通らないのは判断材料になりません(ICMP を落としている構成が普通)。UDP 62030 が通るかどうかだけが本題です。
片方向だけ無音
txPort / rxPort のクロスがずれています。両側は対称ではなく逆です。
| txPort | rxPort | |
|---|---|---|
| br-tgif | 31103 | 31100 |
| br-xlx | 31100 | 31103 |
ログの Transmitting on X:PORT, and listening on port PORT で確認します。
TG が変換されない
exportTG を確認します。相手側の TG を書きます(3.1 参照)。
8. IP アドレスの変更
Debian 12 / systemd-networkd です(netplan でも /etc/network/interfaces でもない)。
対象パス: /etc/systemd/network/eth0.network
sudo cp /etc/systemd/network/eth0.network /etc/systemd/network/eth0.network.bak
sudo sed -i 's|^DHCP=true$|Address=192.168.1.150/24\nGateway=192.168.1.1\nDNS=192.168.1.1|' \
/etc/systemd/network/eth0.network
cat /etc/systemd/network/eth0.network変更後(結果):
[Match] Name=eth0 [Network] Address=192.168.1.150/24 Gateway=192.168.1.1 DNS=192.168.1.1 [DHCPv4] UseDomains=true UseMTU=true [DHCP] ClientIdentifier=mac
[DHCPv4] / [DHCP] セクションは残りますが、DHCP を有効にしていないので無視されます。
反映すると SSH が切れます。承知の上で:
sudo reboot
確認: 新しい IP で入り直してください。ゲートウェイは ip r の default via で確認できます。
9. 編集の作法
エディタが入っていません
Incus の Debian 最小イメージに nano はありません。入れるなら:
sudo apt update && sudo apt install -y nano
sed で済ませる場合、DVSwitch.ini には address = 127.0.0.1 が [DSTAR] [NXDN] [P25] [YSF] [ASL] にもあります。s|^address = 127.0.0.1|...| は全部に当たります。
sed は行番号を確認してから当ててください。無条件の置換は他セクションを巻き添えにします。grep -n -A5 '^\[DMR\]' /opt/MMDVM_Bridge/DVSwitch.ini sudo sed -i '14s|.*|address = 192.168.1.150|' /opt/MMDVM_Bridge/DVSwitch.ini grep -n -A5 '^\[DMR\]' /opt/MMDVM_Bridge/DVSwitch.ini
必ずバックアップ
sudo cp /opt/MMDVM_Bridge/DVSwitch.ini /opt/MMDVM_Bridge/DVSwitch.ini.bak diff /opt/MMDVM_Bridge/DVSwitch.ini /opt/MMDVM_Bridge/DVSwitch.ini.bak
tail -3 が使えない
複数ファイルがマッチすると tail: option used in invalid context -- 3。tail -n 3 を使います。
10. 母艦でしかできない操作
以下は SSH では不可能で、ubuntu(192.168.1.67)にログインして実行します。
# コンテナの起動 / 停止 / 一覧
incus start br-tgif br-xlx
incus stop br-tgif br-xlx
incus list
# スナップショット(作業前に推奨)
incus snapshot create br-tgif working
incus snapshot create br-xlx working
incus restore br-tgif working
# ファイル転送
incus file push MMDVM_Bridge.ini br-tgif/opt/MMDVM_Bridge/MMDVM_Bridge.ini
incus file pull br-tgif/opt/MMDVM_Bridge/DVSwitch.ini ./DVSwitch.ini
# リネーム(停止中のみ)
incus stop br-tgif
incus rename br-tgif 新名
incus start 新名
sleep 20 # 起動完了を待つ。直後に hostnamectl を打つと
# Failed to connect to bus で失敗する
incus exec 新名 -- hostnamectl set-hostname 新名
incus exec 新名 -- sed -i 's|旧名|新名|g' /etc/hosts
incus restart 新名incus exec でワイルドカードを使う場合は bash -c で包みます。包まないとホスト側のシェルが展開しようとして失敗します。
incus exec br-tgif -- bash -c 'tail -n 3 /var/log/mmdvm/MMDVM_Bridge-*.log'
11. 残タスク
- [ ]
Debug=1→Debug=0([DMR Network]。疎通確認は完了済み)
sudo sed -i 's|^Debug=1|Debug=0|' /opt/MMDVM_Bridge/MMDVM_Bridge.ini sudo systemctl restart mmdvm_bridge
- [ ] ini のコメントが実態と食い違っている(
XLX834-Z、module Z (4026)、役割: ... <--> ローカル Analog_Bridge、★★ 未確定 ★★、; TGIF では passw0rd が正規のパスワードなど) - [ ]
Description=XLX834-Z / TGIF168 Bridge→XLX168-X / TGIF44833 Bridge(TGIF / XLX ダッシュボードに表示される) - [ ] br-tgif の
DVSwitch.iniで[DSTAR][NXDN][P25][YSF][ASL]のaddressがsedの巻き添えで192.168.1.151になっている(Enable=0なので実害なし)
まとめ
XLX168 module X と TGIF TG 44833 を MMDVM_Bridge の直結構成でブリッジしました。要点は、exportTG に相手側の TG を書くこと、DMR ID を XLX では 7 桁・TGIF では 9 桁とすること、txPort / rxPort を両側で逆に交差させることの 3 点です。日常運用は SSH でのサービス再起動とログ確認で足ります。
🏛 JJ2YYK あいちデジタルコミュニケーションハムクラブ