为蓝牙键盘制定udev规则

少校

我在运行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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为蓝牙键盘制定udev规则

来自分类Dev

为什么在Bison中为每个操作制定规则

来自分类Dev

为字符串 PHP 制定特定规则

来自分类Dev

GNU制定嵌套规则

来自分类Dev

制定行提取规则

来自分类Dev

udev规则可在插入USB键盘时自动加载键盘布局

来自分类Dev

为具有多个tty端口的设备创建UDEV规则

来自分类Dev

为 olimex 的 avr-usb-jtag 执行 udev 规则的问题

来自分类Dev

制定 IIS 重定向规则

来自分类Dev

如何使用“兄弟”设备的序列号(适用于没有唯一序列号的USB设备)制定udev规则?

来自分类Dev

从systemd触发udev规则

来自分类Dev

udev规则中的SYMLINK

来自分类Dev

udev规则排除设备

来自分类Dev

如何使udev规则生效

来自分类Dev

UDEV规则未触发

来自分类Dev

奇怪的udev规则行为

来自分类Dev

udev不适用规则

来自分类Dev

udev规则让我发疯

来自分类Dev

如何调试udev规则?

来自分类Dev

如何创建udev规则?

来自分类Dev

引导时的udev规则

来自分类Dev

蓝牙键盘问题

来自分类Dev

防止蓝牙键盘休眠

来自分类Dev

udev规则,用于为相同的USB串行设备分配已知的符号链接

来自分类Dev

为热插拔SATA设备的固定安装点编写udev规则(Ubuntu 14.04)

来自分类Dev

Udev规则将别名设备定义为USB端口号

来自分类Dev

制定子目录的模式规则

来自分类Dev

SCSS foreach制定计算间距规则

来自分类Dev

制定约会邀请的前景规则