用户注销时执行脚本(非 root 用户)

用户注销时执行脚本(非 root 用户)

我在大学实验室运行 ubuntu 12.10 和 unity,我没有 root 权限。我需要在注销时运行脚本。这可能吗?

注意:这可能是这个问题但是给出的答案却相当隐晦,并且没有给出具体的指示。

答案1

这是方法的分步过程gnome_save_yourself。我们来做个测试。

  1. 将以下代码保存为~/Desktop/execute_script_on_shutdown.sh (来自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() 

  1. 使其可执行:

     chmod +x ~/Desktop/execute_script_on_shutdown.sh
    
  2. 另存为以下内容~/Desktop/shutdown_script.sh

     #!/usr/bin/bash
     touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
    
  3. 执行主脚本

     bash ~/Desktop/execute_script_on_shutdown.sh
    

现在你感觉剧本在等待着什么

  1. 注销或关闭你的操作系统(Ubuntu)

  2. 登录

  3. AAAAAAAAAAAAAAAAAAAAAAAAAAA检查桌面上名为的文件。

     ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA
    

如果您看到文件,一切正常。现在您可以编辑shutdown_script.sh以满足您的需要。还请记住在登录时执行execute_script_on_shutdown.sh(或使其在启动时自动执行)。

相关内容