블루투스 키보드에 대한 udev 규칙 만들기

블루투스 키보드에 대한 udev 규칙 만들기

저는 Debian Wheezy를 실행하는 노트북에서 Logitech k810 Bluetooth 키보드를 사용하고 있습니다. (나는 키보드를 작동하게 만들었습니다.이 가이드.)

기본적으로 F1-12 키는 FN 키를 누르지 않는 한 멀티미디어 키입니다. 나는 기본 키가 F1-12인 것을 선호합니다.

다행스럽게도이 남자키 기능을 반전시키는 프로그램을 만들었습니다. 프로그램을 실행하면 내가 원하는 방식으로 키를 얻을 수 있으며 재부팅 후에도 유지됩니다.

불행하게도 전원을 절약하기 위해 키보드를 닫았다가 다시 열면 프로그램이 유지되지 않습니다.

이런 이유로 키보드가 연결되면 키 반전 프로그램을 실행하도록 udev 규칙을 만들려고 합니다.

위 링크에서 제안된 다음 솔루션을 시도해 보았습니다. 지금까지는 작동하지 않습니다.

andreas@crunchbang:/etc/udev/rules.d$ cat 00-k810.rules
KERNEL==”hidraw*”, SUBSYSTEM==”hidraw”, ATTRS{address}==”00:1F:20:76:41:30”, RUN+=”/srv/scripts/k810.sh %p”

andreas@crunchbang:/srv/scripts$ cat k810.sh
#! /bin/bash
line=`dmesg | grep -i k810 | grep hidraw`
[[ $line =~ (.*)(hidraw+[^:])(.*) ]]
device=${BASH_REMATCH[2]}
/srv/bin/k810_conf -d /dev/${device} -f on

/srv/bin/ 폴더에는 키 반전 프로그램(k810_conf)이 포함되어 있습니다. 이 프로그램이 정확히 무엇을 하는지는 모르지만 다음과 같은 스크립트를 사용하여 실행하면 작동합니다.

sudo /srv/scripts/k810.sh

따라서 문제는 udev가 장치를 올바르게 감지하지 못한다는 것입니다. 이렇게 하면 MAC 주소를 얻게 됩니다.

hcitool scan

...키보드가 페어링 모드에 있을 때. 블루맨에서도 본 내용이에요.

udevadm monitor관련성이 있는지 확실하지 않지만 키보드를 열 때의 출력은 다음과 같습니다.

KERNEL[31976.490290] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C
(hid) KERNEL[31976.491464] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39
(input) KERNEL[31976.491689] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39/event12
(input) KERNEL[31976.491885] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C/hidraw/hidraw0
(hidraw) UDEV  [31976.496400] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C
(hid) UDEV  [31976.497196] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39
(input) UDEV  [31976.499496] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C/hidraw/hidraw0
(hidraw) UDEV  [31976.500679] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39/event12
(input)

위의 udev 규칙이 작동하지 않는 이유와 효과적인 규칙을 만드는 방법에 대한 아이디어가 있습니까?

답변1

문제는, 적어도 내 경우에는 주소가 소문자여야 한다는 것입니다! 따라서 상황에 따라 ATTRS{address}=="00:1F:20:76:41:30"다음과 같이 변경하십시오.

ATTRS{address}=="00:1f:20:76:41:30"

그래도 작동하지 않으면 권한을 다시 확인하겠습니다.

또한 udev는 다른 변수 중에서 사용할 수 있는 DEVNAME 변수를 설정해야 하므로 실제로 로그를 grep할 필요가 없습니다(권한 문제에 대한 또 다른 가능한 후보). 추가 문제 해결을 위해 스크립트를 실행할 때마다 (스크립트에서) 로그 파일을 생성할 수 있습니다. 이렇게 하면 스크립트가 완전히 실행되었는지, 즉 udev 규칙이 트리거되었는지 또는 나중에 어딘가에서 오류가 발생했는지 알 수 있습니다.

따라서 (링크한 페이지에 있는) 작성자의 스크립트 솔루션이 나에게는 더 나은 것 같습니다. 저는 다음과 같이 조정했습니다.

권한:

# ls -l /etc/udev/rules.d/50-k810.rules /opt/bin/k810*
-rw-r--r-- 1 root root   106 2014-07-16 19:21 /etc/udev/rules.d/50-k810.rules
-rwxr-xr-x 1 root root   304 2014-07-16 19:39 /opt/bin/k810.sh
-rwxr-xr-x 1 root root 13102 2014-06-07 22:05 /opt/bin/k810_conf

50-k810.

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{address}=="my:k8:10:ad:re:ss" \
 RUN+="/opt/bin/k810.sh %p"

k810.sh:

#!/bin/sh
LOGFILE=/tmp/logfilek810sh.log
echo "RUN: at `date` by `whoami` act $ACTION \$1 $1 DEVPATH $DEVPATH DEVNAME $DEVNAME" >> ${LOGFILE}
echo "Setting F-keys on for your K810!"

if [ "$ACTION" == "add" ];
then
    # configure k810 ($DEVPATH) at $DEVNAME.
    /opt/bin/k810_conf -d $DEVNAME -f on
fi

또한 작은 점은 udevadm info -a -n /dev/hidraw1hcitool을 사용하여 올바른 주소를 얻을 수 있다는 것입니다(올바른 hidraw로 대체). 일치해야 하지만 다시 확인하기 위한 것입니다(이것이 udev가 소문자 주소를 보는 방식이라고 생각합니다).

관련 정보