触控板移动范围小于屏幕分辨率,以及意外的触摸活动(Arch w/ Libinput)

触控板移动范围小于屏幕分辨率,以及意外的触摸活动(Arch w/ Libinput)

意外的触摸活动是:

交互时,指针会移动到屏幕上的等效位置,就像触摸屏一样。由于触摸板和屏幕之间的范围校准不正确,这种情况更加严重,因此触摸触控板的右上角只能到达顶部的 90%,到达右侧的 98%。

例如:如果我的鼠标指针位于屏幕左下方,而我将其移向右上方,则无法访问 Firefox 窗口中的选项卡,因此我将手指放在触控板的中间,希望某些内部机制能够存储指针位置并从指针上次所在的位置恢复移动,但它并没有这样做。指针会根据屏幕上的等效位置重置。

我已经浏览过这里的手册页:
Libinput 手册页
Xorg 手册页

Arch 网站上的文档非常简洁,而我浏览过的其他网站,包括 FAQ 官方 libinput 网站,都没有提到发生过这个问题。

需要帮忙?谢谢

我希望有针对这两件事的设置。尽管如此,这里是 xinput 和 xinput-list-props:

â¡ Virtual core pointer                     id=2    [master pointer  (3)]
â   â³ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
â   â³ AlpsPS/2 ALPS DualPoint TouchPad         id=10   [slave  pointer  (2)]
â   â³ AlpsPS/2 ALPS DualPoint Stick            id=11   [slave  pointer  (2)]
⣠Virtual core keyboard                    id=3    [master keyboard (2)]
    â³ Virtual core XTEST keyboard              id=5    [slave  keyboard (3)]
    â³ Video Bus                                id=6    [slave  keyboard (3)]
    â³ Power Button                             id=7    [slave  keyboard (3)]
    â³ Sleep Button                             id=8    [slave  keyboard (3)]
    â³ AT Translated Set 2 keyboard             id=9    [slave  keyboard (3)]
    â³ Dell WMI hotkeys                         id=12   [slave  keyboard (3)]


x-input -list-props 10
(我的触摸板)

Device 'AlpsPS/2 ALPS DualPoint TouchPad':
    Device Enabled (152):   1
    Coordinate Transformation Matrix (154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (280): 0
    Device Accel Constant Deceleration (281):   1.000000
    Device Accel Adaptive Deceleration (282):   1.000000
    Device Accel Velocity Scaling (283):    10.000000
    Device Product ID (273):    2, 8
    Device Node (274):  "/dev/input/event7"
    Evdev Axis Inversion (284): 0, 0
    Evdev Axis Calibration (285):   <no items>
    Evdev Axes Swap (286):  0
    Axis Labels (287):  "Abs X" (277), "Abs Y" (278), "Abs Pressure" (279)
    Button Labels (288):    "Button Left" (155), "Button Middle" (156), "Button Right" (157), "Button Wheel Up" (158), "Button Wheel Down" (159)
    Evdev Scrolling Distance (289): 0, 0, 0
    Evdev Middle Button Emulation (290):    0
    Evdev Middle Button Timeout (291):  50
    Evdev Third Button Emulation (292): 0
    Evdev Third Button Emulation Timeout (293): 1000
    Evdev Third Button Emulation Button (294):  3
    Evdev Third Button Emulation Threshold (295):   20
    Evdev Wheel Emulation (296):    0
    Evdev Wheel Emulation Axes (297):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (298):    10
    Evdev Wheel Emulation Timeout (299):    200
    Evdev Wheel Emulation Button (300): 4
    Evdev Drag Lock Buttons (301):  0

答案1

这通常意味着 libinput 是不是,实际上已正确安装。仅拥有libinput库还不足以让 Xorg 使用它 - 它需要“输入驱动程序”xf86-input-libinput才能使用它。

有几种 Xorg 输入驱动程序 - 除了基于 libinput 的驱动程序(它是非常新款,计划占领世界)它还拥有简约的xf86-input-evdev驱动程序,以及之前流行的xf86-input-synaptics适用于各种触摸板的驱动程序。

触摸板发送绝对 X、Y 坐标,以便点击板或多点触摸手势可以由程序解释——由 libinput 或 synaptics 将它们转换为相对运动事件。但您显示的输出xinput list-props表明触摸板仅连接了 xf86-input-evdev 驱动程序。

在 libinput 出现之前,过去几年里“evdev”驱动程序一直是默认选择,因为它可以处理鼠标、键盘以及内核向其抛出的所有东西(尽管您已经注意到,它不一定能很好地处理)。同时,“libinput”和“synaptics”驱动程序也使用内核的 evdev 子系统,但具有额外的逻辑来解释接收到的事件。

(从历史上看,甚至在 evdev 之前,几乎所有东西都有单独的接口 - 键盘、PS/2 鼠标、串行鼠标、操纵杆等 - 并且还有单独的 X 驱动程序,例如“xf86-input-kbd”或“-mouse”或“-joy”;更不用说 pre-KMS视频驱动程序,长期以来,它们必须直接处理 PCI 或视频 BIOS 之类的东西。X 服务器实际上是一个操作系统!)


Archxorg-server软件包的构建依赖于一些输入驱动程序,但没有指定哪一个(例如,许多人仍然使用 evdev+synaptics,而不是 libinput)。通常在安装 Xorg 时,pacman 会询问要安装多个“提供程序”包中的哪一个:

:: 有 2 个可用于 xf86-input-driver 的提供程序:
:: 额外储存库
   1) xf86-input-evdev 2) xf86-input-libinput

输入一个数字(默认值=1):

如果您只是点击Return并接受默认值,pacman 将按字母顺序选择第一个项目,您将获得最小的基于 evdev 的驱动程序,它实际上不会对输入事件进行任何解释 - 如果内核向它发送绝对坐标,那么这就是 Xorg 将会看到的。


哦,根据xinput输出结果Unicode 设置都坏了。

答案2

解决了。​​谢谢@grawity。很快pacman -Ss xf86-input-libinput发现xf86-input-libinput确实没有安装。我安装了软件包并重新启动。重新启动后,触摸板可以正常工作。对于可以回答我在原始帖子评论中提出的后续问题的人来说,这是正确的答案。

相关内容