Отключить звуковую карту док-станции, сохранив при этом возможность использовать звуковую карту USB.

Как внести в черный список или иным образом навсегда отключить звуковую карту на док-станции, сохранив при этом возможность использовать звуковые USB-устройства и возможность использовать другие особенности док-станции?

Аппаратное обеспечение:

  • У меня есть набор наушников на основе звуковой карты USB. Bus 002 Устройство 014: ID 046d: 0a44 Logitech, Inc. Гарнитура H390
  • У меня также есть док-станция Dell D3100, которую я использую в качестве умножителя USB и для запуска дополнительного экрана. Я считаю, что эти USB-устройства связаны с USB-концентратором:
Bus 003 Device 005: ID 17e9:436e DisplayLink 
Bus 003 Device 004: ID 2109:0813 VIA Labs, Inc. 
Bus 003 Device 003: ID 17e9:436e DisplayLink 
Bus 003 Device 002: ID 2109:0813 VIA Labs, Inc. 
Bus 002 Device 005: ID 2109:2813 VIA Labs, Inc. 
Bus 002 Device 003: ID 2109:2813 VIA Labs, Inc. 

Вот все звуковые устройства:

# cat /proc/asound/modules
 0 snd_hda_intel    # Built in HP Audio
 1 snd_usb_audio    # Dell Docking Station Sound
 2 snd_hda_intel    # Built in HP Audio (HDMI)
 3 snd_usb_audio    # Headset

Вот подробности об устройстве, которое я хочу продолжать использовать:

T:  Bus=02 Lev=03 Prnt=16 Port=00 Cnt=01 Dev#= 19 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=16 #Cfgs=  1
P:  Vendor=046d ProdID=0a44 Rev=01.27
S:  Manufacturer=Logitech
S:  Product=Logitech USB Headset
C:  #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=snd-usb-audio
I:  If#= 1 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=snd-usb-audio
I:  If#= 2 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=snd-usb-audio
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid


                         description: Audio device
                         product: Logitech USB Headset
                         vendor: Logitech
                         physical id: 1
                         bus info: usb@2:4.2.1
                         version: 1.27
                         capabilities: usb-1.10 audio-control
                         configuration: driver=usbhid maxpower=100mA speed=12Mbit/s

А вот подробности об устройстве, которое я хочу использовать черный список:

T:  Bus=03 Lev=02 Prnt=06 Port=02 Cnt=03 Dev#=  8 Spd=5000 MxCh= 0
D:  Ver= 3.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  1
P:  Vendor=17e9 ProdID=436e Rev=31.24
S:  Manufacturer=DisplayLink
S:  Product=Dell D3100 USB3.0 Dock
S:  SerialNumber=1709142212
C:  #Ifs= 7 Cfg#= 1 Atr=e0 MxPwr=8mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=03 Driver=usbfs
I:  If#= 1 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
I:  If#= 2 Alt= 0 #EPs= 1 Cls=01(audio) Sub=01 Prot=20 Driver=snd-usb-audio
I:  If#= 3 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
I:  If#= 4 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=20 Driver=snd-usb-audio
I:  If#= 5 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0d Prot=00 Driver=cdc_ncm
I:  If#= 6 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm

И звуковое устройство, в частности:

*-usb:2
     description: Audio device
     product: Dell D3100 USB3.0 Dock
     vendor: DisplayLink
     physical id: 3
     bus info: usb@3:4.3
     version: 31.24
     serial: 1709142212
     capabilities: usb-3.10 audio-control
     configuration: driver=cdc_ncm maxpower=8mA speed=5000Mbit/s
1
задан 16 February 2019 в 06:46

1 ответ

