Выполнение скрипта при выходе пользователя из системы (не пользователь root)

8

Я в своих университетских лабораториях работаю с Ubuntu 12.10 с единством, и у меня нет привилегий root. Мне нужно запустить скрипт при выходе. Это возможно?

Примечание: это, вероятно, дубликат этого вопроса , однако приведенные ответы весьма загадочны и не дают конкретных указаний.

geo909
источник
Зависит от того, является ли это графическим
входом в
Это графический логин.
geo909
3
Я думаю, вы можете написать скрипт выхода из системы, который запускает то, что вы хотите, а затем выходит из системы gnome-session-quitили что-то в этом роде.
Adobe
@adobe Хм .. Спасибо, это звучит как хороший обходной путь в моем случае. Странно, однако, что непривилегированный пользователь, похоже, не имеет прямого способа справиться с этой ситуацией. Кстати, я, кажется, не могу проголосовать, вероятно, из-за низкого числа повторений.
geo909

Ответы:

4

Это пошаговая процедура gnome_save_yourselfметода. Давайте сделаем тест.

  1. Сохранить следующий код как ~/Desktop/execute_script_on_shutdown.shhttp://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. Сделайте его исполняемым:

    chmod +x ~/Desktop/execute_script_on_shutdown.sh
  3. Сохранить следующее как ~/Desktop/shutdown_script.sh

    #!/usr/bin/bash
    touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
  4. Выполнить основной скрипт

    bash ~/Desktop/execute_script_on_shutdown.sh

Теперь вы чувствуете, что сценарий чего-то ждет

  1. Выйдите из системы или завершите работу своей ОС (Ubuntu)
  2. Авторизоваться
  3. Проверьте файл с именем AAAAAAAAAAAAAAAAAAAAAAAAAAAна вашем рабочем столе.

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA

Если вы видите файл, все в порядке. Теперь вы можете редактировать в shutdown_script.shсоответствии с вашими потребностями. Также не забудьте выполнить execute_script_on_shutdown.shвход при входе в систему (или сделать его автоматически запускаемым при запуске).

Тотти
источник
К сожалению, я нахожусь вне кампуса некоторое время, и у меня нет доступа к рабочему столу гнома. Если это проверено и работает, я могу принять это как ответ, хотя ..
geo909
Проверено на Ubuntu 12.10
14:28
Работает ли это с Unity?
Жиль "ТАК - перестань быть злым"
1
Успешно протестирован на Ubuntu 12.10, с единицей
тотти