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.

Philomath
la source
4
EN RELATION: question similaire sur OSX
Gilles 'SO- arrête d'être méchant'

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.

Philomath
la source
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

la source
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.

Danny Dulai
la source
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.

cjm
la source
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.

Jukka Matilainen
la source
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.

Utilisateur inconnu
la source
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.

loosecannon
la source
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  }
Emanuel Berg
la source
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