У меня нет этой конкретной док-станции, но у меня есть похожая (Dell WD19), которая также имеет линейный выход и разъемы для наушников. Это расстраивает, потому что PulseAudio автоматически переключает вывод звука на выход наушников док-станции каждый раз, когда я подключаю док-станцию, даже если наушники не подключены.Если я отвечаю на звонок, я подключаю USB-гарнитуру, поэтому наушники или линейные выходы на док-станции мне не нужны. Мне очень нравится, когда PulseAudio автоматически переключается на USB-гарнитуру, поэтому я не хочу полностью отключать автоматическое переключение. Можно изменить активный выход через командную строку, как описано в этом вопросе , но автоматическое переключение все равно возвращается к выходам док-станции, когда я отключаю гарнитуру.

Оказывается, не так сложно заставить PulseAudio игнорировать устройство с помощью правила udev. (Первоисточник)


1. Найдите поставщика USB-устройства и идентификатор продукта

Запустите pactl listsins, чтобы просмотреть сведения обо всех аудиовыходах, известных PulseAudio. Это произведет довольно много вывода, но должно быть достаточно легко найти конкретные устройства, которые мы хотим добавить в черный список.

Sink #21
    State: RUNNING
    Name: alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock__sink
    Description: USB Audio Headphones
    Driver: module-alsa-card.c
    Sample Specification: s24le 2ch 48000Hz
    Channel Map: front-left,front-right
    Owner Module: 37
    Mute: no
    Volume: front-left: 30419 /  46% / -20.00 dB,   front-right: 30419 /  46% / -20.00 dB
            balance 0.00
    Base Volume: 65536 / 100% / 0.00 dB
    Monitor Source: alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock__sink.monitor
    Latency: 21709 usec, configured 18750 usec
    Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
    Properties:
        alsa.resolution_bits = "24"
        device.api = "alsa"
        device.class = "sound"
        alsa.class = "generic"
        alsa.subclass = "generic-mix"
        alsa.name = "USB Audio"
        alsa.id = "USB Audio"
        alsa.subdevice = "0"
        alsa.subdevice_name = "subdevice #0"
        alsa.device = "0"
        alsa.card = "1"
        alsa.card_name = "WD19 Dock"
        alsa.long_card_name = "Dell-WD15-Dock"
        alsa.driver_name = "snd_usb_audio"
        device.bus_path = "pci-0000:00:14.0-usb-0:1.3.4:1.0"
        sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/sound/card1"
        udev.id = "usb-Generic_USB_Audio_200901010001-00"
        device.bus = "usb"
        device.vendor.id = "0bda"
        device.vendor.name = "Realtek Semiconductor Corp."
        device.product.id = "402e"
        device.product.name = "USB Audio"
        device.serial = "Generic_USB_Audio_200901010001"
        device.string = "hw:Dock"
        device.buffering.buffer_size = "576000"
        device.buffering.fragment_size = "288000"
        device.access_mode = "mmap+timer"
        device.profile.name = "HiFi: hw:Dock: sink"
        device.profile.description = "Headphones"
        alsa.mixer_device = "hw:Dock"
        device.description = "USB Audio Headphones"
        module-udev-detect.discovered = "1"
        device.icon_name = "audio-card-usb"
    Ports:
        [Out] Headphones: Headphones (priority: 100)
    Active Port: [Out] Headphones
    Formats:
        pcm

Ищем строки device.vendor.id="0bda" и device.product.id="402e".

2. Создайте пользовательское правило udev

Создайте файл /etc/udev/rules.d/89-pulseaudio-usb.rules (с помощью предпочитаемого вами редактора) и вставьте подобную строку, используя поставщика и продукт Идентификаторы, найденные ранее:

ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="402e", ENV{PULSE_IGNORE}="1"

Сохраните файл, затем отключите док-станцию.

3. Повторное подключение (перезагрузка не требуется)

udev должен прочитать это новое правило и указать PulseAudio игнорировать устройство при следующем подключении — перезагрузка не требуется (по крайней мере, мне не нужно было в Ubuntu 20.04) .Устройство больше не будет отображаться как устройство вывода для PulseAudio, поэтому оно не будет автоматически выбираться в качестве устройства вывода.

7
ответ дан 23 October 2020 в 15:19

Другие вопросы по тегам:

Похожие вопросы: