Tastatur- und Mauseingabe unter Unix deaktivieren (unter X)


28

Wie kann man die Tastatur und Maus programmgesteuert vorübergehend "einfrieren", so dass niemand mit dem System in Konflikt geraten kann?

Es gibt verschiedene Möglichkeiten, wo dies nützlich ist. Ich habe zum Beispiel einen Laptop und möchte sicherstellen, dass niemand ihn benutzt, während ich gehe, auch wenn jemand das Passwort kennt oder es erraten kann (wie Frau oder Kinder) und den Appetit der Diebe stillt (wie es dis scheint) -Funktion). oder ich mache etwas aus der Ferne, um sicherzustellen, dass der Benutzer am Computer nicht stört.


Antworten:


24

Angenommen, Ihre GUI ist X-basiert (wie fast alle UNIX-GUIs), verwenden Sie xinput.

Listen Sie zunächst Ihre Geräte auf:

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

Listen Sie die Details für Ihre Maus auf (id = 6 in unserem Beispiel):

$ 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

Jetzt deaktiviere es:

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

So aktivieren Sie es:

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

Das gleiche gilt für die Tastatur. Ersetzen Sie einfach die int-prop-Nummer durch die richtige ID.
Getestet und gearbeitet an cygwin.

Natürlich müssen Sie im Voraus planen, wie Sie Ihre Geräte wieder aktivieren. Planen Sie es beispielsweise auf cron, aktivieren Sie es aus der Ferne wieder oder deaktivieren Sie nur eines davon an erster Stelle.


Keine andere Antwort hier beantwortet die Frage.
Philomath

In meinem Fall sieht der Befehl zum Deaktivieren der Maus folgendermaßen aus: xinput set-int-prop 9 "Device Enabled" 8 0- Nur 1) Ich möchte den Mauszeiger ebenfalls ausblenden und 2) wenn ich von X zu einem tty (Linux-Konsole / VTs) gehe und dann zurück zu X, dies wird zurückgesetzt ( xinput list-props 9bestätigt dies).
Emanuel Berg

Kann ich ein "Master Pointer" -Gerät deaktivieren?
ed22

14

xinput --set-int-propist veraltet. Sie sollten --set-propstattdessen verwenden. Außerdem xinput --enable [device]und xinput --disable [device]können zum Aktivieren bzw. Deaktivieren von Geräten verwendet werden.

Hier ist ein Shell-Skript, mit dem ich das Touchpad meines Laptops aktiviere, deaktiviere und umschalte:

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

Schauen Sie sich meinen Kommentar zu Philomaths Post an. Ich habe das gleiche Problem für xinput --disable 9.
Emanuel Berg

6

Die mit xinput beantwortete Frage ist die richtige, aber hier ist eine kurze Frage, wenn Sie nur nach einer einfachen Bildschirmschoner-Sperre suchen. Ich habe dies in den 90er Jahren geschrieben, und alles, was es tut, ist, die Tastatur- und Mausereignisse des X-Servers zu verarbeiten, bis Sie das Kennwort eingeben. Keine Rückmeldung, es sei denn, Sie beenden das Programm, wenn Sie es richtig eingeben.

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

Ich benutze es als Bildschirmsperre, genau so, wie Sie es verwenden möchten.


Ich habe dafür gestimmt, da es die Art von Lösung ist, die ich möchte, aber es funktioniert unter Linux mit Shadow-Passwörtern nicht. Ein Prozess muss root sein, um auf / etc / shadow und die damit verbundenen Funktionen zugreifen zu können, aber ich möchte xl als Nicht-Root-Benutzer ausführen. Mein Anwendungsfall: Wenn wir Shows am Computer ansehen, schlägt meine kleine Tochter gerne auf die Tastatur! xscreensaver ist nicht hilfreich für diese
Sam Watkins

Ihre Antwort ist ein großartiges Beispiel für "suckless" oder Unix-Programmierung "mache eine Sache und mache es gut" ... mit der Ausnahme, dass es bei mir nicht funktioniert (mit Shadow-Passwörtern!). Für meinen Anwendungsfall bin ich zu hart -codiere ein Passwort, also ist das okay. Jetzt lehre mich, wie ich den Ein- / Ausschalter deaktiviere, das ist die Lieblingstaste meines Babys!
Sam Watkins

warum willst du nicht root? warum nicht das xl binary suid?
Danny Dulai

Übrigens können Sie das Kennwort jetzt über die Befehlszeile oder über eine Umgebungsvariable angeben.
Danny Dulai

Ist es möglich, X-Eingabeereignisse mit einem Standard-X-Toolset und einem Shell-Skript zu essen?
Alexander Shcheblikin

2

Ihre Antwort ist wahrscheinlich die beste für Ihren zweiten Anwendungsfall (etwas aus der Ferne tun), aber wahrscheinlich nicht für Ihren ersten (nicht auf der Tastatur). Wie würden Sie xinput erneut ausführen, um den Zugriff wiederherzustellen, wenn Sie zurückkehren?

Die Standardlösung, um das System zu sperren, während Sie sich nicht in der Nähe befinden, ist XScreenSaver , das in den meisten Distributionen standardmäßig installiert ist. Wenn die Tastatur gesperrt ist, werden Sie vor dem Entsperren zur Eingabe Ihres Kennworts aufgefordert.


Ich habe aktualisiert.
Philomath

2

Zumindest auf Debian-basierten Systemen wie Ubuntu gibt es ein Hilfsprogramm, xtrlock (1)das über die Paket-Repositorys verfügbar ist.

Dieses Dienstprogramm sperrt die Tastatur und die Maus, bis das Kennwort eingegeben wird, während Windows sichtbar bleibt. Ich finde es nützlich für Computer mit Informationsanzeigen und dergleichen.


Dies scheint die einfachste und leichteste Option zu sein, und es gibt sie auch seit Mitte der 90er Jahre. Ein Problem ist, dass ich nicht denke, dass es möglich ist, das gesperrte Cursorbild zu verbergen, was dies leider für die Beschilderung unbrauchbar macht.
Aexl

1

Abhängig von Ihrer Hardware können Sie die Module entfernen und Ihre Hardware steuern. Ich habe ein solches Skript, touchpadtoggleum mein Touchpad zu aktivieren und zu deaktivieren.

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

Der Tastatur scheint jedoch kein Modul zugeordnet zu sein, und das psmouse-Modul funktioniert nur gelegentlich.


1

Wenn Sie eine Desktop-Umgebung oder einen Anmeldemanager verwenden (GNOME, KDE, XFCE, LXDE), verfügen fast alle über eine Sperrbildschirmfunktion, bei der Sie Ihr Kennwort eingeben müssen, um zu Ihren Programmen zurückzukehren.

Da dies jedoch sehr einfach ist, ist Ihr Problem meines Erachtens komplexer / anders.


Ich habe aktualisiert.
Philomath

1

Ich schrieb dies (in .zshrc, sollte aber auch funktionieren .bashrc), um dies mit Hilfe der obigen Antworten zu tun. Um dies mit der Tastatur zu tun, ändern Sie den Parameter in grep Mouse.

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

Schauen Sie sich meine Antwort auf eine ähnliche Frage zu SO an - es macht dasselbe, kann aber von einem tty aus aufgerufen werden, und es verbirgt auch (unter Verwendung einer Problemumgehung) den Zeiger.
Emanuel Berg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.