当前位置: 首页 > Linux

kde5和archlinux环境下配置libinput-gestures多手势操作

时间:2023-04-06 01:25:28 Linux

我的本意是我的笔记本是archlinux+kdeplasma5环境。看到同事的macbookpro支持很多手势操作(gestures),也希望在archlinux和kde环境下使用。接下来配置方便的手势操作。查询资料发现touchegg和libinput-gestures都可以满足要求,但是在实际配置过程中,touchegg还有很多问题没有解决,而libinput-gestures基本没有大问题。所以本文主要介绍如何配置libinput-gestures。预备知识电脑窗口管理器kde是X.Org桌面环境,aur上维护了一个基于X.OrgServer的驱动xf86-input-libinput-git,非常方便。它们之间的关系如下:X11客户端对我来说是kdeplasma5。驱动程序libinput,linux生态系统提供了很多驱动程序,本文使用的驱动程序是libinput,负责分析内核从输入设备获取的数据,并发送到桌面环境,桌面环境提供反馈根据不同的数据。术语解释touchpad:通常意义上的触摸板。clickpad:指底部没有按键的触摸板,简称clickpad。clickpad通过不同手指数的点击行为来模拟鼠标的左、中、右点击。这些都可以配置或关闭。单击:单击,本文上下文中物理按钮的“按下”和“释放”。触控板软件按键行为:触控板上软按键的行为,详见触控板软件按键行为。libinputinstallationinstallbasiclibinputandxf86-input-libinputsudogpasswd-a$USERinputsudopacman-Slibinputxf86-input-libinputconfigurationlibinput有两种配置方式:使用配置文件的永久配置方式使用xinput用于运行时(runtime)的命令行工具,用于实时配置,主要用于调试。配置文件libinput安装后,默认的配置文件在/usr/share/X11/xorg.conf.d目录下。如果安装多个驱动,会有多个文件:?xorg.conf.dlltotal12K-rw-r--r--1rootroot1.4KAug1405:4010-quirks.conf-rw-r--r--1rootroot964May520:2440-libinput.conf-rw-r--r--1rootroot1.8KNov18201670-synaptics.conf笔者这里安装了3个驱动,所以有3个配置文件。默认情况下,kde会根据文件前缀号的大小来决定先使用哪个配置文件,该号的值越大,优先级越高。我们需要将默认的配置文件复制到/etc/X11/xorg.conf.d/目录下:sudocp/usr/share/X11/xorg.conf.d/40-libinput.conf/etc/X11/xorg。conf.d/40-libinput.conf以下是文件中触摸板部分的配置:Section"InputClass"Identifier"touchpad"MatchIsTouchpad"on"MatchDevicePath"/dev/input/event*"Driver"libinput"Option"Tapping""on"Option"ButtonMapping""1304567"Option"TappingButtonMap""lmr"Option"DisableWhileTyping""on"Option"TappingDrag""on"EndSection请参阅libinput手册页:基于X.Orginputfordetailedparametersandexplanationsdirver,解释以下重要配置参数:Option"Tapping""on":用手指点击触摸板发送鼠标点击事件Option"TappingButtonMap""lmr":用手指点击对应鼠标左键,两指点击对应鼠标中键,3次鼠标点击对应鼠标右键。Option"ButtonMapping""1304567",按键映射,详见libinput#Button_Mapping,这里作者关闭了3个手指对应的左键。Option"DisableWhileTyping""on":打字时不检测触摸板事件,防止用户误触触摸板造成不必要的影响。Option"TappingDrag""on":打开点击和拖动。调试确定触摸板设备?~xinputlist?Virtualcorepointerid=2[masterpointer(3)]??VirtualcoreXTESTpointerid=4[slavepointer(2)]??SynPS/2SynapticsTouchPadid=13[slavepointer(2)]??TPPS/2IBMTrackPointid=16[slavepointer(2)]......查看touchpad的详细配置?~xinputlist-props"SynPS/2SynapticsTouchPad"Device'SynPS/2SynapticsTouchPad':启用设备(142):1坐标转换矩阵(144):1.000000、0.000000、0.000000、0.000000、1.000000、0.000000、0.000000、0.000000、1.000000libinput25Tapping9已启用(已启用默认libinput25Tapping9)):0libinputTappingDragEnabled(297):1libinputTappingDragEnabledDefault(298):1libinputTappingDragLockEnabled(299):0libinputTappingDragLockEnabledDefault(300):0libinputTappingButton映射已启用(301):0、1libinput点击按钮映射默认值(302):1、0libinput加速速度(277):0.000000libinput加速速度默认值(278):0.000000libinput自然滚动已启用(282):0libinput自然滚动启用默认(283):0libinput发送事件可用模式(262):1、1libinput发送事件模式启用(263):0、0libinput发送事件模式启用默认(264):0、0libinput左手启用(284):0libinputLeftHandedEnabledDefault(285):0libinputScrollMethodsAvailable(286):1,1,0libinputScrollMethodEnabled(287):1,0,0libinputScrollMethodEnabled默认(288):1,0,0libinput单击方法可用(303):1,1libinput单击方法已启用(304):1,0libinput单击方法已启用默认值(305):1,0libinput中间仿真已启用(291):0libinput中间仿真已启用默认值(292):0libinput在键入时禁用已启用(306):1libinput在键入时禁用已启用默认值(307):1设备节点(265):“/dev/input/event10"DeviceProductID(266):2,7libinputDragLockButtons(293):libinputHorizo??ntalScrollEnabled(294):1这里有一个值非常重要DeviceNode(265):“/dev/input/event10”,后面使用libinput命令行的时候会用到这个路径使用libinputdebug-events监控触摸板事件?~libinputdebug-events--device/dev/input/event10-event10DEVICE_ADDEDSynPS/2SynapticsTouchPadseat0defaultgroup1cap:pgsize100x56mmtap(dloff)leftscroll-natscroll-2fg-edgelickbuttonareas-clickfingerdwt-on事件10gesture_swipe_begin+2.82s3Event10gesture_swipe_update+2.82s30.00/0.44/0.44(0.00/3.63UNACCELERERATED)EVENT10GESTURE_SWIPE_SWIPE_SWIPE_SWIPE_UPDATE+2.84S30.00/3.43(0.00/3.43)(uncelated)3(0.00/3.43)2.87s30.00/5.00(0.00/19.38未加速)事件10GESTURE_SWIPE_UPDATE+2.89S30.00/3.33(0.00/10.90UNACCELATED)事件10GESTURE_SWIPE_SWIPE_ESWIPE_UPDATE+2.92S30.00/2.74(0.00/8.48UNACCELETED)?~libinputdebug-gui--device/dev/input/event10info:event10SynPS/2SynapticsTouchPad添加了一个GUI屏幕来帮助检测。libinput-gestures配置好触摸板和手势后,使用libinput-gestures解析触摸板的数据,然后进行相关操作。这里主要使用xdotool,xdotool是一个模拟键盘/鼠标输入和窗口管理的命令行工具。libinput-gestures依赖于xdotool。libinput-gestures安装后,在/etc/libinput-gestures.conf中会有一个默认的配置,用户可以在~/libinput-gestures.conf$HOME/.config/libinput-gestures.conf中配置自己的配置。笔者根据自己的需要修改了相关配置,如下:#Switchtonextdesktopgestureswiperight4xdotoolkeyctrl+F1#Switchtoprevdesktopgestureswipeleft4xdotoolkeyctrl+F2#Presentwindows(currentdesktop)gestureswipedown3xdotoolkeyctrl+F9#Presentwindows(alldesktop)gestureswipedown4xdotoolkeyctrl+F10#Showdesktopgestureswipeup3xdotoolkeysuper+d#Showdesktopsbridgestureswipeup4xdotoolkeyctrl+F8主要思路是触发对于不同的手势相关的快捷键,快捷键的配置可以在系统偏好设置-->快捷键中设置。下图是plasma5切换桌面的快捷键配置:Demo四指横向滑动切换桌面:四指上下滑动显示所有桌面和所有活动窗口:TODOszoomin/outbypinch(pinchin/pinchout)在网页的$HOME/.config/libinput-gestures.conf中添加如下内容(macbook)(方向可自行定义):#backhistoryofchromium/chromegestureswiperight3xdotoolkeyalt+Leftgesture向左滑动3xdotoolkeyalt+Forward/backward(formacbook)在右侧页面,在$HOME/.config/libinput-gestures.conf添加以下内容#pinchgesturepinchin2xdotoolkeyctrl+minus#2fingerpinch:zoomoutgesturepinchout2xdotoolkeyctrl+plus#2指张:放大总结这篇文章从构思到配置大概用了一个月的时间,大部分时间花在了理解输入驱动,配置驱动,配置和调试toucgegg和libinput-gestures。笔者在配置好自己的archlinux手势后,一次偶然的机会使用了一周的macbookpro,体验了苹果的手势操作。总体感觉苹果的手势操作更流畅,识别更准确。毕竟苹果是自己的生态系统,可以针对自己的macOS系统进行打包调试。在Linux生态中,由于存在多个Linux发行版和桌面环境,手势操作很难兼容所有发行版,这需要用户有很强的动手能力和理解能力。可以说两者都可以实现丰富的手势操作,Linux的可扩展性更强,但需要更多的专业知识和动手能力。相关参考链接GitHub:libinput-gesturesarchwiki:libinputlibinput官方文档:相关页面libinputmanpagelibinputmanpage:基于X.OrginputdirverArchlinux:Optimizetouchpadconfiguration