Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

1

11.07.2011, 20:45

Skript als user vor shutdown ausführen

Liebes Forum, (sorry, schon wieder editiert, aber ich glaube so ist es klarer:)

ich möchte den folgenden Befehl vor Herunterfahren / Neustart des Rechners ausführen:

Quellcode

1
sudo -u ixtos dbus-send --session --dest="org.gnome.SessionManager" "/org/gnome/SessionManager" org.gnome.SessionManager.SaveSession

Mit diesem Befehl wird meine user gnome session korrekt gespeichert (siehe [gelöst] Remember currently running application)
Jetzt suche ich eine Möglichkeit, diesen Befehl automatisch vor Logout auszuführen.
Dazu habe ich im Internet mehrere Möglichkeiten gefunden:

1) Das Skript in /etc/gdm/PostSession/Default aufrufen
Problem 1: das Skript /etc/gdm/PostSession/Default selbst scheint nicht aufgerufen zu werden, denn selbst ein direkter Eintrag im Skript

Quellcode

1
echo "test" > & ! /home/ixtos/postsession.log

wird nicht ausgeführt. Ich habe in einem anderen Beitrag gefunden, dass das /etc/gdm/PostSession/Default-Skript nur bei Logout, nicht bei Shutdown ausgeführt wird. Also habe ich Logout ausprobiert, aber auch dann scheint es nicht ausgeführt zu werden, jedenfalls wird das File postsession.log nicht angelegt.
Problem 2: Eventuell ist /etc/gdm/PostSession/Default garnicht für meinen Zweck geeignet, da der user zu dem Zeitpunkt schon ausgeloggt ist und damit seine gnome-Session nicht mehr gespeichert werden kann (? http://ubuntuforums.org/showthread.php?t=961004) Damit hätte ich dann selbst wenn das Skript ausgeführt werden würde das gleiche Problem wie mit rc0.d / rc6.d

2) Das Skript in rc0.d und rc6.d aufrufen
* Skript in /etc/init.d anlegen und ausführbar machen
* symbolische absolute Links nach /etc/rc0.d und /etc/rc6.d anlegen
Problem: Das Skript wird bei Herunterfahren und Neustart aufgerufen, aber leider zu spät, wenn der User, dessen Profil ich speichern möchte, schon ausgeloggt ist. Wie oben beschrieben führe ich den Befehl extra mit 'sudo -u ixtos' aus, aber anscheinend zu einem zu späten Zeitpunkt.

Was klappt:
Das Skript als User von Hand ausführen, bevor ich den Rechner herunterfahre, aber wenn ich mal nicht dran denken würde, wären meine Einstellungen weg...

Vielen Dank im voraus und sorry nochmal für das Umstellen der Frage - sie war doch allgemeiner als ich dachte.

Hella

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »ixtos« (13.07.2011, 15:40)


2

11.07.2011, 22:27

Hallo

erstelle dein Script im Ordner /etc/rc0.d/

Dabei muss das Script am Anfang des Namens ein S01, so wird dieses Script als erstes ausgeführt.

z:B

/etc/rc0.d/S01shutdown

gruss

olivier1979

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

3

11.07.2011, 22:42

Hallo Olivier1979,

danke für die schnelle Antwort.

Leider funktioniert das nicht. Das Skript wird zwar ausgeführt, aber im Gegensatz zum Ausführen per Hand als User gehen z.B. die Tab-Titel in der konsole verloren und ~/.config/gnome-session/saved-session wird nicht korrekt geupdated. Wahrscheinlich ist der Ausführzeitpunkt zu spät (siehe Originalpost).

Ich habe es mit dem Linknamen S01... probiert und auch mit K01..., denn die K-Skripte werden ja noch vor den S-Skripten ausgeführt (und bei Shutdown und Restart auch mit den gleichen optionen wie die S-Skripte).

Viele Grüße,
Hella

4

11.07.2011, 23:09

Hallo

Ich denke jetzt mal in eine andere Richtung.

Wieso erstellst du dir nicht deinen eigenen Shutdown Knopf??

Dies könnte in etwa so aussehen

Quellcode

1
2
3
#!/bin/bash
Dein Befehl
poweroff


und erstellst einen Menueintrag zu diesem Script

gruss

olivier1979

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

5

11.07.2011, 23:36

Hallo Olivier1979,

ja, das habe ich gerade probiert :)

Ich habe einen custom launcher oben in die Leiste eingebunden. Für den Befehl

Quellcode

1
dbus-send --session --dest="org.gnome.SessionManager" "/org/gnome/SessionManager" org.gnome.SessionManager.SaveSession

funktioniert das auch prima.

Jetzt habe ich versucht, den shutdown mit einzubauen, und zwar ohne root sein zu müssen (muss man wohl bei poweroff). Dafür habe ich den Befehl

Quellcode

1
dbus-send --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

gefunden. Bei den "properties" für den custom launcher habe ich jetzt versucht, den Befehl dranzuhängen mit ';' oder '&&', aber das funnktioniert nicht. Dann wird keiner der beiden Befehle ausgeführt.

Also habe ich beide Befehle in das Skript gnome_shutdown gepackt und habe im launcher eingetragen:

Quellcode

1
gnome-terminal -e /home/ixtos/gnome_shutdown

Das funktioniert aber nicht, da dann immer "unknown application still running" als Fenster erscheint (auch noch nach einem "normalem" Restart über Powerknopf). Das Skript funktioniert übrigens aus der shell aufgerufen einwandfrei. Vielleicht muss ich den Power-Knopf einfach löschen, damit ich ihn nicht aus Versehen verwende und immer aus der shell runterfahren. Allerdings finde ich es praktisch, dass man im GUI noch kurz Bedenkzeit hat, bevor das System dann runtergefahren wird. Meistens fällt mir dann doch noch etwas ein...

Viele Grüße,
Hella

6

12.07.2011, 00:12

Hallo
Du könntest es auch grafisch machen.

schaue dafür mal hier

http://wiki.ubuntuusers.de/Zenity

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

7

12.07.2011, 00:30

Hallo Olivier1979,

zenity sieht ja ganz hübsch aus. Das werde ich mir ernsthaft überlegen, obwohl ich mir nicht sicher bin, woher das Problem mit "Application still running" kommt und ob das tatsächlich durch zenity statt gnome-terminal verhindert werden kann.

Am geschicktesten wäre tatsächlich, den Sicherungsbefehl so im System drin zu haben, dass er immer automatisch mit Herunterfahren ausgeführt wird. Wenn es da etwas wie rc0.d und rc6.d geben würde, analog zu ~/.bash_logout für meine shell (aus beruflichen Gründen tcsh) ...

Viele Grüße,
Hella

8

12.07.2011, 01:22

hallo

Der Menueintrag muss folgendermassen lauten, damit dein Script ausgeführt wird.

öffne einen Texteditor (z.B gedit), und füge folgenden Text ein

Quellcode

1
2
3
4
5
6
7
[Desktop Entry]
Name=Herunterfahren
Categories=system;
Exec=/pfad/zu/deinem/script.sh
Icon=pfad/zu/einem/icon.png
Terminal=true
Type=Application


gib diesem Dokument einem Namen, mit der Endung .desktop

z.B Herunterfahren.desktop

und speichere diese Datei im Ordner

/usr/share/applications/

Der Menueintrag befindet sich danach in der Kategorie System...

gruss

olivier1979

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

9

12.07.2011, 15:25

Hallo olivier1979,

ich habe mal die ganzen Schritte befolgt, aber mir ist nicht ganz klar, was "Der Menueintrag befindet sich danach in der Kategorie System..." bedeutet. Unter "System" oben im gnome panel habe ich ihn nicht gefunden und unter "add to panel" auch nicht. Oder meintest Du ich sollte den custom launcher dann die desktop-Datei ausführen lassen? Aber dann müsste sie ja nicht unbedingt unter /usr/share/applications/ stehen...

Danke im voraus!
Hella

10

12.07.2011, 15:47

Hallo

Ich habe gerade mein Lucid mit Gnome Desktop gestartet.

bei mir befindet sich das Symbol unter Anwendungen - sonstige - Herunterfahren

