Eksekusi Skrip saat logout pengguna (bukan pengguna root)

8

Saya di laboratorium universitas saya menjalankan ubuntu 12.10 dengan persatuan dan saya tidak memiliki root privilleges. Saya perlu menjalankan skrip saat logout. Apakah ini mungkin?

Catatan: ini mungkin duplikat dari pertanyaan ini , namun jawaban yang diberikan cukup samar dan tidak ada arahan khusus yang diberikan.

geo909
sumber
Tergantung pada apakah itu login grafis, atau login "command-line"
geirha
Ini adalah login grafis.
geo909
3
Saya kira Anda dapat menulis skrip log-out yang menjalankan apa yang Anda inginkan, dan kemudian logout dengan gnome-session-quitatau sesuatu seperti itu.
Adobe
@ adobe Hmm .. Terima kasih, itu terdengar seperti solusi yang baik dalam kasus saya. Aneh juga bahwa pengguna non-privilleged tampaknya tidak memiliki cara mudah untuk menghadapi situasi ini .. Btw saya sepertinya tidak dapat memilih, mungkin karena rep rendah.
geo909

Jawaban:

4

Ini adalah langkah demi langkah prosedur gnome_save_yourselfmetode. Ayo lakukan tes.

  1. Simpan kode berikut sebagai ~/Desktop/execute_script_on_shutdown.sh (Dari 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. Jadikan itu dapat dieksekusi:

    chmod +x ~/Desktop/execute_script_on_shutdown.sh
  3. Simpan yang berikut ini sebagai ~/Desktop/shutdown_script.sh

    #!/usr/bin/bash
    touch ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA  
  4. Jalankan skrip utama

    bash ~/Desktop/execute_script_on_shutdown.sh

Sekarang Anda merasakan skrip menunggu sesuatu

  1. Logout atau matikan OS Anda (Ubuntu)
  2. Gabung
  3. Periksa file bernama AAAAAAAAAAAAAAAAAAAAAAAAAAAdi desktop Anda.

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA

Jika Anda melihat file semuanya OK. Sekarang Anda dapat mengedit shutdown_script.shsesuai dengan kebutuhan Anda. Juga ingat untuk menjalankan execute_script_on_shutdown.shlogin saat ini (atau membuatnya otomatis dieksekusi pada saat startup).

totti
sumber
Sayangnya saya akan berada di luar kampus untuk sementara waktu dan saya tidak memiliki akses ke desktop gnome. Jika ini diuji dan berfungsi, saya dapat menerimanya sebagai jawabannya, ..
geo909
Diuji pada Ubuntu 12.10
totti
Apakah ini bekerja dengan Unity?
Gilles 'SO- stop being evil'
1
Diuji berhasil di Ubuntu 12.10, dengan unity
totti