USB 트리의 물리적 위치에 따라 Pulseaudio USB 장치의 이름을 어떻게 지정합니까?

USB 트리의 물리적 위치에 따라 Pulseaudio USB 장치의 이름을 어떻게 지정합니까?

이것에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

관련 정보