按日归档: 2011/08/22

[译]如何在Linux下禁用键盘、触摸板、鼠标等输入设备

原文地址:http://blog.yjl.im/2010/12/using-xinput-to-disable-keyboard-mouse.html

我最近发现可以用 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权限。

Read: 3715