禁用点击板/触摸板底部的中间点击

Cac*_*tus 13 thinkpad x11 touchpad mouse xinput

Thinkpad T480s 有一个“触控板”:一个触控板,其中(部分)触控板本身是可按下的,而不是具有物理专用按钮。

运行X.org 7.7,触摸板底部有一条横条纹,作为鼠标按键1、2、3(即左、中、右);基本上它看起来像这样:

+-----------------+
|                 |
|                 |
|                 |
|                 |
|11111 22222 33333|
|11111 22222 33333|
+-----------------+
Run Code Online (Sandbox Code Playgroud)

如何禁用按钮 2 并将该区域重新分配到按钮 1 和 3 之间?即我想要以下布局:

+-----------------+
|                 |
|                 |
|                 |
|                 |
|11111111 33333333|
|11111111 33333333|
+-----------------+
Run Code Online (Sandbox Code Playgroud)

注意这个问题与mtrack不同:如何获得垂直按钮区域?因为我试图在 XInput 的上下文中执行此操作,而不是 mtrack。此外,硬件不是 Synaptics。

有问题的硬件由 XInput 标识为

? Virtual core pointer                      id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? ETPS/2 Elantech Touchpad                  id=11   [slave  pointer  (2)]
?   ? ETPS/2 Elantech TrackPoint                id=12   [slave  pointer  (2)]
Run Code Online (Sandbox Code Playgroud)

小智 9

如果我输入:

$ xinput get-button-map 'DLL07BF:01 06CB:7A13 Touchpad'
Run Code Online (Sandbox Code Playgroud)

我得到:1 2 3 4 5 6 7

我尝试使用:

$ xinput set-button-map 13 1 2 0 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

它禁用了中键和右键单击。

  • 如果您不知道您的触摸板名称,请键入“xinput list”以获取设备列表 (2认同)

Aus*_*arn 7

你可以很容易地让中间的“按钮”停止使用这样的命令注册:

xinput set-button-map 11 1 2 0 4 5 6 7 8 9 10 11 12
Run Code Online (Sandbox Code Playgroud)

此处的第一个参数指定设备 ID(在本例中为 11,基于您上面从 发布的输出xinput),而其余参数将按钮映射到功能。前两个是左右按钮(1 和 2 是常规单击和上下文菜单),第三个是中间按钮(通常设置为3,但0告诉 xinput 将其映射为空),而休息涵盖其他事情(滚动等)。

调整其他两个按钮以覆盖整个打击垫底部有点棘手,实际上可能是不可能的。像这样的触控板的工作原理是在触控板下方有一个触发点击的开关,然后观察手指在触控板上的位置以确定将其注册为哪个按钮。可以通过三种不同的方式来处理:

  1. 在打击垫本身的固件中,没有配置选项。
  2. 在打击垫本身的固件中,带有配置选项。
  3. 在驱动程序的用户空间部分。

第二种方法仅适用于设备未通过旧的 PS/2 样式串行连接进行连接的情况(您的可能是这样连接的,大多数 Thinkpad 都是这样)。Synaptics 使用方法 3 执行此操作,并为几乎所有内容提供大量配置选项。我不确定 Elantech 是如何处理它的,但我猜这可能是第一种情况,除非它是 USB 或 I2C 连接设备,在这种情况下,从技术上讲它是第三种情况,尽管我很确定他们没有用于 X 的特殊输入驱动程序.

  • 在我的 ThinkPad A485 上,运行 `xinput get-button-map` 按升序给出 1 到 7。当我将第三个数字更改为 0 时,我的右键单击被禁用,而不是中间单击。在我的情况下,第二个数字是中间点击。但是,我没有将它设置为 0,而是设置为 1,所以现在我没有死空间,而是一个扩展的左键单击 ;-) (4认同)

小智 7

看起来按钮的顺序是左中右。这对我有用。

xinput set-button-map 11 1 0 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)


Ada*_*ith 5

确定哪个数字对应哪个按钮后,您可以用右键单击替换中键单击。

就我而言,第二个数字映射到中键:

1 2 3 4 5 6 7
  ^
Run Code Online (Sandbox Code Playgroud)

所以这用左键单击替换它:

xinput set-button-map x 1 1 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

x从xinput得到的id在哪里