Forum: PC-Programmierung Linux/bash: wie kann man in einem Skript Tasten abfragen?


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Moriz (untertaucher)


Lesenswert?

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

Gibt es dafür ein fertiges Kommandozeilen-Programm?

von Franko S. (frank_s866)


Lesenswert?


von Moriz (untertaucher)


Lesenswert?

Franko S. schrieb:
> War das jetzt so schwer zu ergooglen?

Hast du nicht mitbekommen, dass xev und showkey nur unter X, nicht aber 
in einem Terminal oder Skript funktioniert?

Aber dummfreche Bemerkungen scheinst du genug auf lager zu haben…

: Bearbeitet durch User
von J. H. (neanderthaler)


Lesenswert?

Ohne jetzt dummfrech rüberkommen zu wollen:
Bei mir funktioniert showkey auf der Konsole und im Terminal, letzteres 
mit sudo.
Gelassen bleiben, auch am Freitag!

von Moriz (untertaucher)


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 ;-)

: Bearbeitet durch User
von Alexander S. (alesi)


Lesenswert?

Moriz möchte
Moriz schrieb:
> ... 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.

von Foobar (asdfasd)


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 vom Autor gelöscht.
von Norbert (der_norbert)


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.

von Moriz (untertaucher)


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

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Moriz schrieb:
> 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.

Tastatur Hardware -> Kernel module -> Tastaturtreiber -> Event Daemon -> 
X

: Bearbeitet durch User
von Foobar (asdfasd)


Angehängte Dateien:

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 
;-)

von Rolf M. (rmagnus)


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?

von Daniel A. (daniel-a)


Lesenswert?

Eventuell könntest du das Script per Tastenkombination starten. Dabei 2 
hinterlegen, eine mit, eine ohne shift. Und je nachdem einen anderen 
Parameter mitgeben.
Die meisten DEs haben Einstellungen für sowas.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.