Désactiver l'entrée clavier et souris sous unix (sous X)


28

Comment peut-on "geler" temporairement le clavier et la souris, afin que personne ne puisse jouer avec le système?

Il existe plusieurs possibilités lorsque cela est utile. Par exemple, j'ai un ordinateur portable et je veux m'assurer que personne ne l'utilise pendant que je pars, même si quelqu'un connaît le mot de passe ou peut le deviner (comme la femme ou les enfants), ainsi que l'appétit des voleurs déprimant (comme il semble dis -fonctionnement). ou je fais quelque chose à distance, donc je veux m'assurer que l'utilisateur de l'ordinateur ne dérange pas.


Réponses:


24

En supposant que votre interface graphique est basée sur X (comme presque toutes les interfaces graphiques UNIX), utilisez xinput.

D'abord, listez vos appareils:

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

Listez les détails de votre souris (id = 6 dans notre exemple):

$ 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

Désactivez-le maintenant:

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

Pour l'activer, procédez comme suit:

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

Il en va de même pour le clavier, il suffit de remplacer le numéro int-prop par l'id approprié.
Testé et travaillé sur cygwin.

Bien sûr, vous devez planifier à l'avance comment réactiver vos appareils. comme le planifier sur cron, le réactiver à distance ou désactiver un seul d'entre eux en premier lieu.


Aucune autre réponse ici ne répond à la question.
Philomath

Dans mon cas, la commande pour désactiver la souris ressemble à ceci: xinput set-int-prop 9 "Device Enabled" 8 0- seulement, 1) je voudrais également masquer le pointeur de la souris, et 2) si je passe de X à un tty (console Linux / VT), et puis revenir à X, cela est réinitialisé ( xinput list-props 9confirme cela).
Emanuel Berg

Puis-je désactiver un appareil "pointeur maître"?
ed22

14

xinput --set-int-propest obsolète. Vous devez utiliser à la --set-propplace. En outre, xinput --enable [device]et xinput --disable [device]peuvent être utilisés pour activer et désactiver des périphériques respectivement.

Voici un script shell que j'utilise pour activer, désactiver et basculer le pavé tactile de mon ordinateur portable:

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

Découvrez mon commentaire sur le post de Philomath. J'ai le même problème pour xinput --disable 9.
Emanuel Berg

6

La réponse à la question en utilisant xinput est la bonne, mais en voici une rapide si tout ce que vous cherchez est un simple verrou de type économiseur d'écran. J'ai écrit cela dans les années 90, et tout ce qu'il fait, c'est manger les événements du clavier et de la souris du serveur X, jusqu'à ce que vous tapiez le mot de passe. Aucun retour du tout autre que la fermeture lorsque vous le tapez correctement.

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

Je l'utilise comme un verrouillage d'écran, exactement comment vous voulez l'utiliser.


J'ai voté pour cela car c'est le type de solution que je veux, mais cela ne fonctionne pas pour moi sur Linux avec des mots de passe cachés. Un processus doit être root pour accéder à / etc / shadow et aux fonctions associées, mais je veux exécuter xl en tant qu'utilisateur non root. Mon cas d'utilisation: lorsque nous regardons des émissions sur l'ordinateur, ma petite fille aime jouer au clavier! xscreensaver n'est pas utile pour cela
Sam Watkins

Votre réponse est un excellent exemple de programmation "suckless" ou unix "faites une chose et faites-le bien" ... sauf que cela ne fonctionne pas pour moi (avec les mots de passe cachés!) Pour mon cas d'utilisation, je suis heureux de dur -code un mot de passe, donc ça va. Maintenant apprenez-moi comment désactiver le bouton d'alimentation, c'est le bouton préféré de mon bébé!
Sam Watkins

pourquoi ne veux-tu pas root? pourquoi ne pas utiliser le binaire xl?
Danny Dulai

BTW, vous pouvez maintenant spécifier le mot de passe sur la ligne de commande ou via une variable d'environnement.
Danny Dulai

Est-il possible de manger des événements d'entrée X avec un ensemble d'outils X standard et un script shell?
Alexander Shcheblikin

2

Votre réponse est probablement la meilleure pour votre deuxième cas d'utilisation (faire quelque chose à distance), mais probablement pas pour votre premier (être loin du clavier). Comment réexécuteriez-vous xinput pour restaurer l'accès à votre retour?

La solution standard pour verrouiller le système en dehors de celui-ci est XScreenSaver , qui est installé par défaut dans la plupart des distributions. S'il est configuré pour verrouiller le clavier, il vous demandera votre mot de passe avant de le déverrouiller.


J ai mis a jour.
Philomath

2

Au moins sur les systèmes basés sur Debian tels que Ubuntu, il existe un utilitaire appelé xtrlock (1)disponible via les référentiels de paquets.

Cet utilitaire verrouille le clavier et la souris jusqu'à ce que le mot de passe soit entré tout en laissant les fenêtres visibles. Je le trouve utile pour les ordinateurs exécutant des affichages d'informations, etc.


Cela semble être l'option la plus simple et la plus légère, et elle existe depuis le milieu des années 90 aussi. Un problème est que je ne pense pas qu'il soit possible de masquer l'image du curseur verrouillé, ce qui le rend malheureusement inutilisable pour la signalisation.
aexl

1

Selon votre matériel, vous pouvez retirer les modules, contrôler votre matériel. J'ai un tel script, touchpadtogglepour activer et désactiver mon pavé tactile.

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

Mais le clavier ne semble pas avoir de module associé, et le module psmouse ne fonctionnera qu'occasionnellement.


1

Si vous utilisez un environnement de bureau ou un gestionnaire de connexion (GNOME, KDE, XFCE, LXDE), presque tous ont une fonction d'écran de verrouillage où vous devez taper votre mot de passe pour revenir à vos programmes.

Cependant, comme c'est vraiment simple, je sens que votre problème est plus complexe / différent.


J ai mis a jour.
Philomath

1

J'ai écrit ceci (en .zshrc, mais devrait .bashrcaussi fonctionner) pour le faire, à l'aide des réponses ci-dessus. Pour effectuer la correspondance avec le clavier, modifiez le paramètre dans grep Mouse.

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

Consultez ma réponse à une question similaire sur SO - elle fait de même, mais peut être invoquée à partir d'un tty, et elle (en utilisant une solution de contournement) masque le pointeur.
Emanuel Berg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.