Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
keystroke

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 17. Jan 2001 20:42   Titel: keystroke

Hi,

hatte ich schon bei Hardware gepostet, da antwortet bloss keiner, daher hier nochmal:
---schnipp---
Hi,

ich wuerde gerne folgendes machen koennen:

---
der compi ist 'hot', aber niemand ist eingeloggert.

bei einem event blinkt numlock, zb 'mailblink' meldet mir mail

-> ich moechte dann eine bestimmte taste druecken, um einen Vorgang auszuloesen!
---

nun, ein joystick laesst sich zu sowas ja *bewegen*, wie kuerzlich hier zu lesen war.


geht das auch mit Tasten, zb F12 ???

wer hat da 'n Tip?
---schnapp---

selber kann ich nur (wenig) bash und perl. Habe aber keine Idee, wie das zu machen waere.
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 19. Jan 2001 10:00   Titel: Re: keystroke

Hi Killerhippy!

Seit Du die Frage gestellt hast, bin ich am knobeln. Ich hatte früher schon mal so einen Fall, wo ich das brauchte, hatte aber die Details vergessen. Jetzt habe ich wieder (nach einigem recherchieren und probieren) alles auf der Leitung.

Also: Du kannst natürlich hingehen und C und den Umgang mit der curses-Bibliothek (unter Linux ncurses) lernen. Der Vorteil wäre, dass Du tatsächlich einfach die Funktionstasten verwenden kannst und dass Du davon nicht dümmer wirst . Aber so viel Aufwand wolltest Du - glaub ich - nicht reinstecken.

Also machen wir's mit der Shell! Ist auch nur ein klitzekleiner Trick dabei...

code:

#!/bin/sh

readkey() {
OLDSTTY=`stty -g` # Sichern der Terminaleinstellungen
stty -icanon min 1 time 0 # Jedes einzelne Zeichen weitergeben
dd bs=1 count=1 # Exakt ein Zeichen lesen & ausgeben
stty $OLDSTTY # Terminaleinstellungen restaurieren
}

echo -n "Bitte drücken Sie eine Taste: "
TASTE=`readkey`
echo
echo "Sie drückten $TASTE"
exit 0


Der Trick steckt in der Funktion readkey(). Mittels stty stellt man das Terminal so ein, dass es jede einzelne eingelesene Zeichen direkt weitergibt (min 1) und dabei keinen timeout hat (time 0). dd liest dann genau ein Zeichen von stdin und schreibt's auf stdout. Die Zuweisung
TASTE=`readkey`
setzt das Zeichen in die Variable, und dann braucht nur noch ein 'case "$TASTE" in ....' zu folgen und Dein Programm ist so gut wie fertig. Na ja, fast.

Ach ja: Wenn Du so Passwort-Abfragen realisieren willst, setze zusätzlich bei stty noch ein "-echo" dazu, dann wird die gedrückte Taste vom Terminal nicht mehr angezeigt. Und wenn auch Backspace oder Strg-C ein Zeichen statt einer Funktion ergeben soll, setze "-isig" dazu. Funktionstasten liefern statt eines einzelnen Zeichens leider eine Zeichenfolge (F10: ^[[21~, ^[ steht dabei für ein ESC), daher wirst Du die nicht unbedingt verwenden können.

Dein Programm kann jetzt schon mal auf Tastendruck 'ne Aktion starten. Problem: Niemand ist eingeloggert. Nun, auch der getty ist ein Programm wie jedes andere und läuft, ohne dass jemand eingeloggert sein muss. Also trägt man sein Skript in die /etc/inittab ein, wie die gettys auch:
ms:2345:respawn:/pfad/zu/meinem/skript </dev/tty12 >/dev/tty12 2>/dev/tty12
Damit ist das Programm in den Runleveln 2, 3, 4 und 5 auf tty12 zu finden. Also (Strg-)Alt-F12 drücken, um's zu sehen.

Habe gerade alles noch mal getestet, funktioniert also wirklich . Ist sogar einigermassen portabel, sofern das stty-Kommando die Parameter "min" und "time" unterstützt. Ist leider nicht bei jeder UNIX-Variante der Fall!

Viel Spass beim weiteren Basteln!
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 23. Jan 2001 10:25   Titel: Re: keystroke

Hi Jochen,

vielen Dank fuer deine soooooo grooooosse Antwort fuer mein kleines insel-probby. Find ich ja stark!

Inzwischen hatte ich mir keyb-so-undso installiert und gelesen, das spawn mit der inittab und der keymap verwendet werden kann. Fand ich cool, nur hatte ich nicht genug Zeit, und jetzt ist der konsolenfont erstmal englisch und mein one-keystroke wartet auch noch...

Aber die Situation ist klar, das Probby hat ne Loesung, vielen Dank fuer Deine Antwort.
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy