ইউনিটি থেকে কাউন্টডাউন করে আমি কীভাবে জিনোম-সেশন-ছাড়ার কথা বলতে পারি?


13

কীবোর্ড শর্টকাট দিয়ে শাটডাউন করতে সক্ষম হতে আমরা gnome-session-quit ---power-offএকটি কাস্টম শর্টকাট বরাদ্দ করতে পারি ।

Ityক্যে এটি নিম্নলিখিত সংলাপে নেতৃত্ব দেবে:

এখানে চিত্র বর্ণনা লিখুন

তারপরে আমাদের সিস্টেমে শেষ পর্যন্ত বিদ্যুৎ বন্ধ করতে আমাদের আরও কমপক্ষে দুটি কী-স্ট্রোকের প্রয়োজন। এটি বরং অসুবিধাগুলি এবং আমি পুরানো শাটডাউন ডায়ালগটি পছন্দ করব যখন আপনি কেবল চাপ Returnদিয়ে বা 60 সেকেন্ডের ডিফল্ট কাউন্টডাউনটি অপেক্ষা করতে দিয়ে পাওয়ার অফ করতে পারবেন।

একই সিস্টেমে gnome-session-quit --poweroffকোনও জিনোম সেশন ফ্ল্যাশব্যাক সেশন থেকে কল করার সময় (14.04 এলটিএস) কাউন্টডাউন সহ পুরানো ডায়লগ ফিরে আসে:

এখানে চিত্র বর্ণনা লিখুন

সুতরাং আমরা জানি এটি কোথাও বাস করে।

Unক্যের অধিবেশন চলাকালীন এই পুরানো ডায়লগটি কল করার কোনও উপায় আছে কি?


Theক্যের কি কোনও গোপন টাইমার নেই, সুতরাং এটি 60 সেকেন্ড পরে বিদ্যুত বন্ধ করে দেয় ??
টিম


উভয়ের কাছেই: নতুন কথোপকথনের সাথে জিনিসটি হ'ল এটি কোনও ব্যবহারকারী নির্বাচনের জন্য বাহ্যত কী করণীয় তার জন্য অপেক্ষা করছে ...: /
তাক্কাত

2
@ সার্গ উইন্ডোটি সেশন ম্যানেজারের অন্তর্গত (কোনও ফাইলে নতুন উইন্ডোটির বৈশিষ্ট্য লিখতে আমি একটি পটভূমি স্ক্রিপ্ট চালিয়েছিলাম)। সমস্যাটি এটি উইন্ডো ম্যানেজারের উপর নির্ভর করে ভিন্নভাবে আচরণ করে।
জ্যাকব Vlijm

1
@ জ্যাকবভিজিম: হ্যাঁ আমিও এটি দেখতে পেলাম ... এটি সম্ভবত ডাব্লুএমকে পোল করে এবং তারপরে এই বা সেই রুটিনকে কল করে তবে আমি জোর করার কোনও উপায় পাইনি।
তাকত

উত্তর:


10

পছন্দসই আচরণ অনুকরণ করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে। পাশাপাশি চালানো উচিত sudo। একটি কীবোর্ড শর্টকাটে আবদ্ধ হতে পারে ( পাসওয়ার্ডহীন চালানোর অনুমতি দেওয়ারshutdown জন্য sudoers ফাইলে কমান্ডের প্রাথমিক সংযোজন সহ )। সরল, সংক্ষিপ্ত এবং কাজটি করে।

#!/bin/bash
# Date: June 11,2015
# Author: Serg Kolo
# Description: a script to emulate
# behavior of GNOME session flashback
# shutdown dialog

# Tell ubuntu to shutdown in 1 min
shutdown -P +1 &
# Show the dialog
zenity --question --text="Shutdown now ? Automatic shutdown in 60 seconds" --ok-label="DOIT" 
# If user clicks DOIT, then cancel the old 
# shutdown call that has countdown,
# (because only one shutdown command can be run at a time), and
# tell ubuntu to shutdown immediately
# otherwise - cancel it
if [ $? -eq 0 ];then
        shutdown -c
        shutdown -P now
