首先介绍一些背景。我使用Ubuntu 18.04。我使用蓝牙外围鼠标/键盘,连接后,应执行脚本以自动重新映射按钮绑定。
我用来udevadm monitor --environment
定位连接设备时发生的事件,并用来udevadm info -a <device path>
查找可以为其创建规则的属性。这是输出:
KERNEL=="input73"
SUBSYSTEM=="input"
DRIVER==""
ATTR{name}=="BT Mouse"
ATTR{phys}=="e8:9c:67:ea:9c:36"
ATTR{properties}=="0"
ATTR{uniq}=="01:ac:78:f6:89:af"
所以我创建了一个规则/etc/udev/99-btmouse.rules
:
ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="BT Mouse", RUN="/bin/bash /usr/local/bin/xsessionrc.sh"
我检查使用
udevadm test <device path>
以确保规则的格式正确。输出:
Reading rules file: /etc/udev/rules.d/99-vrpark.rules
rules contain 786432 bytes tokens (65536 * 12 bytes), 50615 bytes strings
38504 strings (296742 bytes), 32602 de-duplicated (252030 bytes), 5903 trie nodes used
...
RUN '/bin/bash /usr/local/bin/xsessionrc.sh' /etc/udev/rules.d/99-vrpark.rules:1
ACTION=add
DEVPATH=<device path>
EV=17
ID_BUS=bluetooth
ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_5_1_0
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_PATH=pci-0000:00:14.0-usb-0:5:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_5_1_0
KEY=1f0000 0 0 0 0
MODALIAS=input:b0005v05ACp3232e0001-e0,1,2,4,k110,111,112,113,114,r0,1,8,B,am4,lsfw
MSC=10
NAME="BT Mouse"
PHYS="e8:9c:67:ea:9c:36"
PRODUCT=5/5ac/3232/1
PROP=0
REL=903
SUBSYSTEM=input
TAGS=:seat:
UNIQ="01:ac:78:f6:89:af"
USEC_INITIALIZED=8737148529
run: '/bin/bash /usr/local/bin/xsessionrc.sh'
Unload module index
Unloaded link configuration context.
在我看来,规则应该没问题,但脚本永远不会执行。 xsessionrc.sh 如下所示:
#!/bin/bash
# Map buttons
konsole --noclose -e xinput set-button-map "BT Mouse" 11 12 13 14
该脚本本身对我来说效果很好。有人可以指出我如何让我的规则执行脚本的正确方向吗?