用小黑的朋友们最爱的就是小红点了吧,但是小红点的移动速度对于大多数人来讲确实是有一点慢,那么当然需要将它调教的更灵敏一些咯。本篇先介绍了如何手动修改小红点的两项属性,接着介绍了如何使用 udev rules 来让小红点被检测到的时候自动设置属性。
其实很简单咯,在 ThinkWiki 上面就给出最简单的解决方案:
echo -n 120 > /sys/devices/platform/i8042/serio1/serio2/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/serio2/sensitivity
这个操作一定要拥有 root 权限,如果只是 sudo 的话只能提升 echo 的权限,然后就会因为重导向(redirection)的权限不足而无法修改。
想必你一定不会满足于每次启动都使用 root 权限运行这两行指令, 那么如何自动在启动时候修改这两个值就是一个问题: 放在 rc.local 中?有些人成功了,而大多数人都失败了。 原因大抵是 rc.local 文件执行的时候小红点还没有被检测到, 也就是说上述的对应文件还没有产生,所以所有操作都变成了徒劳。
这里我采用的方法是写 udev 的 rules, 同样在 ThinkWiki上也有说明:但是对于我的 udev r151 来说,wiki上的配置并不可行,可能是因为udev的rules规则修改了。 接着我参考了 dsd 的 Writing udev rules,在/etc/udev/rules.d里添加一个规则文件,比如叫做 10-trackpoint.rules。内容:
SUBSYSTEM=="serio", DRIVERS=="psmouse", ENV{SERIO_TYPE}=="05", WAIT_FOR="/sys/devices/platform/i8042/serio1/serio2/sensitivity", ATTR{sensitivity}="156", ATTR{speed}="255"
这一条的意思是如果匹配到了前面三条,并且 "wait_for" 的文件出现,
那么就给后面两个属性赋值。那么问题就是如何确定前面的匹配?
我的做法是从 Thinkwiki 上找到了小红点对应的位置
/sys/devices/platform/i8042/serio1/serio2
然后用 udevadmin 去测试它
udevadm test /sys/devices/platform/i8042/serio1/serio2
他会在最后给出这个设备的信息:
UDEV_LOG=6
DEVPATH=/devices/platform/i8042/serio1/serio2
DRIVER=psmouse
SERIO_TYPE=05
SERIO_PROTO=00
SERIO_ID=00
SERIO_EXTRA=00
MODALIAS=serio:ty05pr00id00ex00
ACTION=add
SUBSYSTEM=serio
应该可以看懂了吧?用 ENV 去匹配 SERIO_TYPE 的值用 DRIVER 去匹配 psmouse 等等
我的小红点的 ERIO_TYPE==05,而你的不一定。
我的小红点的 udev 位置是 /sys/devices/platform/i8042/serio1/serio2,而你的也不一定(尽管大多数都是这个)(Sep 11,2011 新增:根据 这篇文章,他的小红点就是 serio4/serio5)
在 udev r151 规则中的 ATTRS 似乎只可以用来匹配,但是不能用来赋值,如果 ATTRS 用了一个等号的话就会出 "invalid ATTRS operation" 错误提示。而 ATTR 既可以用来赋值也可以用来匹配,比如如果上面改成 ATTR{sensitivity}=="156"
,那就是说如果匹配了这条之后才修改 speed 属性。