如何在Linux下禁用鍵盤、觸控板、滑鼠等輸入裝置
阿新 • • 發佈:2019-02-14
我最近發現可以用 xinput
來禁用/啟用輸入裝置。我經常用 synclient
來關掉我的觸控板, 或者用 xinput 來關閉我的筆記本鍵盤。
第一步我們需要先拿到裝置的名字或者ID:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ USB Optical Mouse id=8 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=7 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Video Bus id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=6 [slave keyboard (3)]
在這裡觸控板的名字是 'SynPS/2 Synaptics TouchPad'
ID是 7;
鍵盤的名字是 'AT Translated Set 2 keyboard'
ID是 6.
下一步我們要知道裝置都有什麼屬性:
$ xinput list-props 'AT Translated Set 2 keyboard'
Device 'AT Translated Set 2 keyboard':
Device Enabled (127): 1
鍵盤只有一個屬性 'Device Enabled'
他的值是 1
,意思就是說鍵盤是開啟狀態的。
我們來嘗試關掉它:
sleep 0.1 ; xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 0 ; sleep 5 ; xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 1
開頭 sleep 0.1
的目的是要留出時間讓你執行當前命令時所敲的回車的按鍵(keypress)事件能夠完成, 我猜測當你按下回車時命令就會執行並把鍵盤禁用,但是按鍵彈起(keyup)還沒有被髮送,所以X會以為你一直按這回車鍵。
另一個更簡單的用法是用ID來進行操作,這樣你就不需要輸入一大長串的名字了:
sleep 0.1 ; xinput set-prop 8 127 0 ; sleep 5 ; xinput set-prop 8 127 1
鍵盤的ID是8,
屬性 'Device Enabled' 的ID是127
。 當你用 list-props
列出裝置屬性時, 在屬性名後面的數字就是屬性的ID。 像'Device Enabled'
PS:設定裝置屬性不需要root許可權。