問題描述
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