So erzwingen Sie die Freigabe eines Tastaturmodifikators

18

Wenn ich Synergieeffekte zwischen meinen Computern nutze, wenn ein VirtualBox-Gast im Vollbildmodus verwendet wird, kann es vorkommen, dass einige seltsame Schlüsselmodifikatoren aktiviert sind. Wenn sie auf meiner Tastatur vorhanden sind (wie Shift_L), kann ich sie einfach antippen und ihr Status wird zurückgesetzt, und ich kann mit der Eingabe kleiner Buchstaben fortfahren. Einige davon sind jedoch überhaupt nicht meiner Tastatur zugeordnet (wie ISO_Level3_Shift), sodass ich sie überhaupt nicht ausschalten kann!

Wie setzt man sie zurück? Im Moment kann ich nur den Computer neu starten, aber das ist eine ziemlich peinliche Lösung.

Ich möchte nur ein Programm, das alle möglichen Tastaturmodifikatoren künstlich "antippen" kann, damit ihr Status zurückgesetzt wird. Kann es gemacht werden?

Ich benutze Mint 14 (ein Klon von Ubuntu 12.10 Quantal).

Adam Ryczkowski
quelle

Antworten:

22

Wenn Sie xdotoolinstalliert haben, können Sie einfach verwenden

xdotool keyup ISO_Level3_Shift

Dadurch wird ein Schlüssel-Release-Ereignis (natürlich für ISO_Level3_Shift) an den X-Server gesendet.

Sie wollten jedoch, dass ein Programm alle Modifikatortasten freigibt. Man könnte xdotool verwenden, um das einfach zu erreichen, wenn nicht, habe ich keine Ahnung, welche Modifikator-Keys definiert sind. Eine mögliche Methode, um sie zu finden, besteht darin, Folgendes zu analysieren keysymdef.h:

grep '^#define' /usr/include/X11/keysymdef.h | sed -r 's/^#define XK_(\S*?).*$/\1/;' | grep -E '_(L|R|Level.*)$'

Das gibt einige Keysyms zurück, die sicherlich Modifikatoren sind. Leider kann ich im Moment keine genaue Definition einer Modifikator-Taste finden, daher weiß ich nicht, ob dies eine vollständige Liste ist.

Das Anhängen | xargs xdotool keyupan die obige Pipeline gibt alle diese Schlüssel frei. Auf meinem System führt es den folgenden Befehl aus:

xdotool keyup Shift_L Shift_R Control_L Control_R Meta_L Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock
Mewp
quelle
1
Groß! Ich fand auch, dass nicht zugewiesene Schlüssel über den Schlüsselcode, z xdotool keyup 204.
Adam Spires
1
@Adam Spires hat mich darauf hingewiesen. Der Keyup-Code für meinen Fall war ein xmodmap-Code, z. B. 204, und die Verwendung von keysymdef.h hat nicht geholfen. Um die xmodmap Tastencodes zu sehen, versuchen: DISAPLAY=:1 xmodmap -pk | grep -iP 'alt|meta|super|hyper'. Sie müssen die Anzeigenummer in Ihre defekte VNC-Anzeigenummer ändern.
srking
Ich denke, Sie meinten DISPLAY=:1in dem obigen Kommentar.
Adam Spires
1
xdotoolunterstützt eine --clearmodifiersOption für key/ keydown/ keyup- vielleicht hat es das nicht getan, als diese Antwort geschrieben wurde? Ich gehe davon aus, dass xdotool keyup --clearmodifiers spacedas funktionieren würde. ( xdotool keyupErfordert die Angabe eines Schlüssels; „Leerzeichen“ ist willkürlich.)
Rory O'Kane,
6

Ich stellte fest, dass die bereitgestellte Lösung für mein System xdotoolhäufig nicht den feststeckenden Schlüssel abdeckte und das Ausführen setxkbmapauf meinem System nichts zu bewirken schien.

Die Lösung, die ich entdeckt habe und die bisher immer funktioniert hat, ist zu verwenden x11vnc. Im Einzelnen verwende ich den folgenden Befehl:

x11vnc -deny_all -clear_keys -timeout 1

-clear_keysist hier der Schlüsselteil. Es weist x11vncan, alle gedrückten Tasten zu löschen, wenn es beendet wird. -timeout 1fordert Sie x11vncauf, nach 1 Sekunde ohne Verbindung zu beenden, und -deny_allstellt sicher, dass während dieses Fensters keine Verbindung hergestellt werden kann.

Manchmal verhindert der feststeckende Schlüssel eine sinnvolle Interaktion mit dem Desktop. In diesem Fall führe ich Folgendes über ssh aus:

env DISPLAY=:0 XAUTHORITY=/home/[username]/.Xauthority x11vnc -deny_all -clear_keys -timeout 1
rkjnsn
quelle
4

Ich benutze "setxkbmap" ohne Argumente. Es scheint die Tastatur zurückzusetzen. Ich habe eine "Verknüpfung" in meinem Bedienfeld, die ich mit einer Maus verwenden kann, wenn die Tastatur vollständig funktionsunfähig ist.

mikevdg
quelle
0

Die x11vncAntwort ist genial, aber wenn die Installation x11vncnur zum Löschen von Modifikatoren übertrieben aussieht, finden Sie hier eine Bash-Lösung, die mithilfe xmodmap -pmder Ausgabe ein Keyup für alle bekannten Modifikatoren ausgibt. Die Konvertierung von hexadezimalem in dezimalen Schlüsselcode basiert auf der arithmetischen Erweiterung von Bash.

for KEYCODE in $(xmodmap -pm | grep -Pio '(?<=\b0x)[0-9a-f]+\b'); do

    echo -e "xdotool keyup $((16#$KEYCODE))\n" >&2
    xdotool keyup $((16#$KEYCODE))

done

Wenn Sie es über eine Tastenkombination ausführen, ist das Hinzufügen sleep 1zu Beginn (damit die physischen Tasten freigegeben werden können) ratsam. Das echoist natürlich nicht nötig; Ich möchte nur in der Lage sein, meine ~/.xsession-errorsDatei auf solche Ausgaben zu überprüfen .

lkrms
quelle