如何在Thinkpad上使用trackpoint时禁用触摸板?
Thinkpad(例如我正在使用的X230)同时具有跟踪点和触摸板。 键入时触摸板被禁用。
但是,当我使用跟踪点时,我经常触摸触摸板,并生成我想要避免的鼠标点击。 有没有人知道在使用trackpoint时如何禁用触控板上的鼠标点击?
编辑:此外,有人可以解释在打字工作时禁用触摸板的选项如何? 幕后做了什么? 它是一个xinput配置命令,如果是,是哪一个?
EDIT2:澄清; 手动禁用触摸板(即使使用快捷方式)也不是问题。 这应该像“键入时禁用触摸板”选项一样工作,因为我可以互换使用触摸板和Trackpoint(最常见的是,我使用触摸板进行滚动,使用Trackpoint来移动光标)。
在使用键盘时禁用触摸板
此function由syndaemon
实用程序从xserver-xorg-input-synaptics
包执行。 您可以设置诸如空闲时间,轮询频率等选项(请参阅运行时帮助 ):
用法:syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k] -i在最后一次按键之后等待多长时间 启用触控板。 (默认为2.0秒) -m等到下一次轮询要等多少毫秒。 (默认为200毫秒) ... -t仅禁用点击和滚动,而不禁用鼠标移动。
这是 syndaemon.c
的源代码 。
- 重要的function是
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(ID)
- 之后,您必须使用XOpenDevice从ID获取设备句柄
- 然后,使用XQueryDeviceState函数获取TrackPoint指针的坐标; 类似于现有循环,您经常轮询这个并检查坐标是否已更改(即TrackPoint正在使用中),并使用它来打开或关闭触摸板
-
您可以将
xinput
实用程序与query-state
开关和设备ID一起使用,以检查您的编程是否正确,例如:$ xinput query-state 12 2class: ButtonClass 按钮[1] = UP 按钮[2] = UP 按钮[3] = UP 按钮[4] = UP 按钮[5] = UP 按钮[6] = UP 按钮[7] = UP ValuatorClass Mode = Relative Proximity = In 赋值设备[0] = 854 赋值设备[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 =
在打开键盘快捷键之后,使用键盘快捷键将此命令添加到下面两个命令。
# Disable Touchpad: xinput set-prop 'Device Enabled' 0 # Enable Touchpad: xinput set-prop 'Device Enabled' 1
这是一种低技术解决方案,可能对电源使用不利(syndaemon -T补丁对我不起作用)。
#!/bin/sh TRACKPOINT_DEV="TPPS/2 IBM TrackPoint" SLEEP_TIME=5 OLD_XY=0,0, while true; do NEW_XY=`xinput query-state "$TRACKPOINT_DEV" |grep valu|awk 'BEGIN { FS = "=" } ; {print $2 ","}'|xargs` if [ ! "$OLD_XY" = "$NEW_XY" ]; then synclient TouchpadOff=1 else synclient TouchpadOff=0 fi sleep $SLEEP_TIME OLD_XY="$NEW_XY" done
它必须有点幸运地注意到你正在使用跟踪点,因为它只能告诉每个5s间隔期间的坐标。 换句话说,禁用触摸板是保守的,但是当轨迹点空闲时不应该可靠地重新启用它。
无论如何,它对我的超极本有很大的帮助,手掌上有光标。