udev/bluez를 사용하여 블루투스 헤드셋 연결 감지

udev/bluez를 사용하여 블루투스 헤드셋 연결 감지

내가 달성하고 싶은 것: 연결되면 블루투스 헤드셋을 펄스 오디오의 기본 수신기로 설정하고 연결이 끊어지면 노트북 스피커로 다시 설정합니다.

이유: 내 노트북은 4개의 잠재적 HDMI 출력을 모두 오디오 싱크로 감지하고 그 중 하나를 기본 출력으로 설정하는 경우가 많습니다. pavucontrol을 열고 변경하는 데 지쳤습니다.

질문: 이에 대한 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를 사용하여 이러한 종류의 이벤트 처리를 작성할 수 있습니까? 그렇다면 어떻게 해야 할까요?

관련 정보