Deshabilitar la input de keyboard y mouse en Unix (bajo X)

¿Cómo se puede "congelar" programáticamente el keyboard y el mouse temporalmente para que nadie pueda meterse con el sistema?

Hay varias posibilidades donde esto es útil. Por ejemplo, tengo una computadora portátil y quiero asegurarme de que nadie la use mientras me vaya, incluso si alguien sabe la contraseña o puede adivinarla (como esposa o hijos), así como también deprimir el apetito de los ladrones (como parece -marcha). o estoy haciendo algo de forma remota, así que quiero asegurarme de que el usuario en la computadora no moleste.

Suponiendo que su GUI está basada en X (como casi todas las GUI de UNIX), use xinput .

Primero, enumera tus dispositivos:

 $ 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)] 

Enumere los detalles para su mouse (id = 6 en nuestro ejemplo):

 $ 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 

Ahora deshabilítelo:

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

Para habilitarlo hazlo:

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

Lo mismo aplica para el keyboard, simplemente reemplace el número int-prop con la identificación adecuada.
Probado y trabajado en cygwin.

Por supuesto, debe planear de antemano cómo volverá a habilitar sus dispositivos. como progtwigrlo en cron, volver a habilitarlo de forma remota o desactivar solo uno de ellos en primer lugar.

xinput --set-int-prop está en desuso. Deberías usar --set-prop lugar. Además, xinput --enable [device] y xinput --disable [device] se pueden usar para habilitar y deshabilitar dispositivos respectivamente.

Aquí hay un script de shell que uso para habilitar, deshabilitar y alternar el touchpad de mi laptop:

 #!/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 

La pregunta respondida usando xinput es la correcta, pero aquí es una rápida si todo lo que está buscando es un simple locking de tipo de protector de pantalla. Escribí esto en los años 90, y todo lo que hace es comer los events de keyboard y mouse del server X, hasta que escribe la contraseña. No hay comentarios en absoluto que no sea salir cuando lo escribe correctamente.

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

Lo uso como un locking de pantalla, exactamente cómo quieres usarlo.

Su respuesta es probablemente la mejor para su segundo caso de uso (hacer algo de forma remota), pero probablemente no para el primero (estar alejado del keyboard). ¿Cómo ejecutaría xinput nuevamente para restaurar el acceso cuando regrese?

La solución estándar para bloquear el sistema mientras está lejos de él es XScreenSaver , que está instalado por defecto en la mayoría de las distribuciones. Si está configurado para bloquear el keyboard, le pedirá su contraseña antes de desbloquearlo.

Dependiendo de su hardware, puede eliminar los modules y controlar su hardware. Tengo una secuencia de commands, touchpadtoggle , para habilitar y deshabilitar mi touchpad.

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

Pero el keyboard no parece tener un module asociado, y el module psmouse solo funcionará ocasionalmente.

Si está utilizando un Entorno de escritorio o un administrador de inicio de session, (GNOME, KDE, XFCE, LXDE), casi todos tienen una function de locking de pantalla donde debe ingresar su contraseña para volver a sus progtwigs.

Sin embargo, dado que es realmente simple, creo que su problema es más complejo / diferente.

Al less en los sistemas basados ​​en Debian como Ubuntu, hay una utilidad llamada xtrlock (1) disponible a través de los repositorys de packages.

Esta utilidad bloquea el keyboard y el mouse hasta que se ingrese la contraseña dejando visibles las windows. Me resulta útil para computadoras que ejecutan pantallas de información y similares.

Escribí esto (en .zshrc , pero debería funcionar en .bashrc también) para hacer esto, con la ayuda de las respuestas anteriores. Para hacer lo correspondiente con el keyboard, cambia el parámetro en grep Mouse .

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