Skriptausführung beim Abmelden des Benutzers (kein Root-Benutzer)

8

Ich bin in meinen Universitätslabors und verwende Ubuntu 12.10 mit Einheit. Ich habe keine Root-Privilegien. Ich muss beim Abmelden ein Skript ausführen. Ist das möglich?

Hinweis: Dies ist wahrscheinlich ein Duplikat dieser Frage . Die Antworten sind jedoch ziemlich kryptisch und es werden keine spezifischen Anweisungen gegeben.

geo909
quelle
Hängt davon ab, ob es sich um eine grafische Anmeldung oder eine "Befehlszeilen"
-Anmeldung handelt
Es ist eine grafische Anmeldung.
Geo909
3
Ich denke, Sie können ein Abmeldeskript schreiben, das ausführt, was Sie wollen, und sich dann mit gnome-session-quitoder so etwas abmelden.
Adobe
@adobe Hmm .. Danke, das klingt in meinem Fall nach einer guten Problemumgehung. Es ist jedoch seltsam, dass ein nicht privilegierter Benutzer keine einfache Möglichkeit zu haben scheint, mit dieser Situation umzugehen. Übrigens scheine ich nicht in der Lage zu sein, abzustimmen, wahrscheinlich aufgrund geringer Wiederholungszahlen.
Geo909

Antworten:

4

Dies ist die schrittweise Vorgehensweise der gnome_save_yourselfMethode. Lass uns einen Test machen.

  1. Speichern Sie den folgenden Code unter ~/Desktop/execute_script_on_shutdown.sh (Von http://www.linuxquestions.org/questions/linux-desktop-74/gnome-run-script-on-logout-724453/#post3560301 )

    #!/usr/bin/env python
    
    #Author: Seamus Phelan
    
    #This program runs a custom command/script just before gnome shuts 
    #down.  This is done the same way that gedit does it (listening for 
    #the 'save-yourself' event).  This is different to placing scipts 
    #in /etc/rc#.d/ as the script will be run before gnome exits.
    #If the custom script/command fails with a non-zero return code, a 
    #popup dialog box will appear offering the chance to cancel logout
    #
    #Usage: 1 - change the command in the 'subprocess.call' in 
    #           function 'session_save_yourself' below to be what ever
    #           you want to run at logout.
    #       2 - Run this program at every gnome login (add via menu System 
    #           -> Preferences -> Session)
    # 
    #
    
    import sys
    import subprocess
    import datetime
    
    import gnome
    import gnome.ui
    import gtk
    
    
    class Namespace: pass
    ns = Namespace()
    ns.dialog = None
    
    
    def main():
        prog = gnome.init ("gnome_save_yourself", "1.0", gnome.libgnome_module_info_get(), sys.argv, [])
        client = gnome.ui.master_client()
        #set up call back for when 'logout'/'Shutdown' button pressed
        client.connect("save-yourself", session_save_yourself)
        client.connect("shutdown-cancelled", shutdown_cancelled)
    
    
    def session_save_yourself( *args):
            #Lets try to unmount all truecrypt volumes
    
    
        #execute shutdowwn script
        #########################################################################################
        retcode = subprocess.call("bash /home/totti/Desktop/shutdown_script.sh", shell=True)
        ##########################################################################################
        if retcode != 0:
            #command failed  
            show_error_dialog()
        return True
    
    def shutdown_cancelled( *args):
        if ns.dialog != None:
            ns.dialog.destroy()
        return True
    
    
    def show_error_dialog():
        ns.dialog = gtk.Dialog("There was a problem running your pre-shutdown script",
                               None,
                               gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                               ("There was a problem running your pre-shutdown script - continue logout", gtk.RESPONSE_ACCEPT))
        if ns.test_mode == True:
            response = ns.dialog.run()
            ns.dialog.destroy()
        else:
            #when in shutdown mode gnome will only allow you to open a window using master_client().save_any_dialog()
            #It also adds the 'Cancel logout' button
            gnome.ui.master_client().save_any_dialog(ns.dialog)
    
    
    
    #Find out if we are in test mode???
    if len(sys.argv) >=2 and sys.argv[1] == "test":
        ns.test_mode = True
    else:
        ns.test_mode = False
    
    if ns.test_mode == True:
        main()
        session_save_yourself()
    else:
        main()
        gtk.main() 
  2. Machen Sie es ausführbar:

    chmod +x ~/Desktop/execute_script_on_shutdown.sh
  3. Speichern Sie Folgendes als ~/Desktop/shutdown_script.sh

    #!/usr/bin/bash
    touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
  4. Führen Sie das Hauptskript aus

    bash ~/Desktop/execute_script_on_shutdown.sh

Jetzt spürt man, wie das Skript auf etwas wartet

  1. Melden Sie sich ab oder fahren Sie Ihr Betriebssystem herunter (Ubuntu)
  2. Anmeldung
  3. Suchen Sie AAAAAAAAAAAAAAAAAAAAAAAAAAAauf Ihrem Desktop nach einer Datei mit dem Namen .

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA

Wenn Sie die Datei sehen, ist alles in Ordnung. Jetzt können Sie das shutdown_script.shnach Ihren Wünschen bearbeiten . Denken Sie auch daran, die execute_script_on_shutdown.shAnmeldung auszuführen (oder sie beim Start automatisch ausführbar zu machen).

totti
quelle
Leider bin ich für eine Weile nicht auf dem Campus und habe keinen Zugriff auf einen Gnome-Desktop. Wenn dies getestet wird und funktioniert, kann ich es als Antwort akzeptieren.
geo909
Getestet auf Ubuntu 12.10
totti
Funktioniert das mit Unity?
Gilles 'SO - hör auf böse zu sein'
1
Erfolgreich getestet auf Ubuntu 12.10, mit Unity
Totti