else
        shutdown -c
fi

আপডেট: 14 জুন

তক্কাতের পরামর্শ অনুসারে, এখানে একটি স্ক্রিপ্ট রয়েছে যা সুডো অ্যাক্সেসের প্রয়োজন ছাড়াই একই আচরণ অর্জনের জন্য জেনটিটির --timer বিকল্প এবং dbus ব্যবহার করে:

#!/bin/bash
# Date: June 14,2015
# Author: Serg Kolo
# Description: a script to emulate
# behavior of GNOME session flashback
# shutdown dialog
# version #2

zenity --question --text="Shutdown now ? Autoshutdown in 60 seconds" \
    --cancel-label="DOIT" --ok-label="NOPE" --timeout=60 ||  
  dbus-send --system --print-reply --dest=org.freedesktop.login1 \
    /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true

এখানে মূল ধারণাটি হ'ল জেনটির সময়সীমা বিকল্প 0 এর চেয়ে বেশি কোড সহ প্রস্থান করে, যার অর্থ সাধারণত কমান্ড ব্যর্থ হয়। সুতরাং জেনটির বাতিল বিকল্প এবং সময়সীমাটিকে শর্তডাউন করার অনুমতি দেবে এমন শর্ত হিসাবে চিকিত্সা করার মাধ্যমে, আমরা ওআর অপারেটর ( ||) কে কেবল তখনই শাটডাউন ব্যবহার করি যদি ব্যবহারকারী বাতিল বোতামটি ("ডিওআইএটি" হিসাবে লেবেলযুক্ত) বা ডায়ালগের সময়সীমাটি ক্লিক করে থাকে।

ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য আরেকটি প্রকরণের মাধ্যমে এটি করা যেতে পারে yad(এই আদেশগুলি দিয়ে প্রথমে ইনস্টল করা প্রয়োজন sudo apt-add-repository ppa:webupd8team/y-ppa-manager;sudo apt-get update; sudo apg-get install yad)। এই প্রকরণটি ব্যবহারকারীকে জানতে পারে যে কত সময় বাকি রয়েছে progress

    #!/bin/bash
    yad --auto-close --sticky --on-top --skip-taskbar --center \
  --text 'Shutdown now ? Autoshutdown in 60 seconds.' \
  --button="gtk-ok:1" --button="gtk-close:0" --image=dialog-question \ 
--title 'Shutdown' --timeout=60 --timeout-indicator=top || 
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true

অন্য একটি সম্ভাব্য সংস্করণ, অ্যাকাউন্টে বিবেচনা করে যে আপনি যদি জেনিটির ঠিক আছে বোতামের লেবেলটি পরিবর্তন করেন তবে ডিফল্টরূপে হাইলাইট করা বোতামটি ওকে বাটন নাও থাকতে পারে।

zenity --question --timeout 10 --text="Automatic shutdown in 10 seconds"
if [[ $? -eq 1 ]] ; then
    # user clicked Cancel
    exit 
else
    dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
fi

কোন রিটার্ন উপর সিস্টেম নিচে স্ক্রিপ্ট স্থবির যে 0. নয় স্ক্রিপ্ট টাইম আউট করা, নয়তো 1 বা 5 এর ফেরত মান চালানো স্ক্রিপ্ট বলে তাহলে elseঅংশ


Sudo দিয়ে চালিত হওয়ার সময় বা কব্জনহীন ব্যবহারকারীদের শাটডাউন করার অনুমতি দেওয়ার সময় মনোযোগের মতো কাজ করে। আমি বরং এটি না করতাম। আপনার স্ক্রিপ্টটি একজন মারাত্মক ব্যবহারকারী দ্বারা চালিত করতে সক্ষম করতে আমাকে নীচের সম্পাদনাগুলি পরামর্শ দিন: ১. এই উত্তরে যেমন পরামর্শ দেওয়া হয়েছিল পাওয়ার অফের জন্য dbus ব্যবহার করুন ২.zenity --timeout ইনবিল্ট টাইমারটি ব্যবহার করুন । এটির মাধ্যমে আমাদের পরে শাটডাউন বাতিল / পুনরায় চালু করতে হবে না।
তাক্কাত

