Thinkpad(例如我正在使用的 X230)既有指点杆,也有触摸板。打字时触摸板被禁用。
但是,当我使用 Trackpoint 时,我也经常触摸触摸板,并产生我想避免的鼠标点击。有人知道如何在使用 Trackpoint 时禁用触摸板上的鼠标点击吗?
编辑:另外,有人能解释一下打字时禁用触摸板的选项是如何工作的吗?幕后做了什么?它是一个 xinput 配置命令吗?如果是,是哪一个?
编辑 2:澄清一下;手动禁用触摸板(即使使用快捷方式)不是这里的问题。这应该与“键入时禁用触摸板”选项一样有效,因为我交替使用触摸板和 Trackpoint(最常见的是,我使用触摸板进行滚动,使用 Trackpoint 移动光标)。
答案1
使用键盘时禁用触摸板
syndaemon
此功能由软件包中的实用程序执行xserver-xorg-input-synaptics
。您可以设置诸如空闲时间、轮询频率等选项(请参阅运行时帮助):
用法:syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k] -i 在最后一次按键后等待多少秒 启用触摸板。(默认为 2.0 秒) -m 等待下一次轮询需要多少毫秒。 (默认为 200 毫秒) ... -t 仅禁用点击和滚动,而不是鼠标移动。
这是源代码为了syndaemon.c
。
- 重要功能
keyboard_activity(...)
包括main_loop(...)
keyboard_activity
使用查询键映射API 调用以获取键盘的当前状态(每个键 1 位),然后将其与最后一个(旧)状态进行比较;如果它们不同,则返回 1main_loop
keyboard_activity
每毫秒轮询一次m
,并根据“上次活动时间”以及keyboard_activity
返回真或假来决定是否禁用或启用触摸板。- 这个
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)]
您可以通过以下方式获取此 ID:XListInputDevices功能
- 之后,您必须使用开放设备
- 然后,您可以使用查询设备状态函数获取 TrackPoint 指针的坐标;与现有循环类似,您可以不时轮询该循环并检查坐标是否已更改(即 TrackPoint 正在使用中),并使用它来打开或关闭触摸板
您可以使用
xinput
带有query-state
开关和设备 ID 的实用程序来检查您的编程是否正确,例如:$ xinput 查询状态 12 2个类别: 按钮类 按钮[1]=向上 按钮[2]=向上 按钮[3]=向上 按钮[4]=向上 按钮[5]=向上 按钮[6]=向上 按钮[7]=向上 ValuatorClass 模式=相对接近度=In 估价员[0]=854 估价员[1]=867
- 您感兴趣的是估价师值,即 TrackPoint 的 X 和 Y 坐标
- 请参阅
xinput
来源以获取更多提示 要修改并重建此包:
- 获取源代码
apt-get source...
- 进行修改
tools/syndaemon.c
syndaemon
通过注释掉118...
和124...
行来禁用现有补丁debian/patches/series
- 使用 构建您修改过的包
dpkg-buildpackage -us -uc
,deb 文件将位于父目录中。
- 获取源代码
答案2
首先要知道你的触摸板 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
答案3
这是一个低技术的解决方案,可能会对电力使用不利(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
它需要一点运气才能注意到您正在使用指点杆,因为它只能在每 5 秒的间隔内告知坐标。换句话说,它在禁用触摸板方面比较保守,但在指点杆空闲时不应该可靠地重新启用它。
无论如何,它对我的超极本有很大帮助,可以解决手掌按压时光标游离的问题。