私が達成したいこと:接続したら、Bluetoothヘッドセットをパルスオーディオのデフォルトの受信機に設定し、接続が切断されたらノートパソコンのスピーカーにリセットします。
理由:私のラップトップは、4つの潜在的なHDMI出力をすべてオーディオシンクとして検出し、そのうちの1つをデフォルト出力に設定することがよくあります。 pavucontrolを開いて変更するのに疲れました。
Q:これに対するudevルールの作成を検討しましたが、残念ながらudevadmのデータはあまり役に立ちません。
udevadm monitor
ヘッドフォンが接続されている場合出力:
~ > udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[74617.230946] add /devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0/hci0:256 (bluetooth)
UDEV [74617.232667] add /devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0/hci0:256 (bluetooth)
KERNEL[74618.266963] add /devices/virtual/input/input47 (input)
KERNEL[74618.267067] add /devices/virtual/input/input47/event22 (input)
UDEV [74618.269394] add /devices/virtual/input/input47 (input)
UDEV [74618.364725] add /devices/virtual/input/input47/event22 (input)
udevadm info
追加されたデバイスの出力:
~ > udevadm info -ap /devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0/hci0:256
...
looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0/hci0:256':
KERNEL=="hci0:256"
SUBSYSTEM=="bluetooth"
DRIVER==""
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0':
KERNELS=="hci0"
SUBSYSTEMS=="bluetooth"
DRIVERS==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="0"
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0/hci0:256':
KERNEL=="hci0:256"
SUBSYSTEM=="bluetooth"
DRIVER==""
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0/bluetooth/hci0':
KERNELS=="hci0"
SUBSYSTEMS=="bluetooth"
DRIVERS==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="0"
ATTRS{power/runtime_status}=="unsupported"
ATTRS{power/runtime_suspended_time}=="0"
~ > udevadm info -ap /devices/virtual/input/input47
...
looking at device '/devices/virtual/input/input47':
KERNEL=="input47"
SUBSYSTEM=="input"
DRIVER==""
ATTR{capabilities/abs}=="0"
ATTR{capabilities/ev}=="100007"
ATTR{capabilities/ff}=="0"
ATTR{capabilities/key}=="2fc800 145200000000 0 10300 49e800000c00 e16800000000f f810000010000ffc"
ATTR{capabilities/led}=="0"
ATTR{capabilities/msc}=="0"
ATTR{capabilities/rel}=="0"
ATTR{capabilities/snd}=="0"
ATTR{capabilities/sw}=="0"
ATTR{id/bustype}=="0005"
ATTR{id/product}=="4020"
ATTR{id/vendor}=="009e"
ATTR{id/version}=="0481"
ATTR{inhibited}=="0"
ATTR{name}=="gtf qc35ii (AVRCP)"
ATTR{phys}=="3c:e9:f7:f2:f6:10"
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
~ > udevadm info -ap /devices/virtual/input/input47/event22
...
looking at device '/devices/virtual/input/input47/event22':
KERNEL=="event22"
SUBSYSTEM=="input"
DRIVER==""
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
looking at parent device '/devices/virtual/input/input47':
KERNELS=="input47"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{capabilities/abs}=="0"
ATTRS{capabilities/ev}=="100007"
ATTRS{capabilities/ff}=="0"
ATTRS{capabilities/key}=="2fc800 145200000000 0 10300 49e800000c00 e16800000000f f810000010000ffc"
ATTRS{capabilities/led}=="0"
ATTRS{capabilities/msc}=="0"
ATTRS{capabilities/rel}=="0"
ATTRS{capabilities/snd}=="0"
ATTRS{capabilities/sw}=="0"
私が知っている限り、ここではオーディオレシーバーではなく、「入力」であっても、接続されているBluetoothヘッドセットを検出する方法はほとんどありません(マイクだと仮定していますが、間違っている可能性がありinput47
ます)。おそらくbluezイベント(またはpulseaudioイベント)を聞くできる方法があるようですが、まだ見つかりませんでした。
udevまたはbluezを使用してこの種のイベント処理を作成できますか?それでは、どうすればいいですか?