Ich schaue schnell nach, wo der Fehler liegt, und wieso du diesen nicht unter System findest.

aber du kannst ja dein script schonmal testen. Ich schreibe dir danach die Lösung

EDIT 1

OK, der Fehler war diese Zeile

Categories=system;

System muss selbst verständlich Gross geschrieben werden, und hänge noch ein Settings dran

Quellcode

1
Categories=System;Settings;


Danach findest du dein Symbol unter System - Systemverwaltung

mit einem Rechtsklick, kannst du danach eine Verknüpfung im Panel erstellen

siehe Screenshots

gruss

olivier1979
»olivier1979« hat folgende Bilder angehängt:
  • Starter.png
  • Starter2.png

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »olivier1979« (12.07.2011, 16:15)


ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

11

12.07.2011, 16:12

Hallo olivier1979,

ich habe zunächst versucht, das desktop-Skript aus der shell auszuführen, aber das hat nicht funktioniert. Es ist zwar ausführbar, aber außer einem kurz aufblitzenden Terminalfenster passiert nichts. Im nautilus hatte ich mehr Erfolg: habe das Icon, das ich in der desktop-Datei angegeben hatte angeklickt. Nun kommt aber wieder die Meldung, dass noch eine Application läuft - siehe Anhang. Irgendwie scheint sich die Anwendung selbst zu blockieren. Nur um Missverständnisse zu vermeiden:

- Ich habe bisher jetzt noch nichts mit zenity eingebaut
- mein Betriebssystem ist Englisch, also habe ich unter Applications > Other nachgesehen, was meiner Meinung nach Anwendungen > Sonstige entsprechen sollte.
- das Skript, das von der desktop-Datei aufgerufen wird ist in tcsh geschrieben
- ich habe einen Softlink von meinem personal bin nach /usr/share/applications (dort gibt es aber auch noch andere Links, sollte also ok sein)

Viele Grüße,
Hella
»ixtos« hat folgendes Bild angehängt:
  • Selection_001.png

12

12.07.2011, 16:28

Poste doch einfach mal dein Script

Das Script wird schon ausgeführt. Wenn du eine Abfrage einbauen würdest, würdest du diese sehen.

Versuche es mal folgendermassen (nur für herunterfahren, ohne dein Befehl)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
echo Wollen Sie wirklich Herunterfahren??
echo Ihre Antwort, n/j:
read answer

if [ "$answer" != "n" ]
    then 
poweroff
    else
break
fi


Damit kriegst du eine Abfrage, die du mit j bestätigen oder mit n Abbrechen musst


gruss

olivier1979

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

13

13.07.2011, 13:30

Hallo olivier1979,

ich würde gerne den *.desktop-Eintrag in meinem Menü finden. Die Datei heißt bei mir gnome_shutdown.desktop und sieht so aus:

Quellcode

1
2
3
4
5
6
7
[Desktop Entry]
Name=Herunterfahren
Categories=System;Settings;
Exec=/home/ixtos/bin/gnome_shutdown
Icon=/usr/share/icons/hicolor/scalable/apps/partner.svg
Terminal=true
Type=Application

Sie ist verlinkt von meinem persönlichen home als Softlink nach /usr/share/applications und hat die Rechte -rwxr-xr-x.
Ich habe es nicht unter Applications, Places oder System finden können, siehe Abbildungen. Suche ich an der falschen Stelle?

Mein tcsh-Skript sieht so aus:

Quellcode

1
2
3
4
5
6
7
8
9
#! /usr/bin/tcsh -f
# DBUS-Befehl zum Speichern der Session
# - inkl. Tab-Titel der konsole
# - needed in addition to System > Pref > Startup > Options automatically remember..."
dbus-send --session --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.SaveSession

dbus-send --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

exit 0


Wie gesagt ist mein Problem im Moment, dass ich den Menüeintrag nicht sehen kann.

