这篇文章上次修改于 718 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 输入子系统由输入子驱动层(input driver),系统核心层(input core)和事件处理层(Event Handler)三部分组成。一个输入事件,比如滑动触摸屏都是通过input driver -> input core -> event handler -> user space 到达用户空间传给应用程序。 X server默认使用 libinput 驱动(xf86-input-libinput) 处理输入设备,xf86-input-evdev 和相关驱动是后备方案。配置文件是 /usr/share/X11/xorg.conf.d/ 中的`10-evdev.conf`和 `40-libinput.conf` Udev由 systemd 通过 xorg-server提供,会自动检测硬件,使用 evdev 或 libinput 处理设备的输入. ``` Input Devices /dev/input ``` Input Drivers ``` xserver-xorg-input-all 驱动包 xserver-xorg-input-evdev 键盘,触摸屏 xserver-xorg-input-vmmouse 鼠标 xserver-xorg-input-wacom 数位板/触摸板 ``` 其他 ``` xserver-xorg-input-libinput 键盘 xserver-xorg-input-synaptics 触摸板 (即将弃用) xserver-xorg-input-joystick 遥杆 xserver-xorg-input-mtrack 触摸板 (推荐使用) xserver-xorg-input-mutrack 触摸板 (年久失修) xserver-xorg-input-void 空输入设备 xserver-xorg-input-xwiimote Wii设备 xserver-xorg-input-acecad 绘图板 Input Conf /etc/X11/xorg.conf /usr/share/X11/xorg.conf.d/ /usr/share/X11/xkb Input Log /var/log/Xorg.0.log ``` linux下的触摸手势方案挺多,早先的touchegg,后来的libinput-gestures, 以及最近[gebaar-libinput](https://github.com/Coffee2CodeNL/gebaar-libinput "gebaar-libinput")。当然紧跟libinput上有的xf86-input-mtrack配置更简单。 debian系列用户直接安装对应的驱动包即可,当然也可以手动编译安装最新的版本,地址在文末 ``` apt-get install xserver-xorg-input-mtrack ``` `xinput list`查看自己的触控板标识以及支持情况,比如我的 ``` renothing@desktop:~[master]$ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ ETPS/2 Elantech Touchpad id=12 [slave pointer (2)] ⎜ ↳ Logitech USB Optical Mouse id=9 [slave pointer (2)] ``` `xinput list 12` ``` Reporting 7 classes: Class originated from: 12. Type: XIButtonClass Buttons supported: 7 Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" Button state: Class originated from: 12. Type: XIValuatorClass Detail for Valuator 0: Label: Rel X Range: -1.000000 - -1.000000 Resolution: 0 units/m Mode: relative Class originated from: 12. Type: XIValuatorClass ... ``` 懒得做说明,直接贴配置文件`/etc/X11/xorg.conf.d/10-mtrack.conf`: ``` Section "InputClass" Identifier "ETPS/2 Elantech Touchpad" MatchIsTouchpad "true" Driver "mtrack" MatchDevicePath "/dev/input/event*" Option "Sensitivity" "1.1" Option "FingerHigh" "5" Option "FingerLow" "5" Option "IgnoreThumb" "true" Option "ThumbRatio" "70" Option "ThumbSize" "25" Option "IgnorePalm" "true" # This ignores tap-to-click, which causes more problems than benefit in my experience Option "TapButton1" "0" Option "TapButton2" "0" Option "TapButton3" "0" # If you want a middle-click, then "ClickFinger2" should be value "2" Option "ClickFinger1" "1" Option "ClickFinger2" "1" Option "ClickFinger3" "3" Option "ButtonMoveEmulate" "true" Option "ButtonIntegrated" "true" Option "ButtonEnable" "true" # "ButtonZonesEnable" means that your trackpad gets divided into three equal sections, where clicking any third of the touchpad sends the click code in "ClickFingerX". Since I didn't want middle-click, the left two thirds of my touchpad are left click, and the right third is right click: Option "ButtonZonesEnable" "false" Option "ClickTime" "25" # Ensures that bottom 5% of touchpad doesn't register taps Option "EdgeBottomSize" "5" Option "SwipeLeftButton" "8" Option "SwipeRightButton" "9" Option "SwipeUpButton" "0" Option "SwipeDownButton" "0" Option "SwipeDistance" "700" # ScrollCoast makes touchpad feel a bit more Mac-like, although it coasts in chunks and isn't relative to speed at which two finger scroll was happening Option "ScrollCoastDuration" "600" Option "ScrollCoastEnableSpeed" "0.05" # This sets up Macbook-like natural scroll. If you want to scroll down by swiping your fingers down, reverse the "5" and the "4" here: Option "ScrollUpButton" "5" Option "ScrollDownButton" "4" Option "ScrollLeftButton" "7" Option "ScrollRightButton" "6" # Without this option set to a high value, there are types of click+hold-and-move functionality (most easily reproed by click and then move up-right) that get ignored Option "Hold1Move1StationaryMaxMove" "1000" # Smaller ScrollDistance translates to faster scrolling. ScrollDistance of 10 scrolls a long page in one swipe. Option "ScrollDistance" "22" Option "ScrollClickTime" "12" Option "ScrollSensitivity" "0" EndSection ``` 具体配置选项请参考官网手册:https://github.com/p2rkw/xf86-input-mtrack * update in 2021.9 https://github.com/iberianpig/fusuma * update in 2023.1 https://github.com/ferstar/gestures (更好的选择) 参考: - https://bill.harding.blog/2017/12/27/toward-a-linux-touchpad-as-smooth-as-macbook-pro/
没有评论