জিনোম লগআউট চলাকালীন আমি কীভাবে স্ক্রিপ্ট চালাতে পারি যদি আমার প্রশাসনের সুযোগ না থাকে?


18

আমি আমার জিনোম সেশনটি লগ আউট করার আগে একটি স্ক্রিপ্ট চালাতে চাই, নিজেকে সতর্ক করতে আমি যদি মেশিনে থাকা কোনও পেনড্রাইভ প্লাগ করে ভুলে যাই।

তবে, আমি যে সকল সমাধান পেয়েছি সেগুলি আমার পক্ষে পর্যাপ্ত ছিল না:

  • এই অনুরূপ প্রশ্নটি/etc/gdm/PostSession/Default ফাইল সম্পাদনা করার পরামর্শ দেয় তবে আমার এটি করার অনুমতি নেই। (এবং ফাইলটি বর্তমানে আমার মেশিনে খালি রয়েছে, সুতরাং সুবিধা নেওয়ার জন্য কোনও বিদ্যমান হুক নেই)

  • আমি এই পোস্টটি একটি কার্যক্ষমতার পরামর্শ দিয়েছি কিন্তু, প্রথম উত্তর অনুসারে, আমি কেবল লগ ইন বন্ধ না করে কম্পিউটার বন্ধ করে দিলে এটি কাজ করে না।


সম্পর্কিত,
ityক্যের

উত্তর:


7

আপনি যেমন জ্নোম ব্যবহার করছেন, আপনি নীচের পাইথন স্ক্রিপ্টটি ব্যবহার করতে পারেন, আপনি উল্লিখিত একটি থেকে অভিযোজিত।

এটির জন্য একটি জিনোম লগআউট (অর্থাত্ gnome-session-quit) (বা জিনোম শাটডাউন) দরকার, যখন আমরা জিইউআইতে লগআউটটি ব্যবহার করি তখনই এটি ঘটে। এএফআইএকে কোনও প্রক্রিয়া কমান্ড sudo shutdown -h 0বা দ্বারা কোনও শাটডাউন আটকাতে পারে না sudo poweroff। যখন shutdownমৃত্যুদন্ড কার্যকর করা হয় এটি সমস্ত প্রক্রিয়াতে SIGTERM দেয় এবং তাদের প্রস্থান করতে কয়েক সেকেন্ড সময় দেয় (কিছু স্ক্রিপ্টগুলি কার্যকর করার পরে যা অ মূল ব্যবহারকারীদের দ্বারা সম্পাদনা করা যায় না)। যদি না বের হয় তবে প্রসেসগুলি জোর করে সিগ্কিল দিয়ে হত্যা করা হয়।

এটি পদ্ধতিটির ধাপে ধাপে 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() 
    
  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. লগ আউট বা আপনার ওএস বন্ধ (উবুন্টু)
  2. প্রবেশ করুন
  3. AAAAAAAAAAAAAAAAAAAAAAAAAAAআপনার ডেস্কটপে নামকরণ করা একটি ফাইল পরীক্ষা করুন।

    ls -l ~/Desktop/AAAAAAAAAAAAAAAAAAAAAAAAAAA
    

আপনি যদি ফাইলটি সবকিছু দেখতে পান তবে ঠিক আছে। shutdown_script.shআপনার প্রয়োজন অনুসারে আপনি এখন সম্পাদনা করতে পারেন। এছাড়াও execute_script_on_shutdown.shঅন ​​লগইন সম্পাদন করতে মনে রাখবেন (বা এটি স্টার্টআপে স্বয়ংক্রিয় কার্যকর করতে সক্ষম করুন)।


1

