Ejecución de script al cerrar sesión del usuario (usuario no root)


8

Estoy en mis laboratorios universitarios ejecutando ubuntu 12.10 con unidad y no tengo privilegios de root. Necesito ejecutar un script al cerrar sesión. es posible?

Nota: este es probablemente un duplicado de esta pregunta , sin embargo, las respuestas son bastante crípticas y no se dan instrucciones específicas.


Depende de si se trata de un inicio de sesión gráfico o de inicio de sesión de "línea de comandos"
geirha

Es un inicio de sesión gráfico.
geo909

3
Supongo que puedes escribir un script de cierre de sesión que ejecute lo que quieras y luego cierre la sesión gnome-session-quito algo así.
Adobe

@adobe Hmm .. Gracias, eso suena como una buena solución en mi caso. Sin embargo, es extraño que un usuario no privilegiado no parezca tener una forma directa de lidiar con esta situación. Por cierto, no puedo votar, probablemente debido a la baja reputación.
geo909

Respuestas:


4

Este es el procedimiento paso a paso del gnome_save_yourselfmétodo. Hagamos una prueba

  1. Guarde el siguiente código como ~/Desktop/execute_script_on_shutdown.sh (De 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. Hazlo ejecutable:

    chmod +x ~/Desktop/execute_script_on_shutdown.sh
  3. Guarde lo siguiente como ~/Desktop/shutdown_script.sh

    #!/usr/bin/bash
    touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
  4. Ejecute el script principal

    bash ~/Desktop/execute_script_on_shutdown.sh

Ahora sientes que el guión espera algo

  1. Cerrar sesión o apagar su sistema operativo (Ubuntu)
  2. Iniciar sesión
  3. Busque un archivo con nombre AAAAAAAAAAAAAAAAAAAAAAAAAAAen su escritorio.

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA

Si ve el archivo, todo está bien. Ahora puede editar el shutdown_script.shpara satisfacer sus necesidades. También recuerde ejecutar el execute_script_on_shutdown.shinicio de sesión (o hacerlo ejecutable automáticamente al inicio).



Desafortunadamente, estaré fuera del campus por un tiempo y no tengo acceso a un escritorio de gnome. Sin embargo, si esto se prueba y funciona, puedo aceptarlo como la respuesta ...
geo909

Probado en Ubuntu 12.10
totti

¿Funciona esto con Unity?
Gilles 'SO- deja de ser malvado'

1
Probado con éxito en Ubuntu 12.10, con la unidad
totti
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.