使用libinput实现适当的触摸板拇指和手掌检测。

所以 libinput 接近其首个稳定版本,其中包含一 发布候选版

它增加了对触摸板上拇指/手掌检测的适当支持, 以及滑动和捏合手势支持,这是 Linux 上多点触控笔记本机器急需的功能。

有人可以提供一个如何在 Ubuntu 15.04 上安装它的好教程吗?

因为我相信,在 Ubuntu 安装中要看到它默认存在还需要一段时间。


对于这个问题没有太多关注。老实说,我不知道为什么。 - VRR
手掌检测依赖于内核触摸板驱动程序,并且也可以在xorg-synaptics中进行设置。你使用的是哪种触摸板? - Pilot6
@Pilot6,该软件包可以下载,但自述文件没有提供关于如何编译内核的具体说明。 - RCF
@RCF-U15.04 libinput是一个用户空间应用程序。它与内核无关,只是使用内核报告的事件。 - Pilot6
@tomodachi 如果你想在Ubuntu上很好地设置手掌检测,你可以提出另一个问题,我会帮助你。 - Pilot6
4个回答

对于Ubuntu 15.10+,您可以通过apt安装libinputwily, xenial, yakkety):

sudo apt install xserver-xorg-input-libinput

我仍然需要编辑配置文件来启用触摸功能,我猜当Unity吸收libinput后,它会通过控制面板设置来公开这个功能(我在这里使用vi,你可以使用gedit或者其他你喜欢的编辑器):
编辑以下文件(在16.04 2016-4-14和16.10 2016-10-14上测试通过):
sudo vi /usr/share/X11/xorg.conf.d/90-libinput.conf 

调整“触摸板”部分,添加Option "tapping" "True"Option "DisableWhileTyping" "True",如果您喜欢这种行为。
Section "InputClass"
    Identifier "libinput touchpad catchall"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Driver "libinput"
    Option "Tapping" "True"
    Option "DisableWhileTyping" "True"
EndSection

退出,登录..尽情享受!:)

libinput中没有“PalmDetection”选项,默认情况下启用了“DisableWhileTyping”,因此无需添加所有这些内容。 - Pilot6
调整并删除了两个选项。我将“轻拍”保留下来,因为默认情况下它是关闭的。 - JimB
而且我也不建议在所有设备上使用libinput。在我的情况下,键盘会出现延迟,所以我选择了触摸板事件,在我的情况下是event5,并将其写入了那个文件中。 - Pilot6
@Pilot6 - 你能详细介绍一下如何仅使用libinput来操作触摸板吗? - BeeOnRope
现在可以在所有设备上使用它了,这样“输入时禁用”功能就能正常工作。如果你愿意,可以在配置文件中将event*替换为具体的触摸板事件。 - Pilot6
4看起来你还可以添加 Option "AccelSpeed" "-0.5",其中值可以是从-1(更慢的光标)到+1(更快的光标)的浮点数。你还可以使用xinput尝试这个和其他值。首先通过运行xinput找到id,然后如果你的id是12,你可以用xinput list-props 12列出所有属性。如果你想要改变一个属性,获取该属性的整数(例如libinput Accel Speed (281): -0.500000),然后你可以用xinput set-prop 12 281 -0.4将加速度改为-0.4。 - David784
我在17.04上按照这些说明操作了。此外,我移除了xserver-xorg-input-synaptics以确保使用libinput。然而,我的Thinkpad X230触摸板完全不工作了。 - orschiro
我按照这些指示操作,现在登录时出现错误信息。"加载/home/prem/.xprofile时发现错误:/home/prem/.xprofile: 第1行:synclient: 命令未找到..........."。此外,我的touchegg手势不再起作用。我该如何撤销所采取的步骤,将系统恢复到原来的状态? - Ghos3t
这些指示不使用synclient,你一定是把它放在其他在启动时运行的“点”文件中了。你能在你的主目录下的“点”文件中搜索synclient吗?你可以卸载libinput并回到synaptic驱动程序...只要确保删除指示让你创建的启动脚本即可。 - JimB

这是如何在Ubuntu上安装libinput的方法。
  1. 安装一些必要的软件包

    sudo apt-get install git build-essential autoconf automake pkg-config libtool
    sudo apt-get install libmtdev1 libmtdev-dev libudev-dev libevdev-dev xutils-dev libwacom-dev
    
  2. 安装 xserver-xorg-dev。对于14.04.3版本,可能是 xserver-xorg-dev-lts-vivid。请小心。您需要检查已安装的 xserver-xorg 软件包。

    sudo apt-get install xserver-xorg-dev
    
  3. 克隆 libinputxf86-input-libinput

    git clone git://anongit.freedesktop.org/git/wayland/libinput
    git clone git://anongit.freedesktop.org/xorg/driver/xf86-input-libinput
    
  4. 构建并安装。

    cd libinput
    ./autogen.sh --prefix=/usr
    make && sudo make install
    
    cd ../xf86-input-libinput
    ./autogen.sh --prefix=/usr
    make && sudo make install
    
  5. 在触摸板部分的文件 conf/90-libinput.conf 中,在 EndSection 之前添加字符串 Option "Tapping" "True"

  6. 复制配置文件以启用 libinput

    sudo cp conf/90-libinput.conf /usr/share/X11/xorg.conf.d/
    
注销并重新登录。
运行xinput list-props <your_touchpad_id>,您将看到使用了libinput
如果您不喜欢使用libinput,您可以随时禁用它。
sudo rm /usr/share/X11/xorg.conf.d/90-libinput.conf

