Desactivar entrada de teclado y mouse en unix (bajo X)


28

¿Cómo se puede "congelar" mediante programación el teclado 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 voy, incluso si alguien conoce la contraseña o puede adivinarla (como esposa o hijos), así como deprimir el apetito de los ladrones (como parece -marcha). o estoy haciendo algo de forma remota, así que quiero asegurarme de que el usuario de la computadora no moleste.


Respuestas:


24

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

Primero, enumere sus 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 de 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 haz:

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

Lo mismo ocurre con el teclado, solo reemplace el número int-prop con la identificación adecuada.
Probado y trabajado en cygwin.

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


Ninguna otra respuesta aquí responde a la pregunta.
Philomath

En mi caso, el comando para deshabilitar el mouse se ve así: xinput set-int-prop 9 "Device Enabled" 8 0- solo, 1) Me gustaría ocultar el puntero del mouse también, y 2) si voy de X a tty (consola Linux / VTs), y luego de vuelta a X, esto se restablece ( xinput list-props 9confirma esto).
Emanuel Berg

¿Puedo desactivar un dispositivo "puntero maestro"?
ed22

14

xinput --set-int-propes obsoleto. Deberías usar --set-propen su lugar. Además, xinput --enable [device]y xinput --disable [device]se puede usar para habilitar y deshabilitar dispositivos respectivamente.

Aquí hay un script de shell que uso para habilitar, deshabilitar y alternar el panel táctil de mi computadora portátil:

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

Mira mi comentario en la publicación de Philomath. Tengo el mismo problema para xinput --disable 9.
Emanuel Berg

6

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

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

Lo uso como un bloqueo de pantalla, exactamente como quieres usarlo.


He votado a favor, ya que es el tipo de solución que quiero, pero no me funciona en Linux con contraseñas ocultas. Un proceso debe ser root para acceder a / etc / shadow y funciones asociadas, pero quiero ejecutar xl como usuario no root. Mi caso de uso: cuando miramos programas en la computadora, ¡a mi hija le gusta golpear el teclado! xscreensaver no es útil para esto
Sam Watkins

Su respuesta es un gran ejemplo de programación "suckless" o unix "haga una cosa y hágalo bien" ... excepto que no funciona para mí (¡con contraseñas ocultas!) Para mi caso de uso, me complace mucho -código una contraseña, así que está bien. Ahora enséñame cómo deshabilitar el botón de encendido, ¡ese es el botón favorito de mi bebé!
Sam Watkins,

¿Por qué no quieres root? ¿por qué no suid el binario xl?
Danny Dulai

Por cierto, ahora puede especificar la contraseña en la línea de comandos o mediante una variable de entorno.
Danny Dulai

¿Es posible comer eventos de entrada X con un conjunto de herramientas X estándar y un script de shell?
Alexander Shcheblikin

2

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

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


He actualizado
Philomath

2

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

Esta utilidad bloquea el teclado y el mouse hasta que se ingresa la contraseña y deja las ventanas visibles. Me resulta útil para las computadoras que ejecutan pantallas de información y similares.


Esta parece ser la opción más simple y liviana, y ha existido desde mediados de los 90 también. Un problema es que no creo que sea posible ocultar la imagen del cursor bloqueado, lo que desafortunadamente es inutilizable para la señalización.
aexl

1

Dependiendo de su hardware, puede quitar los módulos, controlando su hardware. Tengo una secuencia de comandos touchpadtogglepara habilitar y deshabilitar mi panel táctil.

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

Pero el teclado no parece tener un módulo asociado, y el módulo psmouse solo funcionará ocasionalmente.


1

Si está utilizando un entorno de escritorio o un administrador de inicio de sesión (GNOME, KDE, XFCE, LXDE), casi todos tienen una función de bloqueo de pantalla en la que debe escribir su contraseña para volver a sus programas.

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


He actualizado
Philomath

1

Escribí esto (en .zshrc, pero debería funcionar .bashrctambién) para hacer esto, con la ayuda de las respuestas anteriores. Para hacer lo correspondiente con el teclado, cambie 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  }

Echa un vistazo a mi respuesta a una pregunta similar sobre SO: hace lo mismo, pero se puede invocar desde un tty, y también (usando una solución alternativa) oculta el puntero.
Emanuel Berg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.