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


28

一个人如何以编程方式临时“冻结”键盘和鼠标,从而使任何人都不会搞乱系统?

有几种有用的方法。例如,我有一台笔记本电脑,即使有人知道密码或可以猜出该密码(例如妻子或孩子),也要确保没有人使用它,同时还要降低小偷的食欲(因为看起来不舒服) -功能)。或者我正在远程做某事,因此我想确保计算机上的用户不会打扰。


Answers:


24

假设您的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上安排它,远程重新启用它,或者首先禁用其中之一。


这里没有其他答案可以回答问题。
Philomath

就我而言,禁用鼠标的命令如下所示:xinput set-int-prop 9 "Device Enabled" 8 0-仅,1)我也希望隐藏鼠标指针,以及2)如果我从X转到tty(Linux控制台/ VT),并且然后返回X,将其重置(xinput list-props 9确认)。
伊曼纽尔·伯格

我可以禁用“主指针”设备吗?
ed22

14

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

查看我对Philomath的评论。我有同样的问题xinput --disable 9
伊曼纽尔·伯格

6

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

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

我将其用作屏幕锁,正是您要使用的方式。


我为此投票,因为这是我想要的解决方案,但是在具有影子密码的Linux上它不适用于我。进程必须是root用户才能访问/ etc / shadow和相关功能,但是我想以非root用户身份运行xl。我的用例:当我们在计算机上观看节目时,我的宝贝女儿喜欢在键盘上重击!xscreensaver对此无济于事
Sam Watkins

您的答案是“无精打采”或Unix编程“做一件事并做得很好”的一个很好的例子……除了它对我不起作用(使用影子密码!)对于我的用例,我很乐意-输入密码,这样就可以了。现在教我如何禁用电源按钮,这是我宝宝最喜欢的按钮!
山姆·沃特金斯

你为什么不想生根?为什么不对xl二进制文件进行uid?
Danny Dulai 2013年

顺便说一句,您现在可以在命令行上或通过环境变量指定密码。
丹尼·杜莱

是否可以使用标准X工具集和Shell脚本来处理X输入事件?
Alexander Shcheblikin 2014年

2

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

XScreenSaver是锁定系统的标准解决方案,它已在大多数发行版中默认安装。如果配置为锁定键盘,它将在解锁之前提示您输入密码。


我已经更新了。
Philomath

2

至少在基于Debian的系统(如Ubuntu)上,有一个实用程序xtrlock (1)可通过软件包存储库调用。

该实用程序将锁定键盘和鼠标,直到输入密码并保持窗口可见为止。我发现它对于运行信息显示等的计算机很有用。


这似乎是最简单,最轻便的选择,并且自90年代中期以来就一直存在。一个问题是,我认为无法隐藏锁定的光标图像,不幸的是,这使该图像无法用于标牌。
aexl

1

根据您的硬件,您可以卸下模块以控制硬件。我有一个脚本,touchpadtoggle用于启用和禁用我的触摸板。

lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse

但是键盘似乎没有关联的模块,而psmouse-module只会偶尔工作。


1

如果您使用的是桌面环境或登录管理器(GNOME,KDE,XFCE,LXDE),则几乎所有人都具有锁定屏幕功能,您必须在其中键入密码才能返回程序。

但是,由于那真的很简单,我感觉到您的问题更加复杂/不同。


我已经更新了。
Philomath

1

我在上面的答案的帮助下(使用.zshrc,但也应该使用.bashrc)编写了此代码。要使用键盘进行相应操作,请更改中的参数grep Mouse

setmouse () {
 xinput \
  $1 \
  `xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }

签出我对类似问题的答案 -它的作用相同,但是可以从tty中调用,并且(使用替代方法)还隐藏了指针。
伊曼纽尔·伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.