@ টাকাকাত আপনার পরামর্শগুলি ব্যবহার করে এমন আরও একটি স্ক্রিপ্ট যুক্ত করেছে। দয়া করে পর্যালোচনা করুন
সের্গেই কলডিয়্যাজনি

এটি প্রকৃতপক্ষে রুট পাসওয়ার্ড ছাড়াই শাটডাউন করে তবে রিটার্ন কী সহ তাত্ক্ষণিক শাটডাউন করার জন্য ডিফল্টরূপে ঠিক / ডিওআইটি বাটনটি নির্বাচিত হয় না। আমরা if [[ $? -eq 1 ]] ; then exit \else dbus...শর্তযুক্ত একটি অনুরূপ স্ক্রিপ্ট ব্যবহার করি যা এটি করে। স্পষ্টতই পুরানো লগআউট-
সহায়ককে

ইয়াদ ইনস্টল করতে কমান্ড যুক্ত করুন;)
বি

আমি উভয় উত্তরের অনুগ্রহ বিভক্ত করতে চান। এরকম দুটি সমান দুর্দান্ত উত্তর থাকার পরে এখানে সিদ্ধান্ত নেওয়া খুব কঠিন ছিল। অবশেষে আমি এটি জ্যাকবকে দিয়েছি কারণ তার উত্তরটি কিছুটা বহুমুখী বলে মনে হচ্ছে। তবে আপনার স্ক্রিপ্টটি দুর্দান্তভাবে কাজ করে এবং এটি খুব সহজ। আমি এটিকে শীর্ষ উত্তর হিসাবে প্রদর্শিত করার পরিবর্তে এটি স্বীকৃত হিসাবে চিহ্নিত করব। আমি আশা করি এর মাধ্যমে এটি সময়ের সাথে আরও বেশি ভোট পাবে।
তাকাকাত

6

আপনি যা চেয়েছিলেন তা আক্ষরিকভাবে নয় , তবে একটি স্ক্রিপ্টের নীচে স্ক্রিপ্টটি নিচে রাখার জন্য একটি (কার্যকরভাবে) তুলনীয় সমাধান হ'ল।

এর মানে কি

শর্টকাট কী ব্যবহার করা হয়:

  • gnome-session-quit --power-offকমান্ড চালানো হয়
  • মাউসটিকে সংশ্লিষ্ট "বন্ধ" বোতামে স্থানান্তরিত করা হয়েছে, কার্যকরভাবে শাটডাউন বোতামটি প্রাক-নির্বাচিত করা হয়েছে:

    এখানে চিত্র বর্ণনা লিখুন

তারপর:

  • ব্যবহারকারী চাপলে Enter, সিস্টেমটি বন্ধ হয়ে যায়
  • যদি ব্যবহারকারী কিছু না করে, সিস্টেমটি 30 সেকেন্ডের জন্য অপেক্ষা করে (বা আপনি সেট করতে চান এমন কোনও সময়কাল) এবং বন্ধ হয়ে যায়।
  • যদি ব্যবহারকারী 30 সেকেন্ডের মধ্যে মাউসটি সরান, পদ্ধতিটি বন্ধ হয়ে যায়

এই পান্ডুলিপি

#!/usr/bin/env python3
import subprocess
import time

#--- set the location of the close button x, y
q_loc = [1050, 525]
#--- set the time to wait before shutdown
countdown = 30

subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])

coords1 = q_loc
t = 0

while True:
    time.sleep(1)
    cmd = "xdotool", "getmouselocation"
    currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
    coords2 = [int(n.split(":")[1]) for n in currloc]
    if coords2 != coords1:
        break
    else:
        if t >= countdown:
            subprocess.Popen(["xdotool", "key", "KP_Enter"])
            break
    t += 1

কিভাবে ব্যবহার করে

