![udev/bluez를 사용하여 블루투스 헤드셋 연결 감지](https://linux55.com/image/224687/udev%2Fbluez%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4%20%ED%97%A4%EB%93%9C%EC%85%8B%20%EC%97%B0%EA%B2%B0%20%EA%B0%90%EC%A7%80.png)
내가 달성하고 싶은 것: 연결되면 블루투스 헤드셋을 펄스 오디오의 기본 수신기로 설정하고 연결이 끊어지면 노트북 스피커로 다시 설정합니다.
이유: 내 노트북은 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를 사용하여 이러한 종류의 이벤트 처리를 작성할 수 있습니까? 그렇다면 어떻게 해야 할까요?