前段时间通过修改 grub 参数的形式来让 Ubuntu 识别了触摸板,基本的移动和点击功能可以使用了,但边缘滚动和双指滚动功能还无法正常使用。
但在 Ubuntu 正式发布了 12.04 后,从 beta 版 upgrade 了一下,发现滚动功能居然可以使用了,系统设置了也有了 Touchpad 这个选项卡。
这样,边缘滚动和双指滚动便可以使用了。但默认情况下的滚动是和鼠标的滚动一样的,手指运动方向和滚动条的运动方向一致而和内容的滚动方向相反,对于习惯了手机等触摸屏的滚动方式来说,触摸板的滚动方式有一点违和感,决定调为和触屏手机一致的滚动方式,或者说是 mac 宣称的 natural scroll。
方法一
一开始找到的是个极其简单的方法,只需要添加或修改一个文件即可,具体如下:
- 在当前用户 home 目录下添加或修改 .Xmodmap 文件
- 里面内容为:pointer = 1 2 3 5 4 7 6 8 9 10 11 12
- 注销当前用户再登录即可
虽然具体的数值含义不是很明白,但从 5/4、7/6 的交换情况来看,还是大抵明白是什么原理了:交换了滚动方向的信号。
我尝试后的确可以了,但使用了一会后,当我接上我的无线鼠标后,发现一种更加强烈的违和感了:常规鼠标的滚动方向也被相反了。这应该是那个配置文件做了全局映射的原因,无奈,放弃这种方法。
方法二
在第一个方案的评论中,找到了另一种解决方法,通过安装一个小软件来达到目的,具体如下:
sudo add-apt-repository ppa:zedtux/naturalscrolling
sudo apt-get update
sudo apt-get install naturalscrolling
安装完毕后启动这个应用程序即可设置是否启动 natural scrolling 以及是否开机启动。
我专门测试了下触摸板和鼠标的工作情况,触摸板可以使用 natural scrolling,而鼠标也可以维持原有的滚动方式,不错。
方法三
方法二可以后,我想了想,既然方法一可以通过简单的配置文件来达到目的,那么按理说,应该不需要常驻一个程序来监控,方便随时调整的 GUI 界面也不是必须的。只是问题是,如何把全局的映射改为只映射触摸版呢?
想了又想,想起当初查找资料来让系统识别触摸板的时候似乎 xinput 有一些设置功能的,尝试地敲了一下帮助命令 xinput -h,发现里面有 get-button-map 和 set-button-map 参数,这下高兴了,找着门道了。
于是先获取到触摸板对应的设备id,然后查看一下其原有的 button-map,然后设置新的 button-map,具体的过程如下图:
需要注意的是,这种方法会在重启后失效,所以需要把最后那个 set-button-map 命令加到 startup 中,让其开机启动。
update in 2012-05-03
发现触摸板的 id 会发生变化,从而导致有时 set-button-map 失效,这样的话,直接用 devices name 会更加合适,即:
xinput set-button-map "FSPPS/2 Sentelic FingerSensingPad" 1 2 3 5 4 7 6 8 9 10 11 12
mouse button maps
查了一下,Remapping mouse buttons 一文记录的 mouse button maps 如下:
1 | Left click |
---|---|
2 | Middle click |
3 | Right click |
4 | Wheel up |
5 | Wheel down |
6 | Wheel left |
7 | Wheel right |
8 | Thumb1 |
9 | Thumb2 |
10 | ExtBt7 |
11 | ExtBt8 |
从那文来看,甚至可以做到不同程序使用不同的键映射。
真是个爱折腾的好孩子
没办法,很多设备都没有 Linux 版的驱动,只能靠社区力量或自己摸索 😎