1. 程式人生 > >如何在Linux下禁用鍵盤、觸控板、滑鼠等輸入裝置

如何在Linux下禁用鍵盤、觸控板、滑鼠等輸入裝置

我最近發現可以用 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'

的ID總是 127,但是裝置的ID就不一樣,它跟裝置的連線時間有關,一般越先連線的裝置ID越小,之後會越來越大。

PS:設定裝置屬性不需要root許可權。