Linux 15.070 Themen, 107.540 Beiträge

Per Tastenkomination reconnecten

TimmintoR 2°°4 / 9 Antworten / Baumansicht Nickles

Hallo,
ich suche eine Möglichkeit per Tastenkombination die Internetverbindung zu trennen und neu aufzubauen (per Script). Am Rechner soll übrigens kein Nutzer angemeldet sein. Wie kann ich das am besten machen? Über die inittab hab ich auf CTRL + ALT + DEL das Kommando halt gelegt, geht sowas auch für andere Kombinationen?
System ist übrigens ein Debian Sarge.


Gruß

TimmintoR 2°°4

Linux.DOS.Windows - The Good.The Bad.The Ugly
bei Antwort benachrichtigen
KarstenW TimmintoR 2°°4 „Per Tastenkomination reconnecten“
Optionen

Du mußt etwas Shellprogrammierung lernen. Tastaturabfragen kann man in einem Shellscript mit dem read Befehl machen und den eingelesenen Wert kann man dann mit einer if Anweisung oder auch einer switch case Anweisung auswerten.


http://tldp.org/LDP/abs/html/

Ist mit am besten erklärt. Du kannst aber auch ein Buch bei Amazon kaufen.
Man kann mit Shellprogrammierung sehr viel mehr machen , als es mit den batch Dateien von MS DOS möglich ist. Shellprogrammierung ist schon eine Art strukturierte Programmierung und erinnert an die Programmiersprache C .
Die Linuxshell bash läßt sich sehr gut programmieren und ist der Nachfolger der Unixshell bourne (die es noch bei FreeBSD gibt).

Wenn du DSL benutzt, dann wird die Internetverbindung mit pon hergestellt und mit poff wieder getrennt. Das sind schon fertig programmierte Scripte.

Verwendest du DSL oder Modem ?

PS: Du brauchst unbedingt ein gutes Handbuch für Debian. Das Bste ist "Das Debian System" von Martin F. Kraft.

http://www.amazon.de/Das-Debian-System-Konzepte-Methoden/dp/3937514171/sr=8-1/qid=1169981011/ref=pd_ka_1/302-4779504-4826404?ie=UTF8&s=books





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
TimmintoR 2°°4 Nachtrag zu: „Per Tastenkomination reconnecten“
Optionen

Hi Karsten, erstmal danke für deine Antwort. Mit Shellprogrammierung kenn ich mich recht gut aus, aber für meinen Zweck ist das wohl nicht das richtige.

Ich versuche es mal genauer zu erklären:
Ich hab einen Firewall/Gateway-Rechner, der ohne Monitor läuft und an dem normalerweise kein Benutzer angemeldet ist. Um den Rechner runterfahren zu können, ohne mich erst als Root anmelden zu müssen, hab ich das CTRL+ALT+DEL Ereignis in /etc/inittab von reboot auf halt geändert, sodass ich den Rechner einfach hochfahre und zum Herunterfahren einfach die Kombination drücke (ohne mich anmelden zu müssen). Um auf dem Rechner nun einen Reconnect durchzuführen muss ich mich normalerweise per SSH einloggen (einmal als normaler Nutzer und einmal als Root, das Root-Login sicherheitshalber deaktiviert) und dann manuell poff und pon dsl-provider ausführen. Die Befehle hab ich nun in ein Script gepackt und nun suche ich nach einer Möglichkeit das Script auf Tastendruck auszuführen.



Gruß

TimmintoR 2°°4

Linux.DOS.Windows - The Good.The Bad.The Ugly
bei Antwort benachrichtigen
KarstenW TimmintoR 2°°4 „Hi Karsten, erstmal danke für deine Antwort. Mit Shellprogrammierung kenn ich...“
Optionen

Ich kenne keine Konfigurationsdatei die dafür geeignet ist.
Du kannst mit trap in einem Shellscript auf bestimmte Signale reagieren. trap legt die Reaktion der Shell für asyncron eintreffende Signale fest. Wenn du Ctrl + C drückst, dann löst du das Signal SIGINT aus, welches normalerweise ein Programm oder ein Shellscript unterbricht.
Du kannst die Shell aber auch dazu bringen, anders auf das Signal SIGINT zu reagieren.

Du mußt mal die Manpage durchlesen ,"man 7 signal"

trap -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

Am Ende des Scripts würde ich , das normale Verhalten des Signals wieder herstellen.

Irgendwo im Advanced Bash Scriting Guide :

"Trapping signals

trap
Specifies an action on receipt of a signal; also useful for debugging.
Note A signal is simply a message sent to a process, either by the kernel or another process, telling it to take some specified action (usually to terminate). For example, hitting a Control-C, sends a user interrupt, an INT signal, to a running program.

trap '' 2
# Ignore interrupt 2 (Control-C), with no action specified.

