XLX168-X ↔ TGIF 44833 ブリッジ 手順書(SSH 運用版)

最終更新: 2026-07-17 / 動作確認済み構成

概要

XLX168 の module X と TGIF の TG 44833 を MMDVM_Bridge で直結する DMR ブリッジの構築・運用手順です。Analog_Bridgemd380-emu を使わない直結構成のため、二重ボコーダによる音声劣化がなく、遅延も小さく、src ID や Talker Alias が透過します。SSH で日常運用する手順を中心にまとめます。

前提条件

本手順は次の環境で動作確認しています。

コンテナ基盤Incus(母艦: ubuntu192.168.1.67
OSDebian 12(コンテナ、最小イメージ)
ネットワーク管理systemd-networkd
ブリッジMMDVM_BridgeAnalog_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 側)
⚠️ 母艦 ubuntu192.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_Bridgemd380-emu は使いません(停止 + disable 済み)。

📝 直結構成の利点: 二重ボコーダがなく音声無劣化、遅延小、md380-emu 不要、USRP の PCM 経路がないのでループしない、src ID / Talker Alias が透過。

3. 確定した設定値

3.1 exportTG の意味(重要)

exportTG は「拾う TG」のフィルタではなく、パートナーへ送出する TG です。 直結構成では、これが TG 変換を担います。したがって自分の接続先ではなく、相手の TG を書きます。

exportTG意味
br-tgif(TGIF 側)4024XLX へ 4024 で出す
br-xlx(XLX 側)44833TGIF へ 44833 で出す
⚠️ 直感に反します。取り違えると無音になります。

3.2 DMR ID の桁数(重要)

ネットワークID備考
XLX7 桁のみ 4402519SSID 付き 9 桁は unrecognized id で拒否
TGIF9 桁可 440251950SSID 付きで 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.iniDMR 以外は全て 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 / TuneOptions=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 のクロスがずれています。両側は対称ではなく逆です。

txPortrxPort
br-tgif3110331100
br-xlx3110031103

ログの Transmitting on X:PORT, and listening on port PORT で確認します。

TG が変換されない

exportTG を確認します。相手側の TG を書きます(3.1 参照)。


8. IP アドレスの変更

Debian 12 / systemd-networkd です(netplan でも /etc/network/interfaces でもない)。

⚠️ 破壊的な変更です。適用すると SSH が切れます。実行前に必ずバックアップを取り、新しい IP で入り直せることを確認してください。

対象パス: /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 rdefault 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 -- 3tail -n 3 を使います。


10. 母艦でしかできない操作

以下は SSH では不可能で、ubuntu192.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=1Debug=0[DMR Network]。疎通確認は完了済み)
sudo sed -i 's|^Debug=1|Debug=0|' /opt/MMDVM_Bridge/MMDVM_Bridge.ini
sudo systemctl restart mmdvm_bridge
  • [ ] ini のコメントが実態と食い違っている(XLX834-Zmodule Z (4026)役割: ... <--> ローカル Analog_Bridge★★ 未確定 ★★; TGIF では passw0rd が正規のパスワード など)
  • [ ] Description=XLX834-Z / TGIF168 BridgeXLX168-X / TGIF44833 Bridge(TGIF / XLX ダッシュボードに表示される)
  • [ ] br-tgif の DVSwitch.ini[DSTAR] [NXDN] [P25] [YSF] [ASL]addresssed の巻き添えで 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 でのサービス再起動とログ確認で足ります。

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

JJ2YYK
  • JJ2YYK

コメントする

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