PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell-Script auf Tastendruck



ballaballa
16-05-2004, 13:22
Hi!

Ich habe folgende Frage:
Wie kann ich es machen, dass immer, wenn ich eine bestimmte Taste drücke, ein Shellscript ausgeführt wird?
Also z. B., wenn ich die Taste "ö" auf der Tastatur drücke, soll automatisch xyz.sh ausgeführt werden...


Vielen Dank schon einmal!

Gartenzwerg
16-05-2004, 14:02
Hi,
ich glaube, da kommst du um eine eigene Tastaturtabelle nicht herum. Also:


cp /usr/share/kbd/keymaps/i386/qwertz/die_tabelle_deiner_wahl.map.gz name_deiner_neuen_tabelle.map.gz
gzip -d name_deiner_neuen_tabelle.map.gz
vi name_deiner_neuen_tabelle.map

Hier jetzt den entsprechenden Keycode und den Befehl einfügen: (Das ö hat bei mir den Keycode 47)


keycode 47 = F147
string F147 = "xyz.sh\n" # das newline für die Bestätigung des Befehls

jetzt wieder Komprimieren


gzip name_deiner_neuen_tabelle.map
# Tastaturtabelle laden:
loadkeys name_deiner_neuen_tabelle.map.gz


Tschau Gartenzwerg

ballaballa
16-05-2004, 19:42
Danke für deine Antwort!

Ich habs grad ausprobiert, an und für sich funktioniert das, aber man muss dafür leider (natürlich) eingeloggt sein.
Ich habe aber folgendes vor:
Ich hab nen Server im Keller, der als Web-, Mail-, FTP-, Filesharing- und File-Server dient. Und jetzt hab ich mir gedacht, man könnte ihn vielleicht auch noch dazu bewegen, CDs zu rippen und als MP3s zu encoden.
Also CD-Laufwerk aufmachen, eine bestimme Taste auf der Tastatur drücken, CD-Laufwerk geht zu, Server rippt CD, encodet sie als MP3s und speichert sie ab. Wenn er fertig is, schickt er mir ne Mail und macht das CD-Laufwerk wieder auf.
Die einzige Schwierigkeit besteht dabei, dass er das machen soll, wenn man eine Taste drückt. Und es wäre vielleicht nicht unbedingt so toll, rund um die Uhr auf dem Server als root eingeloggt zu bleiben, damit man immer schön CDs digitalisieren kann...

Also am besten wäre, dass das Script auch ausgeführt wird, wenn niemand eingeloggt ist.
Es gibt ja, die Möglichkeit, Dateien mittels "cat > dateiname << "EOF"" zu schreiben. Sobald EOF eingegeben wird, wird die Datei gespeichert. Kann man vielleicht so oder ähnlich das Ganze realisieren?

ballaballa
17-05-2004, 09:51
man eject ;)
gehört zur Standardausrüstung.

Trotzdem danke, aber das größere Problem ist die Scriptausführung auf Tastendruck...

Kann man vielleicht einen "Tastendruck-Detektiv" in C als Dämon im Hintergrund laufen lassen?
Ich kann kaum C, wenn das aber recht einfach geht, wär's nett, wenn mir das jemand schnell programmieren würde. :)

Danke schon einmal!

Claudine
17-05-2004, 19:59
Original geschrieben von ballaballa

Trotzdem danke, aber das größere Problem ist die Scriptausführung auf Tastendruck...


Such mal nach "bind" in der
man bash... (gehört zur Standardausrüstung. )

Readline Key Bindings
The syntax for controlling key bindings in the inputrc file is simple.

ballaballa
17-05-2004, 20:09
Danke für den Tipp, in der "man bash" hab ich aber nix gefunden. Zumindest nix, das dazu gehören könnte.

Aber folgendes hat funktioniert:
server:~# bind --help
-bash: bind: --: invalid option
bind: usage: bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]
server:~#

Aber das sagt mir auch nicht wirklich viel mehr.

