问题描述
Thinkpad(例如我正在使用的 X230)同时具有轨迹点和触摸板。打字时触摸板被禁用。
然而,当我使用轨迹点时,我也经常触摸触摸板,并产生我想避免的鼠标点击。有谁知道在使用轨迹点时如何在触摸板上禁用 mouse-clicks?
编辑:另外,有人可以解释一下打字时禁用触摸板的选项是如何工作的吗?幕后正在做什么?它是一个 xinput 配置命令,如果是,是哪个?
EDIT2:澄清;手动禁用触摸板(即使使用快捷方式)也不是这里的问题。这应该像选项“打字时禁用触摸板”一样工作,因为我交替使用触摸板和轨迹点(最常见的是,我使用触摸板进行滚动,使用轨迹点移动光标)。
最佳思路
使用键盘时禁用触摸板
此功能由 xserver-xorg-input-synaptics
包中的 syndaemon
实用程序执行。您可以设置空闲时间、轮询频率等选项(请参阅 runtime help ):
Usage: syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k]
-i How many seconds to wait after the last key press before
enabling the touchpad. (default is 2.0s)
-m How many milli-seconds to wait until next poll.
(default is 200ms)
...
-t Only disable tapping and scrolling, not mouse movements.
Here’s the source code 代表 syndaemon.c
。
-
重要的函数是
keyboard_activity(...)
和main_loop(...)
-
keyboard_activity
使用 XQueryKeyMap API 调用获取键盘的当前状态(每个键 1 位),然后与上一个(旧)状态进行比较;如果它们不同,则返回 1 -
main_loop
每m
毫秒轮询一次keyboard_activity
,并根据“上次活动时间”以及keyboard_activity
返回 true 或 false 来决定是否禁用或启用触摸板。 -
dp_get_device
函数说明了如何枚举 X 输入设备;您应该能够修改它和keyboard_activity
函数以检查任何跟踪点活动。
-
xinput
工具列出设备和 ID,例如“虚拟核心指针 id=2 [主指针 (3)] ⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从指针 (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [从指针(2)] ⎜ ↳ TPPS/2 IBM TrackPoint id=12 [从指针(2)] -
您可以通过 XListInputDevices 函数获取此(ID)
-
之后,您必须使用 XOpenDevice 从 ID 中获取设备句柄
-
然后,您使用 XQueryDeviceState 函数获取 TrackPoint 指针的坐标;类似于现有的循环,您经常轮询它并检查坐标是否已更改(即正在使用 TrackPoint),并使用它来打开或关闭触摸板
-
您可以使用带有
query-state
开关和设备 ID 的xinput
实用程序来检查您的编程是否正确,例如: $ xinput query-state 12 2 classes : ButtonClass button[1]=up button[2]=up button[3]=up button[4]=up button[5]=up button[6]=up button[7]=up ValuatorClass Mode=Relative Proximity=In valuator[0]=854 valuator[1]=867 -
您对评估器值感兴趣,即 TrackPoint 的 X 和 Y 坐标
-
有关更多提示,请参阅
xinput
源代码 -
要修改和重建这个包:
-
使用
apt-get source...
获取源代码 -
对
tools/syndaemon.c
进行修改 -
通过注释掉
debian/patches/series
中的118...
和124...
行来禁用现有的syndaemon
补丁 -
使用
dpkg-buildpackage -us -uc
构建修改后的包,deb 文件将位于父目录中。
-
次佳思路
要做的第一件事是知道您的触摸板 ID。因此,请按照以下步骤操作
首先打开终端并运行此命令
~$ xinput --list
在这里我们得到这个 Touchpad id = <id Number>
之后打开键盘快捷键,然后使用键盘快捷键在两个命令下方添加此命令。
# Disable Touchpad:
xinput set-prop <id number> 'Device Enabled' 0
# Enable Touchpad:
xinput set-prop <id number> 'Device Enabled' 1