ubuntuusers.de

killsignal eines Terminals abfangen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Irsi

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

Hiho ☺

Ich habe ein gnome-terminal, welches sich über den autostart beim einloggen des users öffnet und welches dann den mit "-e Befehl" einen Befehl im gnome-terminal ausführt.

Nun erfordert der Befehl auch unbedingt Eingaben des users, aber manche user klicken einfach auf das x des terminals oder an der Tastatur "strg + c" und geben somit nix ein ☹

Ich möchte nun das killsignal abfangen, welches den Befehl innerhalb des Terminals unfertig beendet und dann, wenn das Signal eben genau so ein signal wie z.B. "strg+c" war, den autostart unverändert lassen so dass der user beim nächsten anmelden das wieder vorgesetzt bekommt.

Schließt der Befehl im Terminal ordnungsgemäß ab, dann soll der gnome-terminal-start aus dem Autostart entfernt werden. Er wird halt nur einmal gebraucht.

Ich hab mir die ganzen Signale angeschaut und auch so Funktionen wie sigaction(), aber ich habe nirgends beschrieben gefunden wie ich das machen könnte.

Das autostart-script läuft als #!/bin/bash.

Barabbas

Avatar von Barabbas

Anmeldungsdatum:
31. März 2007

Beiträge: 1651

Wohnort: Münster

Kann dir jetzt gerade nicht helfen, aber eigentlich brauchst du doch dieses Signal gar nicht: Wenn der Benutzer eine Eingabe gemacht hat, geht es im Code nach read weiter. Wenn er das Script an dieser Stelle abbricht, geht es natürlich nicht weiter.

Entsprechend musst du den Code, um das Script aus dem Autostart zu entfernen, einfach nach dem read platzieren und schon wird das Ding entfernt, wenn der Benutzer eine Eingabe gemacht hat und wenn nicht, dann nicht.

Entschuldige, falls ich dich falsch verstanden haben sollte.

Gruß,

dsn

Schneevater

Anmeldungsdatum:
15. Juni 2009

Beiträge: Zähle...

Hallo,

schau Dir mal das Kommando "trap" http://www.linux-praxis.de/linux1/shell2_7.html an. Das Signal "KILL" / "SIGKILL" / "9" kann nicht abgefangen werden.

Irsi

(Themenstarter)

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

Der Grundgedanke ist ja schon richtig. Nur passt er hier nicht, da ich in den autostart-gnome-terminal mit der Option "-e Befehl" den Befehl übergebe und er dann autonatisch ausgeführt wird beim Start das gnome-terminals.

Der befehl heißt "yppasswd" und läuft dann sofort beim Start des Gnome-terminals im userkontext und der user brauch nur noch "altes Passwort-neues passwort-neues passwort" eingeben...wenn er es denn macht. Wenn er auf das x in der Leiste des Terminals klickt oder "strg+c" macht, dann hat er sein Passwort nicht geändert. Und das will ich irgendwie mitbekommen 😉

Schließt das terminal normal weil yppasswd normal abgearbeitet wurde, dann soll das script aus dem autostart entfernt werden. Was aber nicht so gut wäre wenn der user auf x oder strg+c drückt anstatt sein Passwort zu ändern. Denn dann käme es beim nächsten Start nicht wieder und der user rennt immer noch mit dem Standardpasswort rum.

Hmm, ich hoffe, ich habe es einigermassen erklärt 🙄

schmauch

Avatar von schmauch

Anmeldungsdatum:
27. April 2009

Beiträge: Zähle...

Wohnort: Wettswil a. A.

Ich würde das mit zwei Skripts lösen:

Das erste Skript übernimmt die Funktion, wie du sie beschreibst. Wenn ein neues Passwort gesetzt wurde, schreibt es eine Erfolgsmeldung in eine Datei.

Ein zweites Skript entfernt dann, sofern die Erfolgsmeldung in der Datei steht, das erste aus dem Autostart.

Irsi

(Themenstarter)

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

schmauch schrieb:

Ich würde das mit zwei Skripts lösen:

Das erste Skript übernimmt die Funktion, wie du sie beschreibst. Wenn ein neues Passwort gesetzt wurde, schreibt es eine Erfolgsmeldung in eine Datei.

Ein zweites Skript entfernt dann, sofern die Erfolgsmeldung in der Datei steht, das erste aus dem Autostart.

Yep! So hab ich mir das vorgestellt ☺ Aber man muss immer mit bösen bösen usern rechnen die einfach die shell zumachen und ihr altes Passwort behalten wollen ☹

@Schneevater

Jaaa, das geht so in die Richtung was ich suche. Ich teste mal bissel rum mit "trap" und wenn ich Probleme habe melde ich mich wieder...bei einer Lösung natürlich auch 😉

Irsi

(Themenstarter)

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

Ich bekomm es nicht auf die Reihe ☹

Das Problem ist:

Ich übergebe den Befehl yppasswd als Parameter direkt dem gnome-terminal:

gnome-terminal -e yppasswd --hide-menubar --geometry=80x15+400+400 -t "Passwort ändern"

Die Trap würde aber im Script nur auf das gnome-terminal selbst wirken und nicht auf den Befehl yppasswd in ihr. Wird jetzt der Befehl yppasswd im Terminal gekillt, dann ist das gnome-terminal jedoch ohne Fehler gelaufen und schließt ordentlich. Dadurch zieht die Trap nicht.

Innerhalb des Terminalparameters

 -e yppasswd 

kann ich ber nicht noch einen Befehl angeben da dann ein Kindprozess entsteht was nicht unterstützt wird und gnome-terminal beendet.

Was gibts noch für Möglichkeiten?

Irsi

(Themenstarter)

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

Ich hab mir was überlegt.

Ich könnte im Script zuerst das gnome-terminal mit seinen Parametern ausführen und dann eine fork() setzen.

In der fork kommt zuerst die trap und dann eine while-Schleife die "lsof yppasswd>>dev/null" ausführt solange "lsof yppasswd true ist.

Ich stelle mir das so vor, dass wenn dann yppasswd im gnome-terminal gekillt wird, dann wird ja auch die Schleife gekillt und dann müsste die trap zuschlagen...

Bin mir aber nicht so sicher wie ich das in Syntax umsetzen soll und ob das überhaupt so geht. Hat einer von euch so was schon mal gemacht?

Irsi

(Themenstarter)

Anmeldungsdatum:
26. Mai 2009

Beiträge: 40

So, ich habs gelöst. Danke für eure Hilfe ☺

Antworten |