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ポートを試してみると効果があるようです。

おすすめ記事