利用libinput-gestures让触控板手势更丰富
关于libinput-gestures
libinput-gestures
是为linux
下触控板提供自定义手势配置的程序。
libinput
已经对触控板的基本使用手势有了支持,有部分DE和WM已经支持定义一些手势(比如Gnome
、KDE
),但是并不一定能够覆盖所有,并且一般都是已经预设好的,不支持自定义。
所以可以通过使用libinput-gestures
程序来扩展触控板的使用。
安装
Arch Linux
可以通过AUR仓库安装:
|
|
libinput-gestures
还可以搭配wmctrl
和xdotool
两个工具来扩展手势定义的动作:
|
|
启动
libinput-gestures
的启动方式有两种,systemd service
方式和desktop application
方式,通过libinput-gestures-setup
命令来指定启动方式或者是否自启动。
我们使用systemd
方式作为user服务来启动:libinput-gestures-setup service
这里可能会出现“Systemd not available, can not run as service.”的错误提示,这是因为libinput-gestures.service
中的[Install]
是graphical-session.target
,而我们在user环境下使用的是default.target
,libinput-gestures-setup
脚本无法检测到对应的target
,所以设置失败。
我的解决方法是:
-
将
libinput-gestures.service
中的所有graphical-session.target
修改为default.target
1 2 3 4 5 6 7 8 9 10 11 12 13
# /home/dylan/.config/systemd/user/libinput-gestures.service [Unit] Description=Actions gestures on your touchpad using libinput Documentation=https://github.com/bulletmark/libinput-gestures PartOf=default.target # <-- 修改 After=default.target # <-- 修改 [Service] Type=simple ExecStart=/usr/bin/libinput-gestures [Install] WantedBy=default.target # <-- 修改
-
libinput-gestures-setup
脚本中关于HAS_SYSD
的检测也改为default.target
1 2 3 4 5 6 7 8 9 10
# /usr/bin/libinput-gestures-setup ... # Test if systemd is installed if type systemctl &>/dev/null; then #HAS_SYSD=$(sysd_prop graphical-session.target ActiveState active) # <-- 注释,改为下面这行 HAS_SYSD=$(sysd_prop default.target ActiveState active) else HAS_SYSD=0 fi ...
这不是最好的办法,可能在
libinput-gestures
更新后被覆盖
设置为service
方式之后,设置为自动启动:libinput-gestures-setup autostart
立即开启libinput-gestures-setup start
配置
软件默认的配置文件为/etc/libinput-gestures.conf
,可以通过~/.config/libinput-gestures.conf
来创建用户配置。
因为我使用XFCE
,在窗口管理器中配置好快捷键,之后可以通过xdotool
映射到gestures。
下面以我的配置文件为例:
|
|
关于device选项这里做个记录:
先前我没有仔细查看libinput-gestures.conf对于设备选择的说明,只对手势定义做了配置;
实际使用时笔记本和外接触控板同时只能有一个对手势生效,如果我的外接触控板断开,内置的触控板不会接替生效,必须重启服务;
于是我准备在udev rule中对触控板的连接与断开事件指定一个重启服务的操作;
但无奈如果使用desktop方式启动libinput-gestures,udev rule在执行RUN脚本时会出现很多问题(比如X环境变量、执行用户等),并且也无法直接利用restart命令;
最后我换成service启动,并且在rule中配置了对服务的依赖,才勉强实现了切换;
实际上libinput-gestures可以指定某个device,甚至是监听所有的devices;
没有仔细查看文档导致绕了这么一个大弯路,谨此作为教训。
调试
使用libinput-gestures -d
对已定义好的手势进行调试。
注意要将已经运行的libinput-gestures
程序关闭。