আমি নিশ্চিত যে আপনি এটি কীভাবে ব্যবহার করতে পারবেন তা নিশ্চিত, তবে এখানে আমরা অভ্যাসগত কারণে চলেছি:

  1. স্ক্রিপ্ট ব্যবহার করে xdotool

    sudo apt-get install xdotool
    
  2. একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন run_close.py

  3. প্রধান বিভাগে ক্লোজ উইন্ডোতে শাট ডাউন বোতামটির পর্দার অবস্থান নির্ধারণ করুন (আমার প্রথম অনুমানটি ঠিক ছিল):

    #--- set the location of the close button x, y
    q_loc = [1050, 525]
    

    এবং অপ্রত্যাশিত বন্ধ হওয়ার আগে অপেক্ষা করার সময়:

    #--- set the time to wait before shutdown
    countdown = 30
    
  4. কমান্ড দ্বারা এটি পরীক্ষা করুন:

    python3 /path/to/run_close.py
    

    এটি সমস্ত বিকল্পের সাথে পরীক্ষা করুন: Enterতাত্ক্ষণিক শাটডাউন, চাপবিহীন শাটডাউন এবং মাউস-পদক্ষেপের মাধ্যমে প্রক্রিয়াটি ভাঙ্গার জন্য চাপুন

  5. যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে একটি শর্টকাট কীতে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:

     python3 /path/to/run_close.py
    

সম্পাদনা

স্ক্রিপ্টের এমন কোনও সংস্করণের নীচে যাতে কোনও অতিরিক্ত সেটিংয়ের প্রয়োজন হয় না। এটি স্ক্রিনের রেজোলিউশন যাই হোক না কেন, প্রস্থান বোতামটির স্থানাঙ্কগুলি গণনা করে।

সেটআপটি প্রায় একই রকম, তবে [3.]এড়ানো যায়।

#!/usr/bin/env python3
import subprocess
import time

#--- set the time to wait before shutdown
countdown = 30

def get_qloc():
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    scrs = [s.split("+") for s in xr if all([s.count("x") == 1, s.count("+") == 2])]
    center = [int(int(s)/2) for s in [scr[0] for scr in scrs if scr[1] == "0"][0].split("x")]
    return [center[0] + 250, center[1]]

q_loc = get_qloc()

subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])

coords1 = q_loc
t = 0

while True:
    time.sleep(1)
    cmd = "xdotool", "getmouselocation"
    currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
    coords2 = [int(n.split(":")[1]) for n in currloc]
    if coords2 != coords1:
        break
    else:
        if t >= countdown:
            subprocess.Popen(["xdotool", "key", "KP_Enter"])
            break
    t += 1

ব্যাখ্যা

সিস্টেমটি বন্ধ করতে সেশন ম্যানেজার উইন্ডোটির আকার সর্বদা কেন্দ্রিক এবং একটি স্থির (পরম) আকারের হয়, পর্দার রেজোলিউশনে স্বতন্ত্র। সুতরাং পর্দার কেন্দ্রের সাথে সম্পর্কিত অবস্থানটি একটি ধ্রুবক উপাদান।

তারপরে আমাদের যা করতে হবে তা হ'ল পর্দার রেজোলিউশন পড়া এবং সেখান থেকে বোতামের অবস্থান গণনা করা।

প্রয়োগ করা ফাংশন ( get_qloc()) বাম স্ক্রিনের রেজোলিউশন গণনা করে , যেহেতু এটিই সংলাপটি উপস্থিত হবে।

বিঃদ্রঃ

শট ডাউন উইন্ডোটি উপস্থিত হওয়ার পরেtime.sleep(0.4) মাউসটি সরানো হয়েছে কিনা তা নিশ্চিত করার জন্য তুলনামূলক ধীর গতির সিস্টেমগুলির জন্য লাইনে সেট করা সময়টি সেট করা হয় । দ্রুত সিস্টেমে এটি সংক্ষিপ্ত হতে পারে, ধীর সিস্টেমে (সম্ভবত কোনও ভিএম এর মতো) এটি আরও দীর্ঘতে সেট করার প্রয়োজন হতে পারে।


@ টাক্কাত স্থির, এই সংস্করণটি যে কোনও রেজোলিউশনে কাজ করবে।
জ্যাকব Vlijm

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