在Thinkpad上使用Trackpoint时如何禁用触摸板?


21

Thinkpad(例如,我正在使用的X230)同时具有跟踪点和触摸板。键入时禁用触摸板。

但是,当我使用跟踪点时,我也会经常触摸触摸板,并产生我希望避免的鼠标单击。有谁知道在使用轨迹点时如何禁用触摸板上的鼠标单击?

编辑:另外,有人可以解释键入时禁用触摸板的选项如何工作吗?幕后正在做什么?它是xinput配置命令吗?如果是,请选择哪个命令?

EDIT2:澄清;手动禁用触摸板(即使带有快捷键)在这里也不是问题。这应该与“键入时禁用触摸板”选项一样工作,因为我可以交替使用触摸板和Trackpoint(大多数情况下,我使用触摸板进行滚动滚动,使用Trackpoint进行光标移动)。


这将很有趣。键盘的布局方式会导致杂散手势干扰正常操作。我认为当前的选择不可能做到这一点,但将来可能吗?我发现我必须用两只手键入并指向,将我的(右)手拱起,以免刷过/碰到触控板。
fleamour

目前,我已禁用触摸板的鼠标单击功能-我发现在大多数情况下,无论如何我都会使用触摸板顶部的按钮。
1

Answers:


10

使用键盘时禁用触摸板

该功能由syndaemon实用程序从xserver-xorg-input-synaptics程序包中执行。您可以设置诸如空闲时间,轮询频率等选项(请参见运行时帮助):

用法:syndaemon [-i空闲时间] [-m轮询延迟] [-d] [-t] [-k]
  -i最后一次按键后要等待多少秒
     启用触摸板。(默认为2.0秒)
  -m等待下一次民意测验需要多少毫秒。
     (默认为200ms)
  ...
  -t仅禁用点击和滚动,而不禁用鼠标移动。

这里的源代码syndaemon.c

  • 重要功能是keyboard_activity(...)main_loop(...)
  • keyboard_activity使用XQueryKeyMap API调用获取键盘的当前状态(每个键1位),然后将其与最后一个(旧)状态进行比较;如果它们不同,则返回1
  • main_loopkeyboard_activitym毫秒进行一次轮询,并根据“上次活动时间”以及keyboard_activity返回true还是false来决定是禁用还是启用触摸板。
  • dp_get_device函数说明了如何枚举X个输入设备;您应该能够对此进行修改,并且该keyboard_activity功能还可以检查任何跟踪点活动。

  • xinput工具列出了设备和ID,例如“

    虚拟核心指针id = 2 [主指针(3)]
    虚拟核心XTEST指针id = 4 [从指针(2)]
    SynPS / 2 Synaptics触摸板id = 11 [从指针(2)]
    TPPS / 2 IBM TrackPoint id = 12 [从指针(2)]

  • 您可以通过XListInputDevices函数获取此(ID)

  • 之后,您必须使用XOpenDevice从ID获取设备句柄。
  • 然后,使用XQueryDeviceState函数获取TrackPoint指针的坐标。与现有循环类似,您会经常轮询一次,并检查坐标是否已更改(即正在使用TrackPoint),并使用其来打开或关闭触摸板
  • 可以将xinput实用程序与query-state开关和设备ID一起使用,以检查编程是否正确,例如:

    $ xinput查询状态12
    2节课:
    ButtonClass
    按钮[1] =向上
    按钮[2] =向上
    按钮[3] =向上
    按钮[4] =向上
    按钮[5] =向上
    按钮[6] =向上
    按钮[7] =向上
    ValuatorClass Mode =相对接近度=输入
    评估者[0] = 854
    评估者[1] = 867
    
  • 您对评估器值感兴趣,这些值是TrackPoint的X和Y坐标
  • 请参阅xinput源以获取更多提示
  • 要修改和重建此程序包:

    1. 获取来源 apt-get source...
    2. 进行修改 tools/syndaemon.c
    3. syndaemon通过注释掉118...和中的124...行来禁用现有补丁debian/patches/series
    4. 使用构建您的修改包,dpkg-buildpackage -us -ucdeb文件将位于父目录中。

1
由于赏金将在三天内到期,因此我将与您达成协议(除非出现更好的答案):如果您将我指向通过xinput标识符查询设备的API,我将为您分配赏金提供指向页面的链接,该页面描述了如何从修改后的源创建deb软件包。然后,我将能够应用这种方法。这样可以吗
1

对不起,我已经走了。听起来不错,我会在几个小时内尝试查找信息并编辑答案。
ish 2012年

别担心!很好
1

1
如您所愿,您将得到赏金。但是,我不接受答案,因为我需要先编写解决方案的代码。
1

1
@January,不确定您是否确实设法编写解决方案代码?我修补了syndaemon,以支持监视跟踪点。github.com/eyko/xf86-input-synaptics(在此处提交github.com/eyko/xf86-input-synaptics/commit/…)为了监视TrackPoint,您需要在运行syndaemon时传递-T选项标志。
文斯,

4

首先要做的是知道您的触摸板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

在此处输入图片说明 在此处输入图片说明


谢谢,但是手动禁用触摸板不是这里的问题(即使有快捷方式),我也知道该怎么做。这个想法是在使用Trackpoint时自动禁用触摸板,以类似的方式在使用键盘时自动禁用触摸板(请参阅“鼠标和触摸板”设置中的“键入时禁用触摸板”设置)。
1

0

这是一个技术含量低的解决方案,可能对电源使用不利(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间隔内告诉坐标。换句话说,禁用触摸板是保守的,但在跟踪点空闲时不应可靠地重新启用它。

无论如何,它对我的​​超极本大有帮助,手掌压力机游荡了光标。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.