Bluetoothキーボードのudevルールを作成する

Bluetoothキーボードの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が小文字のアドレスを表示する方法だと思います)。

おすすめ記事