我刚刚安装了它,现在正在弄清楚如何设置手掌检测。看起来默认已启用,但我还不太明白它如何使用内核报告的宽度和压力。
目前似乎在Ubuntu中使用libinput没有太大的优势。
xf86-input-libinput只是将其包装到Xorg中,没有其他功能。所以额外的手势不受支持。至少我不知道是否支持。Wayland或Mir可能更强大,我猜。
经过一些测试,我发现了一个优点。xorg-synaptics存在一个问题,当你把手指放在按钮区域时,无法用另一个手指移动光标。这对于喜欢使用硬件按钮点击的人来说很不方便。这个问题已经多次报告为bug。
在libinput中完全没有这个问题。
测试很有趣。谢谢你的问题。

@Pilot6 "额外手势不受支持"有什么意义呢?(https://archive.fosdem.org/2015/schedule/event/libinput/attachments/slides/591/export/events/attachments/libinput/slides/591/libinput_xorg.pdf) - VRR
@VRR 问题在于默认的Ubuntu桌面环境不支持许多手势。仅仅拥有“libinput”是不会改变这个情况的。1、2、3个手指的点击可以直接使用。掌部检测可能更加智能,但似乎不支持仅报告宽度的触摸板。新型号不支持压感,因为它们作为触摸屏工作,等等。 - Pilot6
我觉得我在过程中搞砸了一点..现在启动后出现黑屏..但没有lightdm登录界面..可能是由于xorg..我知道旧版本号..有人能告诉我现在该怎么做吗..我可以进入tty。 - hunch
如果你遇到问题,只需删除/usr/share/X11/xorg.conf.d/99-libinput.conf。使用sudo rm /usr/share/X11/xorg.conf.d/99-libinput.conf命令即可。 - Pilot6
那并没有解决问题。你能提一下关于xserver-xorg-dev的事情吗?你也提到了要小心。如何恢复到旧版本? - hunch
请另外提一个问题。描述你做了什么,Ubuntu 的版本是什么等等。这个无法在评论中解决。 - Pilot6
感谢您提供的出色答案@Pilot6。我已经成功完成了所有步骤,但是当我运行xinput list-props 15时,并没有提到libinput。我有什么遗漏吗?还有其他方法可以检查是否使用了libinput吗? - hg8
@hg8 我建议你提出另一个问题,并在那里发布 xinputxinput list-props 14 的输出结果。 - Pilot6
当我运行sudo apt-get install xserver-xorg-dev时,出现了一个依赖错误信息。 - Gocht
你可能有一个Ubuntu的LTS版本。你需要安装-lts-vivid或其他什么东西。@Gocht - Pilot6
当我运行sudo apt-get install xserver-xorg-dev-lts-vivid时,我不明白为什么会出现依赖错误libcheese-gtk23 (>= 3.4.0)libcheese7 (>= 3.0.1)。但是当我运行sudo dpkg -s libcheese-gtk23时,我得到的版本是Version: 3.10.2-0ubuntu2,另一个软件包也是相同情况。@Pilot6 - Gocht
你最好问另一个问题。这个问题不能在评论中解决。可能你没有安装xserver-xorg-lts-vivid,而是其他版本。 - Pilot6
嗯,我现在有点迷茫。我会尝试其他方法。@Pilot6 - Gocht
这个在Ubuntu Studio或者Xubuntu 15.10上的xfce4也能用吗? - rubo77
是的,为什么不呢。关于15.10,请参考另一个问题。那个更容易。 - Pilot6
@tomodachi 请不要进行错误的编辑。你的命令是错误的。你漏掉了t等等。无论如何,任何人都可以选择使用哪些选项。 - Pilot6
@Pilot6 坏消息:您在此答案中的指示已被重新发布,但没有署名或链接回到这个答案(除非您是Barton的“技术团队”成员)。请参见这里:http://bartongeorge.net/2015/09/30/alternate-touchpad-configuration-for-xps-9343-developer-edition-running-ubuntu-15-04/。好消息是:您在这里的指示产生了广泛的影响,XPS 13 用户表示感谢。 - Xu Wang
@XuWang 我真的不太在意转发或署名。 - Pilot6
只是一封备注,博客的作者已经友好地更新了链接以回指到这个答案。 - Xu Wang
我正在尝试按照你在回答中提到的建议去做。但是当我运行 ./autogen.sh --prefix=/usr 这部分时遇到了问题。它告诉我 bash: ./autogen.sh: 没有那个文件或目录 而且确实,ls 命令也没有显示出 autogen.sh 文件的存在(我不确定这是否相关,因为我对 Linux 完全是新手)。无论如何,在此之前我已经按照你概述的步骤进行了操作,你有什么想法可能出了什么问题以及如何修复?谢谢:) - Olivier Bégassat


我在Lubuntu 17上遇到了类似的问题。我尝试安装libinput并编辑.conf文件,但都没有成功。
然后我看到@Pilot6在上面提到使用xinput来验证libinput是否激活(也很好知道验证的标准是什么,但我岔开了话题)。
我用xinput list-props 14(在你的情况下可能是不同的数字)检查了我的xinput。
结果给出了一个synaptics触摸板。
在列表中,有一个与之相关联的带有数字的手掌检测选项(316)。
所以我使用xinput set-prop 14 316 1来激活手掌检测。最终问题得到解决。