在 unix 上禁用键盘和鼠标输入(在 X 下)

在 unix 上禁用键盘和鼠标输入(在 X 下)

如何以编程方式暂时“冻结”键盘和鼠标,以免有人扰乱系统?

有多种可能性,这很有用。例如,我有一台笔记本电脑,我想确保在我离开时没有人使用它,即使有人知道密码或可以猜到它(例如妻子或孩子),以及抑制窃贼的胃口(因为这似乎不合适)。 - 运作)。或者我正在远程执行某些操作,因此我想确保计算机上的用户不会受到干扰。

答案1

假设您的 GUI 是基于 X 的(几乎所有 UNIX GUI 都是如此),请使用xinput.

首先,列出您的设备:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

列出您的鼠标的详细信息(在我们的示例中 id=6):

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

现在禁用它:

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

要启用它,请执行以下操作:

$ xinput set-int-prop 6 "Device Enabled" 8 1

键盘也是如此,只需将 int-prop 数字替换为正确的 id 即可。
在 cygwin 上进行了测试和工作。

当然,您必须事先计划如何再次启用您的设备。例如在 cron 上安排它,远程重新启用它,或者首先禁用其中一个。

答案2

xinput --set-int-prop已弃用。你应该改用--set-prop。此外,xinput --enable [device]xinput --disable [device]可分别用于启用和禁用设备。

下面是我用来启用、禁用和切换笔记本电脑触摸板的 shell 脚本:

#!/bin/bash
# Enables, disables, or toggles device

device='AlpsPS/2 ALPS GlidePoint'
if [[ $1 == -e ]] ; then
    # Enable
    #xinput --set-prop "$device" "Device Enabled" 1
    xinput --enable "$device"
elif [[ $1 == -d ]] ; then
    # Disable
    #xinput --set-prop "$device" "Device Enabled" 0
    xinput --disable "$device"
elif [[ $1 == -t ]] ; then
    # Toggle
    if [[ $(xinput list-props "$device" |
       grep "Device Enabled") == *:*1 ]] ; then
           #xinput --set-prop "$device" "Device Enabled" 0
           xinput --disable "$device"
    else
        #xinput --set-prop "$device" "Device Enabled" 1
        xinput --enable "$device"
    fi
else
    echo "usage: $0 [-edt]"
fi

答案3

使用 xinput 回答的问题是正确的,但如果您正在寻找一个简单的屏幕保护程序类型的锁,那么这里是一个快速的问题。我在 90 年代写过这篇文章,它所做的只是吃掉 X 服务器的键盘和鼠标事件,直到您输入密码。当你正确输入时,除了退出之外,没有任何反馈。

http://ishiboo.com/~danny/Projects/xl/

我将它用作屏幕锁定,完全按照您想要的方式使用它。

答案4

您的答案可能最适合您的第二个用例(远程执行某些操作),但可能不适合您的第一个用例(远离键盘)。当您返回时,如何再次运行 xinput 来恢复访问权限?

远离系统时锁定系统的标准解决方案是X屏幕保护程序,在大多数发行版中默认安装。如果配置为锁定键盘,它将在解锁之前提示您输入密码。

相关内容