USB 사운드 카드를 통해 연결된 외부 스피커의 볼륨 제어 비활성화

USB 사운드 카드를 통해 연결된 외부 스피커의 볼륨 제어 비활성화

Ubuntu 19.10을 실행하는 PC에 USB 사운드 카드(Avantree Leaf)가 연결되어 있고 AptX를 통해 사운드 카드에 Dockin D-Fine 스피커가 연결되어 있습니다.

Ubuntu 18.10에서는 모든 것이 잘 작동합니다. PC와 스피커의 볼륨 컨트롤은 독립적이며 스피커 볼륨을 변경해도 PC 볼륨에는 영향을 미치지 않습니다.

19.10에서는 "개선"되어 이제 스피커 볼륨을 변경하면 PC의 볼륨도 변경됩니다. 그러나 이것은 문제가 있습니다:

  • 볼륨 컨트롤은 독립적으로 유지됩니다. "+"를 누르면 스피커와 컴퓨터의 볼륨 컨트롤이 동시에 증가합니다.
  • 스피커에서 "+"를 누르면 컴퓨터의 볼륨이 낮아지는 경우가 있습니다.

따라서 질문은 다음과 같습니다.

스피커를 통해 컴퓨터 볼륨 변경을 비활성화하는 방법은 무엇입니까?

이는 표준 Ubuntu 19.10 설치이므로 PulseAudio를 사용합니다.

$ cat /proc/asound/cards | grep Leaf
 2 [Leaf           ]: USB-Audio - Avantree Leaf
                      Avantree Leaf at usb-0000:00:1d.7-5.2, full speed
$ amixer -c 2
Simple mixer control 'PCM',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 15
  Mono: Playback 0 [0%] [-15.00dB] [on]
Simple mixer control 'Mic',0
  Capabilities: cvolume cvolume-joined
  Capture channels: Mono
  Limits: Capture 0 - 31
  Mono: Capture 24 [77%] [24.00dB]
$ pacmd dump
### Configuration dump generated at Sun Jan 12 16:42:59 2020

load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore
load-module module-augment-properties
load-module module-switch-on-port-available
load-module module-switch-on-connect
load-module module-udev-detect
load-module module-bluetooth-policy
load-module module-bluetooth-discover
load-module module-bluez5-discover
load-module module-native-protocol-unix
load-module module-default-device-restore
load-module module-rescue-streams
load-module module-always-sink
load-module module-intended-roles
load-module module-suspend-on-idle
load-module module-console-kit
load-module module-systemd-login
load-module module-position-event-sounds
load-module module-role-cork
load-module module-snap-policy
load-module module-filter-heuristics
load-module module-filter-apply
load-module module-alsa-card device_id="1" name="pci-0000_0f_00.1" card_name="alsa_card.pci-0000_0f_00.1" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
load-module module-alsa-card device_id="0" name="pci-0000_00_1b.0" card_name="alsa_card.pci-0000_00_1b.0" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
load-module module-x11-publish display=:1
load-module module-x11-cork-request display=:1
load-module module-x11-xsmp display=:1 session_manager=local/dasha-HP-Z600-Workstation:@/tmp/.ICE-unix/2419,unix/dasha-HP-Z600-Workstation:/tmp/.ICE-unix/2419
load-module module-alsa-card device_id="2" name="usb-0a12_Avantree_Leaf-00" card_name="alsa_card.usb-0a12_Avantree_Leaf-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
load-module module-cli-protocol-unix

set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo 0x725a
set-sink-mute alsa_output.pci-0000_00_1b.0.analog-stereo no
suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo yes
set-sink-volume alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo 0x570c
set-sink-mute alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo no
suspend-sink alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo yes

set-source-volume alsa_output.pci-0000_00_1b.0.analog-stereo.monitor 0x10000
set-source-mute alsa_output.pci-0000_00_1b.0.analog-stereo.monitor no
suspend-source alsa_output.pci-0000_00_1b.0.analog-stereo.monitor yes
set-source-volume alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo.monitor 0x10000
set-source-mute alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo.monitor no
suspend-source alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo.monitor yes
set-source-volume alsa_input.usb-0a12_Avantree_Leaf-00.mono-fallback 0xc3b1
set-source-mute alsa_input.usb-0a12_Avantree_Leaf-00.mono-fallback no
suspend-source alsa_input.usb-0a12_Avantree_Leaf-00.mono-fallback yes

set-card-profile alsa_card.pci-0000_0f_00.1 off
set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo
set-card-profile alsa_card.usb-0a12_Avantree_Leaf-00 output:iec958-stereo+input:mono-fallback

set-default-sink alsa_output.usb-0a12_Avantree_Leaf-00.iec958-stereo
set-default-source alsa_input.usb-0a12_Avantree_Leaf-00.mono-fallback

### EOF

답변1