trap 'echo "Control-C disabled."' 2
# Message when Control-C pressed."

Das Signal von Strg + C abzufangen, ist wahrscheinlich der beste Ansatz.

Wenn du das Shellscript selbst aufrufen willst, dann mußt du ein Programm in C programmieren.
Dazu wird der POSIX Systemcall fork() aufgerufen, um einen Kindprozess zu starten und dann wird mit einem execl() Systemcall dieser Kindprozess durch den eigentlichen Prozess, der ausgeführt werden soll, ersetzt (gestartet). So macht es jedenfalls die Bash, wenn du ein Programm startest.


PS Am Einfachsten ist es, wenn du mit den Cursortasten "hoch" und "runter" die zuletzt ausgeführten Befehle zurückholst und eventuell editierst. Dazu kann man die Cursortasten "links" und "rechts" benutzen, um den Cursor zu positionieren.
Die BASH ist im Gegensatz zur alten BOURNE Shell besser zu bedienen.
Außerdem kann man die TAB Taste nutzen, um Befehle , Verzeichnissnamen und Dateinamen automatisch zu erweitern.





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
TimmintoR 2°°4 KarstenW „Ich kenne keine Konfigurationsdatei die dafür geeignet ist. Du kannst mit trap...“
Optionen

Vielen Dank für die Infos, aber dafür müsste ich wieder angemeldet sein. Vielleicht hab ich mich nicht exakt genug ausgedrückt, aber ich will eben vom Login-Promt aus das Script ausführen.
Sonst könnte ich mich ja auch gleich anmelden und dann halt ausführen, dann hätte ich ja nichts gewonnen :)


Gruß

TimmintoR 2°°4

Linux.DOS.Windows - The Good.The Bad.The Ugly
bei Antwort benachrichtigen
KarstenW TimmintoR 2°°4 „Vielen Dank für die Infos, aber dafür müsste ich wieder angemeldet sein....“
Optionen

Wenn du am Login Prompt bist, hast du nur die Shell BASH vor dir. Um so ein Script auf Tastendruck zu starten, muß im Hintergrund ein anderes Programm laufen, welches die Tastatur überwacht und dann dein Shellscript bei einer bestimmten Tastenkombination ausführt. Man kann in einem Runlevel ein Programm mit Hilfe eines Shellscriptes beim Hochfahren des Rechners starten lassen.
Wenn du in einer Endlosschleife die Tastatur überwachen läßt, dann kostest das einen Haufen Rechenzeit von der CPU.

Warum kannst du denn die Befehle mit den Cursortasten nicht zurückholen und nochmal ausführen lassen ?
Die Bash sendet bei ein paar Tastenkombinationen ein bestimmtes Signal.
So wie du dir das vorstellst, wird es nicht funktionieren.

PS: Windowsprogramme sind so ähnlich programmiert. Wenn ein Benutzer eine Nachricht an Windows schickt , zum Beispiel wenn die linke Maus oder eine Taste gedrückt wurde, dann ließt ein Windowsprogramm die Nachrichtenschlange aus und ruft daraufhin eine Fensterfuntion auf.


Bei Unix/Linux kann man nur bestimmte Signale in einem Shellscript abfangen und darauf reagieren.



Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
higgl TimmintoR 2°°4 „Per Tastenkomination reconnecten“
Optionen

hi,

schau dir mal hier die section "linux kernel" an, das könnte dir weiterhelfen:
klick

hth

Never argue with an idiot. They drag you down to their level and then beat you with experience.
bei Antwort benachrichtigen
KarstenW higgl „hi, schau dir mal hier die section linux kernel an, das könnte dir...“
Optionen

Hast du das mal ausprobiert? Wenn man ein Shellscript startet, dann startet die Shell (BASH in diesem Fall) eine Shell , in der das Shellscript ausgeführt wird. Wird hier auch eine neue Shell gestartet, wenn man das Shellscript so startet und nicht die Kommadozeile benutzt ?

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
TimmintoR 2°°4 higgl „hi, schau dir mal hier die section linux kernel an, das könnte dir...“
Optionen

Thx euch beiden, ich schau mir das mal in Ruhe an und werde es dann testen.


Gruß

TimmintoR 2°°4

Linux.DOS.Windows - The Good.The Bad.The Ugly
bei Antwort benachrichtigen
KarstenW TimmintoR 2°°4 „Thx euch beiden, ich schau mir das mal in Ruhe an und werde es dann testen....“
Optionen

Mir fällt noch ein, das man bei der Konfiguration von DSL mit pppoeconf angeben kann, das bei Recherstart eine Internetverbindung automatisch hergestellt werden soll.
Du kannst eigentlich nur versuchen, diese Befehle in ein Shellscript zu packen und in einem Runlevel zu starten.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen