udev/bluezを使用したBluetoothヘッドセット接続の検出

udev/bluezを使用したBluetoothヘッドセット接続の検出

私が達成したいこと:接続したら、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を使用してこの種のイベント処理を作成できますか?それでは、どうすればいいですか?

関連情報