পুনরায় শুরু করার পরে এবং স্ক্রীন আনলক করার পরে স্ক্রিপ্টটি কীভাবে চালানো যায়


14

উবুন্টু 12.04 এলটিএস-এ, আমি স্থগিতাদেশ থেকে পুনরায় শুরু করার পরে এবং আমার ডেস্কটপ আনলক করার পরে স্ক্রিপ্টগুলি চালাতে চাই। এগুলি আমার ব্যবহারকারী হিসাবে চালাতে হবে এবং আমার অ্যাক্সেস সহ $DISPLAY

বিশেষত, আমি চাই

  • 985028 বাগnm-applet জুড়ে আবার কাজ শুরু করুন
  • ব্যবহার করে একটি কাস্টম বিজ্ঞপ্তি প্রদর্শন করুন notify-send
  • এই কাজগুলি করার পরে সম্ভবত অন্যান্য জিনিসগুলি

যখন আমি আবার শুরু করি, স্ক্রিপ্টগুলি /etc/pm/sleep.d/চালিত হয় তবে তারা আমার স্ক্রীন এবং ব্যবহারকারীর নাম না জেনে রুট হিসাবে চালায়। আমি যদি এই স্ক্রিপ্টগুলিতে আমার ব্যবহারকারীর নাম এবং exportডিফল্টটিকে হার্ড-কোড করি তবে এটি কার্যকর হতে পারে DISPLAY :0তবে এটি খুব কুৎসিত হ্যাকের মতো অনুভব করে।

~/.config/autostart/xyz.desktopলগইন করার পরে স্ক্রিপ্টগুলি চালানো হয়, তবে তারা পুনরায় চালু হওয়ার পরে কেবল পর্দা আনলক করার পরে চলবে না।

আবার শুরু করার পরে স্ক্রিনটি আনলক করার পরে কি স্ক্রিপ্টগুলি চালানোর কোনও উপায় আছে?


ব্যবহারকারীর নামটি হার্ড না করার জন্য, আপনি usersধরে নিতে পারেন যে অন্য কেউ লগইন করেছেন নি (বা এটি কোনও ব্যাপার নয়)
স্পারহক

উত্তর:


9

দেখে মনে হচ্ছে আপনার আগের উত্তরটিতে ইউজারনেমটি হার্ড কোড করতে হবে, সুতরাং /etc/pm/sleep.d এর জন্য একটি সাধারণ স্ক্রিপ্ট এখানে দেওয়া আছে যদি কেউ দ্রুত সমাধানের সন্ধান করে থাকে:

#!/bin/bash 
case "$1" in
    hibernate|suspend)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on suspend"
        ;;
    thaw|resume)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on resume"
        ;;
esac

6

ইউনিক্স এবং লিনাক্স সাইটের এই প্রশ্নটি dbus বার্তা ব্যবহার করে একটি বিকল্প পদ্ধতির দলিল করে:

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while true; do read X; if echo $X | grep "boolean true" &> /dev/null; then SCREEN_LOCKED; elif echo $X | grep "boolean false" &> /dev/null; then SCREEN_UNLOCKED; fi done )

(আপনি করতে চান এমন ক্রিয়াকলাপগুলি দিয়ে SCREEN_LOCKED এবং SCREEN_UNLOCKED প্রতিস্থাপন করুন))

ব্যবহার xrandr 1>/dev/null 2>1যেমন আনলক পদক্ষেপ আমার সমস্যা হল মনিটর রেজুলেশন / অবস্থানের সঠিকভাবে স্ক্রীন আনলক করার উপর পুনঃস্থাপিত করা হয় নি সংশোধন (xrandr পুনরায় পড়া পর্দা সেটিংস কারণ বলে মনে হয়)। আমি এই লাইনটি আমার .বাশ_প্রোফাইলে একটি ব্যাকগ্রাউন্ড টাস্ক হিসাবে যুক্ত করেছি (কঠোরভাবে এটি ডেস্কটপ ফাইল হিসাবে ~ / .config / অটোস্টার্টে আরও ভাল হতে পারে, যেহেতু আপনি যখন জিনোম শুরু করেন কেবল তখনই চালিত হয়):

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while true; do read X; if echo $X | grep "boolean false" &> /dev/null; then xrandr 1>/dev/null 2>1; fi done ) &