EDIT:
Mein tcsh-Skript direkt aus der Shell ausgeführt funktioniert ohne Probleme. Das Problem hatte ich mit der *.desktop-Datei. Die konnte ich nicht direkt aus der shell aufzurufen. Als custom launcher und aus nautilus heraus läuft es, aber es kommt die besagte Meldung, dass der Rechner nicht herunterfahren kann, weil noch eine "unknown application" läuft (mit "trotzdem herunterfahren" geht es dann auch, aber diese Selbstblockade ist auf die Dauer ja keine Lösung).

Viele Grüße,
Hella
»ixtos« hat folgende Bilder angehängt:
  • System_menu.png
  • System_menu2.png

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »ixtos« (13.07.2011, 14:48)


14

13.07.2011, 14:49

Hallo

kopiere doch deine desktop Datei in das richtige Verzeichnis

Quellcode

1
sudo cp gnome_shutdown.desktop /usr/share/applications


danach funktioniert es

Zitat


Als custom launcher und aus nautilus heraus läuft es, aber es kommt die besagte Meldung, dass der Rechner nicht herunterfahren kann, weil noch eine "unknown application" läuft (mit "trotzdem herunterfahren" geht es dann auch, aber diese Selbstblockade ist auf die Dauer ja keine Lösung).


mit "poweroff -f" würde es funktionieren

schaue auch

Quellcode

1
man poweroff


gruss

olivier1979

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »olivier1979« (13.07.2011, 15:17)


ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

15

13.07.2011, 15:19

Hallo olivier1979,

ich habe die Datei gnome_shutdown.desktop jetzt direkt in den Ordner /usr/share/applications kopiert. Es taucht kein Knopf o.Ä. in den Menüs von "System > Administration" auf. Es sieht alles noch so aus wie auf den Screenshots.

Ratlos,
Hella

EDIT:
Habe die Desktop-Datei abgetippt und neu in /usr/bin/applications kopiert => jetzt funktioniert es! Jetzt kann ich meinen eigenen Knopf basteln - evtl. mit zenity etc.

VIELEN DANK!

Ich verwende tcsh wie erwähnt aus beruflichen Gründen. Es gibt eine remote-Sammlung von tools etc. die zusammen mit tcsh initialisiert wird. Inzwischen habe ich bash schon fast vergessen.


Fazit:
* es scheint keine vorgefertigte Methode zu geben, einen Befehl als user direkt vor shutdown auszuführen solange der user noch eingeloggt ist
* rc0.d und rc6.d sowie /etc/gdm/PostSession/Default werden nach Ausloggen des users ausgeführt, jedenfalls wird ein neues ~/.config/gnome-session/saved-session angelegt, aber darin nicht mehr die aktuelle Session gespeichert sondern eine alte "Standardsession" (auch nicht mit sudo -u <user>)
* mit einer oben beschriebenen *.desktop-Datei in /usr/share/applications kann man sich selbst einen Ausschaltknopf basteln und darin ein eigenes Skript aufrufen, das bestimmte Befehle ausführt (z.B. dbus-send --session --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.SaveSession und danach dbus-send --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown)
* wenn kein gnome-Menüeintrag erstellt werden soll, sondern "nur" ein custom launcher im Panel für ein eigenes Skript, dann muss in den properties "Application in terminal" statt default "Application" angegeben werden, sonst kann es Probleme geben "unknown application" blockiert z.B. Herunterfahren
* mit zenity kann man eigene Knöpfe schöner gestalten

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »ixtos« (13.07.2011, 18:24)


16

13.07.2011, 15:27

ok,

und was geschieht wenn du die Destop Datei in

~/.local/share/applications/

kopierst??, siehst du dann dein Menueintrag??

ixtos

User

  • »ixtos« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 12.11.2009

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

17

13.07.2011, 15:40

Tut mir leid, ich habe zu lange zum Editieren (und Abtippen :)) gebraucht...

18

13.07.2011, 16:28

Hallo

gut das es funktioniert hat, und danke für das Fazit... :thumbsup:

Ist vielleichtt nicht die eleganteste Lösung, mit dem eigenen Ausschaltknopf, aber solange es seinen Zweck erfüllt ist alles gut.

;)

Übrigends..

Will man den Menueintrag nur für einen Benutzer (nicht für das ganze System) kopiert man die .desktop Datei in


~/.local/share/applications/

gruss und viel spass

olivier1979