很久之前就被 Ubuntu 的 3D 桌面给惊掉了下巴,不久前终于用 CCSM 自己动手配置了个。效果不错,比较稳定。更进一步,要是能实现触摸手势控制的话,就能兼顾美观和易用了。

上网搜索一圈,由于我用的是 Ubuntu 14.04 自带的 Unity,很久以前的 touchegg 已经完全不支持了,只有 xSwipe 可以通过安装旧驱动正常使用,项目地址在此。按照 README 指导可顺利安装,第一次运行 perl ~/xSwipe-master/xSwipe.pl 可能会出现这个问题,原帖给出了解决方法如下,出错的原因是第一次运行 cpan 没有配置。

sudo cpan -i Smart::Comments

终端运行 perl ~/xSwipe-master/xSwipe.pl ,测试触摸手势,可以在终端窗口中看到相关手势事件和触发按键。xSwipe 的压缩包中本身提供两种手势方案,一种是和苹果 OS X 类似的自然触摸手势,还有另一种通用手势。二者差别不大,且都可以自行修改。进入 ~/xSwipe-master/ 修改 eventKey.cfg ,参考其中的对应按键可以自行修改,详细信息可参考项目 Wiki 页面
保存修改的配置,killall perl 结束程序,再把 xSwipe 加入 Startup ,保存如下命令实现登录账户自动开启手势控制。

sh -c 'perl ~/xSwipe-master/xSwipe.pl'

此外,xSwipe 提供手势灵敏度参数 -d,默认值为1,请根据需要自行更改,例如 -d 0.5。这样一来,就需要把灵敏度参数加进 Startup 命令。除此之外,还有边缘滑动参数 -e 、启用自然手势参数 -n、触摸板响应周期参数 -m (默认 10 毫秒)提供选择。


在实际使用过程中,我遇到了两个问题。

首先,在 Ubuntu 14.04 Unity 中 xSwipe 无法调用 super + w 键,于是 Window Picker,也就是窗口快速切换,无法加入手势。这似乎是个已知的 bug ,不过我已经用了 CCSM,只需通过它修改快捷键再写入 xSwipe 配置,问题就解决了。

接下来我遇到了个很蛋疼的问题…… 设置了三指上划为快速切换窗口。
然后每次上划都会有窗口莫名其妙地关闭,而且不像是进程意外退出,比如终端窗口还有是否关闭的提示,就好像是我自己去点的叉…… Google 好久都没搞懂问题出在哪里,百思不得其解 @_@ ……
最后怀疑到了 Compiz 身上,Google 关键词 “compiz window picker close window”,第一条结果……

To close a window in scaled mode, middle click on the window.

好吧,在 window picker 中有这样一个特性:鼠标中键可关闭窗口。然后笔记本触摸板似乎不太灵敏,三指上划完毕,每次都认为有三指按下的动作。接下来触摸板驱动把三指按下定义为鼠标中键按下,窗口关闭……
找到了问题所在,解决起来就容易多了,只要禁用触摸板中键即可。

  • 终端运行 xinput 查看输入设备信息,在 pointer 字段下找到触摸板 id ,我的笔记本触摸板 id 为 11 。
  • 运行 xinput list 11 查看触摸板具体按键信息,找到 “Button labels”,按顺序,中键 “Button Middle” 是第二个:

    Button labels: “Button Left” “Button Middle” “Button Right” “Button Wheel Up” “Button Wheel Down” “Button Horiz Wheel Left” “Button Horiz Wheel Right” None None None None None

  • 运行 xinput set-button-map 11 1 0 ,把第二个值修改为 0 就关闭中键了。


最后,我的 Startup 启动命令是这样的(我修改了 xSwipe 的目录)

sh -c 'perl ~/.xSwipe-master/xSwipe.pl -n -d 0.6&xinput set-button-map 11 1 0'