Exécution de script à la déconnexion de l'utilisateur (utilisateur non root)

8

Je suis dans mes laboratoires universitaires exécutant Ubuntu 12.10 avec unité et je n'ai pas de privilèges root. J'ai besoin d'exécuter un script à la déconnexion. Est-ce possible?

Remarque: il s'agit probablement d'un double de cette question , mais les réponses données sont assez énigmatiques et aucune direction spécifique n'est donnée.

geo909
la source
Selon qu'il s'agit d'une connexion graphique ou d'une connexion "en ligne de commande"
geirha
Il s'agit d'une connexion graphique.
geo909
3
Je suppose que vous pouvez écrire un script de déconnexion qui exécute ce que vous voulez, puis vous déconnecter avec gnome-session-quitou quelque chose comme ça.
Adobe
@adobe Hmm .. Merci, cela ressemble à une bonne solution de contournement dans mon cas. C'est bizarre cependant qu'un utilisateur non privilégié ne semble pas avoir un moyen simple de faire face à cette situation.
geo909

Réponses:

4

C'est la procédure étape par étape de la gnome_save_yourselfméthode. Faisons un test.

  1. Enregistrez le code suivant sous ~/Desktop/execute_script_on_shutdown.sh (From 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. Rendez-le exécutable:

    chmod +x ~/Desktop/execute_script_on_shutdown.sh
  3. Enregistrez les éléments suivants sous ~/Desktop/shutdown_script.sh

    #!/usr/bin/bash
    touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
  4. Exécutez le script principal

    bash ~/Desktop/execute_script_on_shutdown.sh

Maintenant, vous sentez que le script attend quelque chose

  1. Déconnectez-vous ou arrêtez votre système d'exploitation (Ubuntu)
  2. S'identifier
  3. Recherchez un fichier nommé AAAAAAAAAAAAAAAAAAAAAAAAAAAsur votre bureau.

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA

Si vous voyez le fichier, tout est OK. Vous pouvez maintenant modifier le shutdown_script.shpour l'adapter à vos besoins. N'oubliez pas également d'exécuter la execute_script_on_shutdown.shconnexion (ou de la rendre exécutable automatiquement au démarrage).

totti
la source
Malheureusement, je serai hors campus pendant un certain temps et je n'ai pas accès à un bureau gnome. Si cela est testé et fonctionne, je peux l'accepter comme réponse, cependant.
geo909
Testé sur Ubuntu 12.10
totti
Est-ce que cela fonctionne avec Unity?
Gilles 'SO- arrête d'être méchant'
1
Testé avec succès sur Ubuntu 12.10, avec l'unité
totti