이것에2016년 메일링 리스트 게시물, Pulseaudio 사용자가 공급업체와 일련 번호가 동일할 수 있는 다른 USB 오디오 카드에 안정적인 이름을 할당하는 방법을 문의했습니다.
그GitHub에 솔루션 게시;카드의 장치 경로를 기반으로 각 카드에 Udev 라인을 추가하는 것을 기반으로 합니다.
Udev 규칙을 변경하지 않고 새 카드를 추가할 수 있도록 이 솔루션을 수정하려고 합니다.
나는 Udev가 나에게 두 개의 변수를 제공했다는 것을 알았습니다. 이 변수들을 연결하면 카드의 안정적인 이름을 구성하는 데 사용할 수 있습니다. 이것은 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)
이 두 변수를 결합하여 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가 하나의 USB 허브에 연결되어 있고, 다른 허브가 해당 허브의 포트 4에 연결되어 있고, 세 번째 허브가 두 번째 허브의 포트 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