私は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/hidraw1
hcitoolを使用して正しいアドレスを取得できることです(正しいhidrawに置き換えます)。一致する必要がありますが、再確認することです(これはudevが小文字のアドレスを表示する方法だと思います)。