Und: wichtig: funktioniert das auch, wenn ich ausgeloggt bin?

ballaballa
17-05-2004, 21:48
Hm, all das bringt mich leider nicht weiter.

Ziel ist es, dass es total simpel ist, dieses Script auszuführen.
Mit dem eingeben eines Passwortes ist meine Mutter wahrscheinlich schon überfordert, aber eine Taste drücken, das geht noch ;)

Also dieses "Rip'n'Encode-Script" sollte durch das Betätigen einer bestimmten Taste gestartet werden. Egal, ob eingelogt, oder nicht...

Claudine
17-05-2004, 22:33
Original geschrieben von ballaballa
Hm, all das bringt mich leider nicht weiter.

Ziel ist es, dass es total simpel ist, dieses Script auszuführen.
Mit dem eingeben eines Passwortes ist meine Mutter wahrscheinlich schon überfordert, aber eine Taste drücken, das geht noch ;)

Also dieses "Rip'n'Encode-Script" sollte durch das Betätigen einer bestimmten Taste gestartet werden. Egal, ob eingelogt, oder nicht...

Na dann starte doch das Shellcript mit einer KDE Verknüpfung (zu einem Programm).
Unter KDE kannst du doch auch Shortcuts für Programme festlegen.
Deine Mutter muß aber eingelogt sein, damit die Taste funktioniert!

(Warum deine Mutten rippen soll versteh ich nicht.;-))

ballaballa
18-05-2004, 10:09
Das Ganze ist ein Server. Da werd ich bestimmt kein KDE installieren...

Vielleicht soll nicht unbedingt meine Mutter rippen, aber es soll eben schnell und einfach gehen. Vielleicht will ja auch mal meine Schwester ne CD digitalisiert haben...

Ich habs jetzt jedenfalls so gemacht, dass man nur
cd<ENTER>
cd<ENTER>
rip<ENTER>
<STRG>+<D>drücken muss. Ist allerdings immernoch a weng viel...

Blackhawk
18-05-2004, 14:09
dann starte doch vorher was, was dauernd read macht...
und dann mit case weiter...

buffer_7
20-05-2004, 17:23
Hallo,

ich glaube was Dir helfen kann, ist "expect".
Mit expect kannst Du auch Loginvorgänge automatisieren.
Schreib ein Script mit Login-Vorgang und dem was er auf dem Server starten soll und "bind"e das an eine Tasten Kombination. Bingo.
Wenn Muttern STRG und R (für rip) oder so drückt, startet ein locales script, loggt sich auf dem server ein und startet auf dem server das gewünschte Script zum rippen.
Loggt sich wieder aus und arbeitet auf dem Server weiter.
Damit kannst Du das alles fernsteueren.

greez
buffer_7

fork
20-05-2004, 17:44
Leg' doch auf Konsole 1 statt den getty(login,-->/etc/inittab) einfach ein "dialog" Script mit Auswahl

z. B.:
dialog --menu "Aufgabe auswaehlen" 10 70 5 \
1 "Kaffemaschine programmieren" \
2 "Netzwerkgurkenschaeler aktivieren" \
3 "Suppe kochen" 2>/tmp/auswahlDie Zahl des gewählten Menüpunktes steht in der Datei /tmp/auswahl

ThorstenS
25-05-2004, 11:37
Ich hab mir sowas mal zu SuSE 6.4 Zeiten gebastelt.
Das wollte ich auch, dass automatisch beim Booten meine mp3 Sammlung losspielte, ich aber immer noch mpg123 bedienen kann ;)

Also folgender Link sollten dich zum Ziel bringen:
http://www.linuxgazette.com/issue72/chung.html

Die dialog-Lösung würde ich auch benutzen, falls doch noch mehr zu tun ist, als nur eine CD zu rippen :)

Alternativ schreib dir eine PHP Anwendung, die meinetwegen mittels system() die Befehle ausführt - dann sollte der Rechner aber wirklich nur $Familie zugänglich sein.