Linux/bash: wie kann man in einem Skript Tasten abfragen?

OP #7629378
Lesenswert?

J. H. schrieb:

Bei mir funktioniert showkey auf der Konsole

Aber das Fenster, das dabei auf geht, in dem die Tasten landen, hast du nicht bemerkt?

Wenn man ins Terminal tippt, in dem showkey läuft, passiert gar nichts.

sudo geht in meinem Fall nicht: Es ist ein Skript, das über ein Icon gestartet wird und ich würde gern abfragen können, ob beim Klick auf das Icon Shift o.Ä. gedrückt war.

Gelassen bleiben, auch am Freitag!

Gilt auch für dich ;-)

#7629382
Lesenswert?

Moriz möchte Moriz schrieb im Beitrag #7629142:

... in einem bash-Skript abfragen, ob eine der Tasten Shift, Strg, Alt, AltGr gedrückt ist.

showkey -a zeigt bei mir nur etwas an, wenn ich eine der Tasten Shift, Strg, Alt, AltGr zusammen mit einem Buchstaben, einer Ziffer oder Sonderzeichen drücke.

Shift, Strg, Alt, AltGr entsprechen ja keinen Zeichen, sondern sind "Umschalt-Tasten". Ich bin mir gar nicht sicher, ob die Tastatur ein Signal sendet, wenn man nur Ctrl alleine drückt.

Also wenn Moriz wirklich bereits das Drücken der einzelnen Tasten Shift, Strg, Alt, AltGr detektieren will, helfen die bisherigen Antworten nicht viel.

#7629401
Lesenswert?

Showkey ist kein X11-Programm - im Gegenteil, wenn X11 läuft, funktioniert es u.U. nicht:

1
$ showkey
2
kb mode was RAW
3
[ if you are trying this under X, it might not work
4
since the X server is also reading /dev/console ]
5
...

Ist trotzdem nicht hilfreich, da es nichts hat, um den aktuellen Status der Modifier-Keys abzufragen.

Ich hab sowas auch mal gebraucht, und nichts passendes gefunden. Hab dann ein eigenes Programm geschrieben, dass den X11-Server fragt, welche Modifier er meint, gerade aktiv zu haben.

Beitrag #7629411 wurde von einem Moderator gelöscht.
#7629421
Lesenswert?

Alexander S. schrieb:

Shift, Strg, Alt, AltGr entsprechen ja keinen Zeichen, sondern sind "Umschalt-Tasten". Ich bin mir gar nicht sicher, ob die Tastatur ein Signal sendet, wenn man nur Ctrl alleine drückt.

Macht sie!

Die Tastatur sendet Make (Drücken) und Break (Loslassen) Werte. Sie macht keinerlei Unterschied zwischen den Tasten und ihren Funktionen.

Erst der Tastaturtreiber des BS macht dann etwas Sinnvolles daraus.

OP #7629450
Lesenswert?

Norbert schrieb:

Macht sie!

Die Tastatur sendet den Scancode der Taste, wenn sie gedrückt oder losgelassen wird. Es muss also irgend "jemand" darüber Buch führen und den müsste man "fragen", wie der aktuelle Status ist. Bei GUI-Programmen ist das X. Wer das bei Skripten macht? Keine Ahnung. Eigentlich kommt da nur der Tastaturtreiber in Frage.

Dazu kommt noch, dass das Skript per Mausklick ja von einem GUI angekickt wird – da ändert sich also so einiges auf unterer Ebene, bis das Skript die Kontrolle hat

#7629462
Lesenswert?

Moritz schrieb:

Es ist ein Skript, das über ein Icon gestartet wird und ich würde gern abfragen können, ob beim Klick auf das Icon Shift o.Ä. gedrückt war.

Genau so was war auch meine Anwendung (im mplayer wrapper bei Ctrl oder AltGr software volume control statt mixer benutzen). Ich hab das Programm mal angehängt. Beispiel:

1
  #!/bin/sh
2
  ...
3
  xmodifiers S && echo "Shift gedrückt"
4
  xmodifiers SC && echo "Shift und Control gedrückt"
5
  xmodifiers S C && echo "Shift oder Control gedrückt"
6
  ...
7
  # meine Anwendung:
8
  xmodifiers C e && set -- -softvol -softvol-max 200 "$@"
9
  ...

zum Testen: while sleep .2; do xmodifiers; done

PS: das Programm ist ein quick hack - mehr verdient die Aufgabe nicht ;-)

Angehängte Dateien:
#7631381
Lesenswert?

Moriz schrieb:

Aber das Fenster, das dabei auf geht, in dem die Tasten landen, hast du nicht bemerkt?

Bei mir geht da kein Fenster auf. Sicher, dass du es nicht mit xev verwechselst?

Wenn man ins Terminal tippt, in dem showkey läuft, passiert gar nichts.

Bei mir funktioniert es. Wenn ich im Terminal die linke Shift-Taste drücke, gibt showkey aus:

1
Tastencode  42 gedrückt
2
Tastencode  42 losgelassen

Bei der recheten ist es stattdessen 54.

Das funktioniert bei mir sowohl in xterm, als auch im KDE-tool "Konsole".

sudo geht in meinem Fall nicht: Es ist ein Skript, das über ein Icon gestartet wird und ich würde gern abfragen können, ob beim Klick auf das Icon Shift o.Ä. gedrückt war.

Ach so, es geht nicht um ein Skript, das in einem Terminal läuft? Wo kommt denn das Icon her? Warum kann das Programm, das dieses Anzeigt, nicht einfach erkennen, ob beim Klick shift gedrückt wurde?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren