如何在 Thinkpad 上使用指点杆时禁用触摸板?

如何在 Thinkpad 上使用指点杆时禁用触摸板?

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 位),然后将其与最后一个(旧)状态进行比较;如果它们不同,则返回 1
  • main_loopkeyboard_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来源以获取更多提示
  • 要修改并重建此包:

    1. 获取源代码apt-get source...
    2. 进行修改tools/syndaemon.c
    3. syndaemon通过注释掉118...124...行来禁用现有补丁debian/patches/series
    4. 使用 构建您修改过的包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 秒的间隔内告知坐标。换句话说,它在禁用触摸板方面比较保守,但在指点杆空闲时不应该可靠地重新启用它。

无论如何,它对我的​​超极本有很大帮助,可以解决手掌按压时光标游离的问题。

相关内容