unityক্য - স্ক্রিনটি তালাবদ্ধ থাকলে কীভাবে সনাক্ত করবেন?


9

এই দু'টিই কেবল লক হওয়া পর্দার ফাঁকা হয়ে যাওয়ার পরে কাজ করে; তবে এগুলি কখনও কখনও ব্যর্থ হয়, যখন কোনও কারণে পর্দা ফাঁকা থাকে না ...

gnome-screensaver-command --query
gnome-screensaver-command --time

আমি চেষ্টা করেছিলাম qdbus:

qdbus org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActiveTime

তবে এটি সমানভাবে ব্যর্থ হয়েছিল।

আমি সবেমাত্র পেয়েছি যে কে আসলে পর্দা তালা দেয় isক্য!

qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.Lock

সম্পর্কিত প্রশ্ন:
/unix/28181/run-script-on-screen-lock-unlock /unix/80143/how-to-create-a- ডেমন যা-হবু-শোনা-টু-dbus,-এবং-আগুন-স্ক্রিপ্ট-অন-messa

উত্তর:


6

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

শুধুমাত্র জিজ্ঞাসার লক অবস্থা

লক স্থিতির অনুসন্ধানের জন্য যদি আপনার কেবল ওয়ান-লাইনারের প্রয়োজন হয় তবে এটি তালাবদ্ধ এবং আনলক করা থাকলে মিথ্যা হিসাবে সত্য বলে মূল্যায়ন করা উচিত।

isLocked=$(gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "(true)|(false)")

সর্বশেষ পরিবর্তনের রাজ্যে লক অবস্থা এবং ট্র্যাকের সময় অনুসন্ধান করা

এখন আপনার যদি স্ক্রিনটি কতক্ষণ লক হয়ে থাকে তা ট্র্যাক করে রাখার প্রয়োজন হয় আপনি অন্যরকম পদ্ধতির গ্রহণ করতে চাইতে পারেন।

#!/bin/bash
# To implement this, you can put this at the top of a bash script or you can run
# it the subshell in a separate process and pull the functions into other scripts.

# We need a file to keep track of variable inside subshell the file will contain
# two elements, the state and timestamp of time changed, separated by a tab.
# A timestamp of 0 indicates that the state has not changed since we started
# polling for changes and therefore, the time lapsed in the current state is
# unknown.
vars="/tmp/lock-state"

# start watching the screen lock state
(
    # set the initial value for lock state
    [ "$(gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "(true)|(false)")" == "true" ] && state="locked" || state="unlocked"
    printf "%s\t%d" $state 0 > "$vars"

    # start watching changes in state
    gdbus monitor -e -d com.canonical.Unity -o /com/canonical/Unity/Session | while read line
    do 
        state=$(grep -ioP "((un)?locked)" <<< "$line")
        # If the line read denotes a change in state, save it to a file with timestamp for access outside this subshell
        [ "$state" != "" ] && printf "%s\t%d" ${state,,} $(date +%s)> "$vars"
    done
) & # don't wait for this subshell to finish

# Get the current state from the vars exported in the subshell
function getState {
    echo $(cut -f1 "$vars")
}

# Get the time in seconds that has passed since the state last changed
function getSecondsElapsed {
    if [ $(cut -f2 "$vars") -ne 0 ]; then
        echo $(($(date +%s)-$(cut -f2 "$vars")))
    else
        echo "unknown"
    fi
}

মূলত, এই স্ক্রিপ্টটি স্ক্রিনের লক অবস্থায় পরিবর্তনগুলির জন্য নজর রাখে। যখন পরিবর্তনগুলি হয়, সময় এবং রাজ্য একটি ফাইলে ফেলে দেওয়া হয়। আপনি আমার লেখা ফাংশন পছন্দ করেন বা ব্যবহার করেন তবে আপনি এই ফাইলটি ম্যানুয়ালি পড়তে পারেন।

আপনি যদি সেকেন্ডের সংখ্যার চেয়ে টাইমস্ট্যাম্প চান তবে চেষ্টা করুন:

date -ud @$(getSecondsElapsed) | grep -oP "(\d{2}:){2}\d{2}"

-uস্যুইচটি ভুলে যাবেন না যা তারিখ প্রোগ্রামটিকে আপনার সময় অঞ্চলটিকে উপেক্ষা করতে বাধ্য করে।


অবশেষে এটি পরীক্ষা করতে পারে, THX! আমার নিজের উত্তরটি কেন আমি নিজের উত্তর মেনে নিতে চাই না তা কেন এত ভাল জিনিস পরে আসতে পারে :)
কুম্ভ শক্তি

1
এর জন্য grep -ioP "(true)|(false)", এটিও কাজ করে:grep -oE "true|false"
wjandrea

5

স্ক্রিনটি আসলে ityক্য দ্বারা লক করা আছে এবং, আমাদের ব্যবহার করা দরকার gdbus

gdbus monitor -e -d com.canonical.Unity -o /com/canonical/Unity/Session

এটি যখন লক হয়ে যায় তখন এটি প্রদর্শিত হবে:

/com/canonical/Unity/Session: com.canonical.Unity.Session.LockRequested ()
/com/canonical/Unity/Session: com.canonical.Unity.Session.Locked ()
/com/canonical/Unity/Session: com.canonical.Unity.Session.UnlockRequested ()
/com/canonical/Unity/Session: com.canonical.Unity.Session.Unlocked ()

আমি খুব পরিচিত নই, তবে মনিটরিং না করে কীভাবে এটি করব? যেমন জিজ্ঞাসা করছি?
নোটিডার্ট

1
আমি খুঁজে পেল একমাত্র বিকল্প ছিল এটি পর্যবেক্ষণ রাখা (কেবল জিজ্ঞাসা করার কোনও উপায় থাকতে পারে, তবে আমি চেষ্টা করেও সন্ধান করতে পারি না), আমার ধারণা এটি হ'ল পর্দা লক হওয়ার মুহুর্তটি কোথাও সংরক্ষণ করা হয়নি, তাই মনিটরটি এটি যখন ঘটে তখনই দেখাতে হবে।
কুম্ভ শক্তি পাওয়ার

মানে, খুব চেষ্টা করুন, যদি আপনি খুঁজে পান, আমাকে বলুন বা একটি উত্তর যুক্ত করুন: ডি
কুম্ভ শক্তি

আহা হাহা ওকে অসুস্থ এটি লিনাক্স আইএম উইন্ডোজ লোকের সাথে ভাল না লাগার চেষ্টা করুন: পি আই এম কেবল কিছু ক্রস ওএস স্টাফ কোডিং করছে যাতে ইন্টারনেটে অনুসন্ধান করা যায়।
Noitidart

1
@ নোটিডার্ট জিজ্ঞাসাবাট্টু. com/ a / 890802/ 46437 :)
কুম্ভ শক্তি

2

আমি এখানে একটি অনুরূপ প্রশ্ন ছিল

এবং আমার যে সহায়তা পেয়েছিল তা অ্যাকোয়ারিয়াস পাওয়ারের আগে যা বলেছিল তার অনুরূপ, ব্যাকগ্রাউন্ডে চালানো যায় এমন ব্যাশ স্ক্রিপ্ট ডিমনটিতে এটি অন্তর্ভুক্ত করা ছাড়া .. আমি এটি খুব সহায়ক বলে মনে করি। সুতরাং, আমার প্রশ্নটি দেখুন এবং উত্তর দিন এবং দেখুন এটি আপনাকেও সহায়তা করে কিনা।

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