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

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

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

运行X.org 7.7,触摸板底部有一个水平条纹,充当鼠标按钮1、2和3(即左、中、右);基本上它看起来像这样:

+-----------------+
|                 |
|                 |
|                 |
|                 |
|11111 22222 33333|
|11111 22222 33333|
+-----------------+

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

+-----------------+
|                 |
|                 |
|                 |
|                 |
|11111111 33333333|
|11111111 33333333|
+-----------------+

笔记这个问题不同于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)]

答案1

如果我输入:

$ xinput get-button-map 'DLL07BF:01 06CB:7A13 Touchpad'

我得到: 1 2 3 4 5 6 7

我尝试使用:

$ xinput set-button-map 13 1 2 0 4 5 6 7

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

答案2

一旦您弄清楚哪个数字对应于哪个按钮,您就可以用左键单击代替中键单击。

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

1 2 3 4 5 6 7
  ^

所以这用左键单击代替:

xinput set-button-map x 1 1 3 4 5 6 7

x从xinput中获取的id在哪里

答案3

您可以轻松地使用中间的“按钮”来停止注册,如下所示:

xinput set-button-map 11 1 2 0 4 5 6 7 8 9 10 11 12

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

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

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

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

答案4

1. 查找身份证

您的触摸板的xinput list

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C           id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]

显然,那个叫做“... TouchPad”的有id=11.

2.获取底部图

与身份证:

xinput get-button-map 11
1 2 3 4 5 6 7 

3.尝试设置新的按钮映射

现在你必须通过反复试验来弄清楚按钮图的含义。您通常可以假设 1 是左键单击操作。首先要尝试的是猜测第二个位置是底部中间的按钮。将其替换为左键单击操作 ( 1):

$ xinput set-button-map 11 1 1 3 4 5 6 7
                             ^

4. 检查它是否有效

谢谢亚当的回答(这启发了这一点)我只需要一次尝试就可以得到我想要的结果:

+-----------------+
|                 |
|                 |
|                 |
|                 |
|11111 11111 33333|
|11111 11111 33333|
+-----------------+

也就是说,底部条纹的左侧三分之二充当左按钮,而右侧三分之一充当右侧按钮。

5.如果不起作用怎么办?

尝试用与步骤 3 类似的按键替换按钮图的其他部分。1查看触摸板的反应。如果您无法获得所需的结果,请将按钮映射重置为您在步骤 1 中获得的值,以恢复原始行为。

笔记

我在 ThinkPad T570 上运行了这个,但它应该适用于大多数触摸板。

相关内容