জিনোম-স্ক্রীনসেভার এপিআইয়ের আরও পটভূমি এই সাইটে এবং ডিবিএস মনিটরে পাওয়া যাবে


1

একটি সমাধান হ'ল একটি স্ক্রিপ্ট যা ডেস্কটপে লগ ইন করার সময় চলে এবং কোনটি ডিবিএস বার্তাগুলি ক্যাচ করে। স্থগিত করা থেকে পুনরায় শুরু করার পরে স্ক্রীনটি লক হয়ে গেছে এবং পাসওয়ার্ড দেওয়ার পরে, ডিবিএসে একটি আনলক ইভেন্ট রয়েছে।

(আমাকে সঠিক ট্র্যাকে রাখার জন্য কিম এসজেকে ধন্যবাদ I আমার কাছে স্ক্রিনসেভার সিগন্যাল নেই, তবে ব্যবহারের জন্য অন্য একটি ইন্টারফেস পাওয়া গেছে)।

ইন ~/.config/autostart/, আমার কাছে একটি .ডেস্কটপ ফাইল রয়েছে যা বাশ স্ক্রিপ্ট শুরু করে:

$ cat ~/.config/autostart/mymonitor.desktop
[Desktop Entry]
Categories=System;Monitor;
Comment=Monitor dbus for unlock signals
Exec=/usr/local/bin/unlock_monitor
Name=unlock_monitor
Type=Application

unlock_monitorমনিটর স্ক্রিপ্ট থেকে dbus, বার্তা সার্চ com.canonical.Unity.Sessionএবং এর উপাদান আছে Unlockedসংকেত:

#!/bin/bash

dbus-monitor --session "type=signal,interface=com.canonical.Unity.Session" --profile \
| while read dbusmsg; do
    if [[ "$dbusmsg" =~ Unlocked$ || "$dbusmsg" =~ NameAcquired$ ]] ; then
        sleep 5
        notify-send "$(basename $0)" "Unlocked or freshly logged in..."
        # ...
    fi
done

লগ ইন করার সময়, কোনও "আনলকড" সংকেত নেই, তবে শুরু হওয়ার সাথে সাথে সেখানে একটি "নেমঅ্যাকর্ডার্ড" সংকেত রয়েছে dbus-monitor


0

আপনি স্টার্ট-স্টপ-ডেমন ব্যবহার করে একটি স্ক্রিপ্ট চালাতে পারেন। স্টার্ট-স্টপ-ডেমন থ্রেডকে বিভিন্ন ইউআইডি এবং জিড হিসাবে চলমান কাঁটাচামচ করতে পারে, সুতরাং আপনার সমস্যার সমাধান করে।

আপনাকে যা করতে হবে তা হ'ল সিস্টেম প্যাথের মতো লাইব স্ক্রিপ্ট লিখতে /usr/binএবং এর জন্য একটি অতিরিক্ত ডেমন স্ক্রিপ্ট তৈরি করা /etc/pm/sleep.d। এর pm-suspendমতো ম্যাচিং অ্যাকশন resumeবা thawডেমন স্ক্রিপ্ট এর মাধ্যমে কাজের স্ক্রিপ্টটি কমিট করে

start-stop-daemon --start $ARGs --name nm-rtvt--exec /usr/bin/job_script

যেখানে বা ন্যায়বিচার ARGsহতে পারে ।--chuid 1001:1001--user your_username

এবং অখণ্ডতার জন্য, আপনি একইভাবে ডিমন স্ক্রিপ্টটি nm-rtvtস্থগিতের আগে নামকরণ করা বন্ধ করা বন্ধ করতে চান

start-stop-daemon --stop <...>

pm-suspendমত ম্যাচের ক্রিয়া suspendবা hibernate

বিশদ জন্য man start-stop-daemon,। এবং /etc/init.dডেমন স্ক্রিপ্টগুলির মধ্যে আরও অনেক উদাহরণ রয়েছে ।

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