转做 java 开发后感觉电脑越来越慢了, 于是就拿起了大学时折腾过的 Archlinux.
公司虽然要求 Windows/MacBook 安装几个客户端, 但因为没有 linux 解决方案, 也没有禁止使用 linux, 这点还是挺人性化的. 刚开始几天是下班后再切换到 Arch 下, 测试几天后就把工作环境完全切换到 Arch 下了.
在 linux 下一个很严重的问题是 触摸板太灵敏了, 稍微一碰鼠标就飞了, 并且 linux 桌面环境有特性: 当前活动窗口是鼠标所在窗口. 这两个问题/特性加起来, 是非常严重使用体验. 完全禁用触摸板又太极端了, 于是翻翻 Archlinux WiKi, 优化下触摸板配置, 虽然还达不到同事吹嘘的 MacBook 那种程度, 但也比 Windows 下好用了.
基础配置
确认自己的触摸板支持哪些特性:
$ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities
Synaptics Capabilities (325): 1, 0, 0, 1, 1, 1, 1
上面输出的 1/0 按顺序分别表示:
1: 设备有物理左键;
0: 设备没有物理中键;
0: 设备没有物理右键;
1: 设备支持两指检测;
1: 设备支持三指检测;
1: 设备支持配置垂直分辨率(精度);
1: 设备支持配置水平分辨率(精度);
既然支持两指和三指检测, 就可以配置对应的事件了. 其中相关属性有:
TabButton1: 一个手指轻触触摸板;
TabButton2: 两个手指轻触触摸板;
TabButton3: 三个手指触摸触摸板;
可选值是:
1: 鼠标左键;
2; 鼠标中键;
3; 鼠标右键;
于是就有了下面的配置:
synclient TapButton1=1 # 一个手指轻触触摸板代表点击左键
synclient TapButton2=3 # 两个手指轻触触摸板代表点击右键
synclient TapButton3=2 # 三个手指轻触触摸板代表点击中键
触摸板感应测试
当前的英文 WiKi 已经没有关于 synclient 命令 -m 参数的介绍了, 命令文档中也没有该参数的介绍, 只有中文 WiKi 里还有一点介绍. 经测试可用, 并且效果比 evtest 和 xev 更清晰.
这里 -m 参数是用来配置每隔多少毫秒读取一次触摸板当前状态(比如触摸位置和压力). 例如:
$ synclient -m 100
time x y z f w l r u d m multi gl gm gr gdx gdy
0.000 1053 3969 0 0 0 0 0 0 0 0 00000000
1.802 1105 3623 0 0 0 0 0 0 0 0 00000000
2.703 1219 4364 94 1 0 0 0 0 0 0 00000000
2.803 1222 4377 59 1 0 0 0 0 0 0 00000000
2.904 1215 4382 0 0 0 0 0 0 0 0 00000000
4.606 2645 3925 64 4 0 0 0 0 0 0 00000000
4.706 2640 3937 48 4 0 0 0 0 0 0 00000000
4.806 2640 3937 0 0 0 0 0 0 0 0 00000000
其中:
x/y: 位置;
z: 压力;
f: 手指数;
这样, 如果我们对触摸板的灵敏度不满意的话, 可以通过尝试操作触摸板即快速找到自己的满意值.
掌压感应
如果在打字时鼠标乱飞, 那就需要开启和设置 掌压感应 了:
synclient PalmDetect=1 # 开启掌压感应
synclient PalmMinWidth=8 # 设定手掌与触摸板的最小接触面, 超过该值认为触摸板被手掌压到了(单位是手指宽度?)
synclient PalmMinZ=30 # 设定手掌压在触摸板上的最小压力, 超过该值认为触摸板被手掌压到了
注: PalmMinWidth 和 PalmMinZ 需要根据自身情况调整数值大小.
xSwipe
上面提到的这些功能可被 xf86-input-synaptics 驱动支持, 然而如果想开启四指/五指检测和更多手势支持的话,
就需要安装 xf86-input-synaptics-xswipe-git 驱动了.
安装该驱动后, clone 在 GitHub 上的 xSwipe(https://github.com/iberianpig/xSwipe)
通过修改配置文件 eventKey.cfg 设置不同触摸板事件对应的键盘按键. 然后启动 xSwipe 即可:
perl xSwipe.pl