참고: 저처럼 avantree dg60을 구성한 경우 udev에 대해 설명하는 위치로 스크롤하여 udev 구성에 규칙을 추가하세요. 그렇지 않은 경우 udev 규칙에 사용할 특정 값을 결정하려면 아래 단계를 따라야 합니다. 이는 하드웨어에 따라 매우 다르기 때문입니다.

저도 avantree 장치를 가지고 있는데 이것도 짜증스럽습니다. 미디어 키 이벤트를 전송하기 위해 HID를 등록하여 볼륨 제어를 구현하는 것으로 나타났습니다.

Ubuntu 18.04 및 20.04에서 이 작업을 시도했지만 이 잠재적으로 성가신 기능이 있는 다른 운영 체제 및 사운드 카드에서도 프로세스가 매우 유사해야 합니다.

먼저 lsusb를 확인하여 avantree/usb 사운드 카드의 버스/장치 번호를 확인하세요. 내 관련 부분은 다음과 같습니다. 귀하의 부분은 다를 것입니다.

$ lsusb
Bus 003 Device 009: ID 0a12:1004 Cambridge Silicon Radio, Ltd 

어떤 공급업체/제품 ID를 가지고 있는지 확실하지 않은 경우 삽입/제거 시 dmesg의 출력을 확인하고 "usb 3-1: Found new USB device, idVendor=0a12, idProduct=1004, bcdDevice" 항목과 같은 항목을 찾으십시오. =30.83”.

등록된 내용을 보려면 "lsusb -t"를 살펴보세요. 나에게 관련된 부분은 다음과 같습니다.

...
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 2: Dev 9, If 0, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 2: Dev 9, If 1, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 2: Dev 9, If 2, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 2: Dev 9, If 3, Class=Human Interface Device, Driver=usbhid, 12M
...

버스 03: 포트 1 => 포트 2: dev 9, 인터페이스 3을 참조하세요. HID가 등록되어 있습니다. 다음으로 /sys/bus/usb/devices/[bus]-[port]에서 sysfs 항목을 확인하세요. 내 경우에는 /sys/bus/usb/devices/3-2입니다.

$ ls -l /sys/bus/usb/devices/3-2/
total 0
drwxr-xr-x 4 root root     0 Jun  2 19:14 3-2:1.0
drwxr-xr-x 3 root root     0 Jun  2 19:14 3-2:1.1
drwxr-xr-x 3 root root     0 Jun  2 19:14 3-2:1.2
drwxr-xr-x 6 root root     0 Jun  2 19:14 3-2:1.3
...

lsusb -t에서 인터페이스 3(1.3)을 볼 수 있습니다. 그 안에있는 파일을 나열하십시오 ...

$ ls -1 /sys/bus/usb/devices/3-2/3-2:1.3 
0003:0A12:1004.0036
authorized
bAlternateSetting
bInterfaceClass
bInterfaceNumber
bInterfaceProtocol
bInterfaceSubClass
bNumEndpoints
driver
ep_81
modalias
power
subsystem
supports_autosuspend
uevent
usbmisc

이 HID에 할당된 Authorization 속성을 볼 수 있으며 기본값은 "1"입니다. 일시적으로 수정하려면 "0"으로 설정하세요.

$ echo 0 > /sys/bus/usb/devices/3-2/3-2:1.3/authorized

결과는 즉각적으로 나타나야 합니다. 그러나 지금부터는 이 작업이 자동으로 수행되도록 할 수도 있습니다. 이는 udev 규칙을 작성하여 달성할 수 있습니다:

ACTION=="add", ATTR{idVendor}=="0a12", ATTR{idProduct}=="1004", RUN+="/bin/sh -c 'echo 0 > /sys$DEVPATH/`basename $DEVPATH`:1.3/authorized'"

위의 규칙을 /etc/udev/rules.d/99-avantree.rules에 넣고 권한 644 및 user:group=root:root가 있는지 확인하고 다음에 "udevadm control --reload-rules를 실행하여 규칙을 다시 로드합니다. " 기기가 연결되면 'Authorization' 속성이 0으로 설정되어 있어야 합니다.

RUN 스크립트는 $DEVPATH를 가져옵니다(나의 경우 /devices/pci0000:00/0000:00:08.1/0000:28:00.3/usb3/3-2가 포함되어 있습니다. /sys/bus/usb/devices/3-2는 이 경로에 대한 기호 링크($DEVPATH에 /sys가 없음) 및 접두사 /sys가 추가되고 1-4개의 접미사가 $DEVPATH 변수에 추가되고 1.3이 추가됩니다.

udev 일치 및 경로 등에 대해 완전히 확신할 수 없기 때문에 이 수정 사항은 100% 안정적이지 않을 수 있지만 다른 USB 포트를 사용해 보면 효과가 있는 것 같습니다.

관련 정보