これに2016年のメーリングリスト投稿、Pulseaudioユーザーがベンダーとシリアル番号が同じである可能性がある他のUSBオーディオカードに信頼できる名前を割り当てる方法を尋ねました。
そのGitHubにソリューションを公開;カードのデバイスパスに基づいて各カードにUdevラインを追加することに基づいています。
Udevルールを変更せずに新しいカードを追加できるように、このソリューションを変更したいと思います。
私はUdevが私に2つの変数を与えたことを知りました。これらの変数を連結すると、カードの信頼できる名前を設定するために使用できます。これは、USBハブのポート番号ID_ID
とともにPulseaudioが選択したリスナー名のデフォルトのようですID_PATH_TAG
。名前に追加する名前は次のとおりです。
$ (sleep 1; sudo udevadm trigger -s sound -c remove ; \
sudo udevadm trigger -s sound -c add) &; \
udevadm monitor --subsystem=sound -p | grep -P 'ID_ID|ID_PATH_TAG'
ID_PATH_TAG=pci-0000_06_00_3-usb-0_3_4_1_1_0
ID_ID=usb-C-Media_Electronics_Inc._USB_Audio_Device-00
... (some repeats)
これら2つの変数を組み合わせてPulseaudioデバイス名を生成するUdevルールをどのように作成できますか?
答え1
これが私が思いついたものです:
$ cat /etc/udev/rules.d/99-usb-audio.rules
ACTION=="change", SUBSYSTEM=="sound", DEVPATH=="/devices/*/usb*/sound/card?", ENV{PULSE_NAME}="$env{ID_ID}.$env{ID_PATH_TAG}"
99は以前のルールで設定されているので重要ですID_PATH_TAG
(どのルールがわかりません)。より低い数字を使用すると、初期試行は失敗しました。
これで、受信者名にはID_PATH_TAG
物理的な場所を通じたIDカードが含まれます。
$ pactl list sinks | grep Name
Name: alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.pci-0000_06_00_3-usb-0_2_4_2_1_1_0.analog-stereo
Name: alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.pci-0000_06_00_3-usb-0_2_4_2_3_1_0.analog-stereo
位置は部分文字列でエンコードされます。
usb-0_2_4_2_1_1_0
usb-0_2_4_2_3_1_0
これは明らかに、私のラップトップのポート2が1つのUSBハブに接続され、別のハブがそのハブのポート4に接続され、3番目のハブが2番目のハブのポート2に接続されていることを意味します。オーディオデバイスは最後のハブのポート1と3に接続されています。 「-0_」接頭辞または「_1_0」接尾辞についてはわかりません。
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
|__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 28, If 0, Class=Audio, Driver=snd-usb-audio, 12M
|__ Port 1: Dev 27, If 0, Class=Audio, Driver=snd-usb-audio, 12M