আপনি যদি চান যে আপনার পরিস্থিতিটি সমস্ত পরিস্থিতিতে অবরুদ্ধ হয় আপনার রুট-সুবিধাগুলি দরকার। এর আশেপাশে কোনও উপায় নেই। ব্যবহারকারী রুট সর্বদা করতে পারেনkill -9 আপনার প্রক্রিয়া । আমি অবাক হয়েছি যে একটি শাটডাউন জিনোমকে "নিজেকে বাঁচান" সংকেত দেয় না। এছাড়াও আমি বিশ্বাস করি যে "পোস্টসেশন" স্ক্রিপ্টগুলি জিনোম-সেশন সমাপ্ত হওয়ার পরে এবং (আমি বিশ্বাস করি) জাস্টারভার সমাপ্ত হওয়ার ঠিক আগে চালিত হবে, এর অর্থ এটি সেই জায়গা নয় যেখানে আপনি পর্দায় প্রদর্শিত হবার সতর্কতা রাখতে চান (যদি আমি সঠিক)।

কী কাজ করতে পারে একটি জিনোম অ্যাপ্লিকেশন যা ক) "নিজেকে বাঁচান" জিনোম ইভেন্টের উপর প্রতিক্রিয়া জানায় এবং খ) সিগন্যরমে একইভাবে প্রতিক্রিয়া জানায় যেভাবে এটি "নিজের-নিজের" -এর প্রতিক্রিয়া দেখায়। এর বাইরে আপনি খুব সামান্য কিছু করতে পারেন, বিশেষত রুট সুবিধা ছাড়াই।

তবে আপনি নন-রুট সমস্যার সমাধান করতে পারেন: একটি পোস্টসেশন স্ক্রিপ্ট লিখুন যা আপনি যা চান তা করে এবং রুট-সুবিধাসহ কারও কাছে সমস্ত মেশিনে এটি মোতায়েন করার পরামর্শ দেয় কারণ এটি একটি বুদ্ধিমান সরঞ্জাম যা ব্যবহারকারীদের অনেক সাহায্য করে। সাধারণত রুট-বিশেষাধিকারযুক্ত ছেলেরা ব্যবহারকারীদের খুশি / রাখার জন্য প্রদান করা হয়। :-)

আপনি যে সমস্যাটি সমাধান করার চেষ্টা করছেন তা কী? পেনড্রাইভ প্লাগ ইন করা অবস্থায় আপনি কেন আপনার সেশনটির লগআউট করতে পারবেন না?

আপনার কাছে একটি ডিবিএস ক্লায়েন্ট থাকতে পারে যা "ডিভাইসটি প্লাগ করতে ভুলবেন না!" যখন gvfs একটি USB ডিভাইসে একটি ফাইল সিস্টেম আনমাউন্ট করার ঘোষণা দেয়। তবে আমি জানি না যে এটি কতটা ভাল কাজ করে বা আপনার উদ্দেশ্যগুলি পরিবেশন করে।


এটি কম্পিউটার ল্যাবে আমার অ্যাকাউন্টের জন্য; আমি লগআউট করার সময় যদি আমার পেনড্রাইভ প্লাগ ইনটি ভুলে যাই তবে আমি বাড়িতে যাওয়ার সময় এটি ছেড়ে দিতে পারি। এ কারণেই আমার কাছে ব্যক্তিগত গোপনীয়তা নেই (এবং দুর্ভাগ্যক্রমে এডমিনদের জন্য এখানে কিছু জিজ্ঞাসা করা খুব দুরন্ত প্রক্রিয়া)। আপনার মতো ডিবাস ক্লায়েন্ট তৈরি করতে আমার কী করতে হবে? আমি এই জাতীয় কিছু নিয়ে কখনই কাজ করি নি এবং gcfs অনুসন্ধান করার সময় কোন বার্তাগুলি সমর্থন করে তা বলার মতো কোনও ডকুমেন্টেশন পাই না।
hugomg

0

আমি অবশেষে পাইথন স্ক্রিপ্টটি আমার প্রশ্নের দ্বিতীয় বিকল্প হিসাবে উল্লেখ করেছি তা পরীক্ষা করতে পেরেছি। এটা পরিনত হয় যে এটা করে যখন পাশাপাশি শাট ডাউন করার জন্য, শুধু না রিবুট উপর জিজ্ঞাসা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.