2台以上のさんぱくん外出で特定のチューナーをLinuxで使うための定義

 さんぱくん外出(US-3POUT)をLinuxで使う際に2つ以上の異なるアンテナ(UHFアンテナ、BSアンテナ、CATVのアンテナ端子に接続など)に接続したUS-3POUTを意図的に選択したい場合、録画コマンドのrecfsusb2nの--devオプションでデバイス名を指定すれば良いのだけれど、一般的にUS-3POUTを認識する際に使っているudevルールだと、このデバイス名が再起動やUSB機器の認識が変化した際にコロコロ変わってしまうので、特定のチューナーを選択することが出来ない。
 そこでudevルールにUS-3POUTを接続しているUSBポートの条件と、それに対するデバイス名を意図的に加えることで、特定のチューナーを扱えるようにする。
 一般的にUS-3POUTを認識する際に使っているudevルールは、/etc/udev/rules.d/91-tuner.rulesに下記のudevルールを記述するが、これは種類がUSB(SUBSYSTEM=="usb")で、デバイスタイプがUSBデバイス(ENV{DEVTYPE}=="usb_device")で、ベンダーIDが0511(ATTRS{idVendor}=="0511")で、プロダクトIDが0045(ATTRS{idProduct}=="0045")なら、デバイス名のパーミッションを0664(MODE="0664")に、グループをvideo(GROUP="video")に設定する意味になる(「==」が条件、「=」が設定を意味している)。

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0045", MODE="0664", GROUP="video"

 なので、このudevルールにどのUSBポートに接続されているかの条件を加え、デバイス名に任意の名前を付ける設定を加える。
 どのUSBポートに接続されているかはデバイスパスで指定できる。デバイスパスは「udevadm info -n /dev/bus/001/003 -q path」のように現在のデバイス名から確認できる。任意の名前はデバイス名に対するシンボリックリンクを作成することで設定する。

$ udevadm info -n /dev/bus/usb/001/003 -q path
/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3
$

 例えば、Raspberry Pi 4 Model Bの上部USB 2.0ポートに接続したUS-3POUTを/dev/sanpa0、下部USB2.0ポートに接続したUS-3POUTを/dev/sanpa1として扱う場合、/etc/udev/rules.d/91-tuner.rulesに下記のudevルールを作成する。

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0045", DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3", MODE="0664", GROUP="video", SYMLINK+="sanpa0"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0045", DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4", MODE="0664", GROUP="video", SYMLINK+="sanpa1"

 これは1行目が、種類がUSB、デバイスタイプがUSBデバイス、ベンダーIDが0511、プロダクトIDが0045、デバイスパスが/devices/……/usb1/1-1/1-1.3(DEVPATH=="/devices/……/usb1/1-1/1-1.3")なら、デバイス名のパーミッションを0664、グループをvideoに設定し、シンボリックリンクをsanpa0の名前で作成(SYMLINK+="sanpa0")、同様に2行目が、種類がUSB、デバイスタイプがUSBデバイス、ベンダーIDが0511、プロダクトIDが0045、デバイスパスが/devices/……/usb1/1-1/1-1.4(DEVPATH=="/devices/……/usb1/1-1/1-1.3")なら、デバイス名のパーミッションを0664、グループをvideoに設定し、シンボリックリンクをsanpa1の名前で作成(SYMLINK+="sanpa1")する意味になる。
 例えば、神戸向きUHFアンテナに繋いだUS-3POUTが/dev/sanpa0、岡山向きUHFアンテナに繋いだUS-3POUTが/dev/sanpa1として、Mirakuruのチューナー設定を下記のように行う。

- name: US-3POUT-T1
  types:
    - GR
  command: recfsusb2n --dev /dev/sanpa0 <channel> - -
  decoder: arib-b25-stream-test

- name: US-3POUT-T2
  types:
    - SKY
  command: recfsusb2n --dev /dev/sanpa1 <channel> - -
  decoder: arib-b25-stream-test

 Mirakurunのチャンネル設定には神戸の地デジチャンネルのtypeをGRで、岡山の地デジチャンネルをtypeをSKYで定義しておけば、地域の異なる地デジを両方扱うことが出来る。

- name: NHKEテレ大阪
  type: GR
  channel: '13'
- name: NHKEテレ岡山
  type: SKY
  channel: '45'