我在运行Debian Wheezy的笔记本电脑上使用了Logitech k810蓝牙键盘。(通过遵循本指南,我可以使键盘正常工作。)
默认情况下,除非按下FN键,否则F1-12键是多媒体键。我更喜欢默认情况下的键为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
...当键盘处于配对模式时。这也是我在Blueman中看到的那个。
不确定是否相关,但这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规则为何不起作用的任何想法-以及如何使之可行?
至少就我而言,问题在于地址必须小写!因此,根据您的情况,更改ATTRS{address}=="00:1F:20:76:41:30"
为以下内容:
ATTRS{address}=="00:1f:20:76:41:30"
如果不这样做,我会仔细检查权限。
另外,udev还应该设置一个DEVNAME变量(可以使用),这样您就可以使用它,因此您实际上并不需要grep日志(权限问题的另一个可能的候选者)。要进行进一步的故障排除,您可以在每次脚本运行时(从脚本中)仅创建一个日志文件-这样,您将知道脚本是否已运行-即,是否完全触发了udev规则,或者是否发生了错误在以后的某个地方。
因此,作者脚本解决方案(在您已经链接的页面上)是更好的IMO。我已经这样修改了它:
权限:
# 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.rules:
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看到小写地址的方式)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句