ব্যবহারকারীর ডেস্কটপ লোড হওয়ার পরে স্ক্রিপ্ট থেকে কীভাবে সনাক্ত করবেন?


11

আমার একটি ডেমন রয়েছে, ব্যাশ এবং প্রয়োগের মাধ্যমে প্রয়োগ করা হয়েছে cronএবং @rebootবিকল্পটি রয়েছে যা ডেস্কটপটিকে নিষ্ক্রিয়তায় দেখায়। স্ক্রিপ্টটি নিম্নলিখিত হিসাবে রয়েছে (পরীক্ষার উদ্দেশ্যে সময় সংক্ষিপ্ত):

#!/bin/bash
P_STATE=0
while :
do
    sleep 5
    if [ $P_STATE == 0 ]; then
         [ `xprintidle` -ge 25000 ] && P_STATE=1 && wmctrl -k on
    else
         [ `xprintidle` -le 25000 ] && P_STATE=0
done

সমস্যা: উদাহরণস্বরূপ, কোনও ব্যবহারকারী যদি লগইন স্ক্রিনে থাকে xprintidleএবং wmctrlডেস্কটপটি এখনও লোড না হওয়ায় ব্যর্থ হয়। এটি এড়াতে, আমি স্ক্রিপ্টের একেবারে শুরুতে পরবর্তী লাইনগুলি রেখেছি:

while:
do
    sleep 10s
    [ -n `who | grep "$USER"` ] && break
done

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

কোনও ব্যবহারকারী ইতিমধ্যে "ডেস্কটপ মোড দেখানোর" সক্ষম "গ্রাফিকাল" সেশনে আছেন কিনা তা আমি কীভাবে নির্ধারণ করতে পারি? এবং তদ্ব্যতীত, কীভাবে আমি নিশ্চিত করতে পারি যে একটি "গ্রাফিকাল" সেশনটি সম্পূর্ণ লোড হয়েছে এবং লোডিংয়ের প্রক্রিয়াতে বা এর মতো কিছু নেই?

আমার সমাধান: আমার (অনানুষ্ঠানিক) সমাধানটি মূল লুপটিতে যুক্ত করছে grep:

WAIT_TIME=180

while:
do
    sleep $WAIT_TIME

    [ ! -n "`ps -ef | grep "$WM_CMD" | grep -v "grep"`" ] && continue

    ## My actions here
done

টার্গেট উইন্ডোজ ম্যানেজার কমান্ড "$ WM_CMD" হচ্ছে । আমি ধরে নিলাম, যদি উইন্ডোজ ম্যানেজার কমান্ডটি সিস্টেমে চলমান থাকে তবে এর অর্থ ডেস্কটপ পুরোপুরি লোড হয়েছে এবং কোনও "গ্রাফিক" কমান্ড নিশ্চিত is

ডাব্লুএম_সিএমডি ভেরিয়েবল কোথায় সংজ্ঞায়িত হয়? ইন crontabলাইন:

 @reboot DISPLAY=:0 WM_CMD=/usr/bin/gnome-shell exec script_path/myscript.sh &> /dev/null

তবে আমিও মনে করি যে অন্যান্য সিস্টেমের অনুরোধের মাধ্যমে "উইন্ডোজ ম্যানেজার কমান্ড" সনাক্ত করা সম্ভব হবে। যাইহোক, আমার জন্য ক্রোনটব ফাইলে ডাব্লুএম_সিমিডি সংজ্ঞা দেওয়া যথেষ্ট।


আপনি কোন লগইন ম্যানেজার ব্যবহার করছেন?
এমটাহেমেড

আমার লগইন পরিচালক হলেনlightdm
পেরেগ্রিং-এলকে

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

1
এটি বিশেষভাবে শক্তিশালী নয়, তবে আপনি জিনোম /
কেডিএ

1
উত্তর হিসাবে আপনি যা করেছেন তা আপনার ডকুমেন্ট করা উচিত; এটি অন্যকে সহায়তা করতে পারে।
জেসনওয়ারিয়ান

উত্তর:


2

logindপরিষেবা থেকে সেশন তথ্য জিজ্ঞাসা করতে ডি-বাস ব্যবহার করার চেষ্টা করুন । এটা আছে org.freedesktop.login1.Managerমত বিভিন্ন সংকেত ইন্টারফেস SessionNewএবং SeatNeworg.freedesktop.login1.Seatএবং org.freedesktop.login1.Userইন্টারফেস। এটি সেশন / আসন / ব্যবহারকারী অবস্থা পেতে সহায়তা করতে পারে can


1

আপনার ~/.xprofileজন্য কিছু পতাকা ফাইল তৈরি করতে লগইন সেশন স্টার্টআপ স্ক্রিপ্ট ব্যবহার করুন । তা হয়ে যান ~/.xlogin_flag, তারপরে আপনার অন্য স্ক্রিপ্টে inotifywatchপ্যাকেজ inotify-toolsথেকে এটি তৈরি, ছোঁয়া বা মুছে ফেলা দেখতে ব্যবহার করুন ।


1

wকমান্ডের আউটপুট পরীক্ষা করুন । আপনি লগইন @ ক্ষেত্রে লগইন প্রকার (এক্স ডিসপ্লে) দেখতে পাবেন।


1

আমি মনে করি X11- তে কোনও ব্যবহারকারী সংযুক্ত আছে কিনা তা যাচাই করার সহজ উপায় হ'ল $HOME/.xsession-errorsআপনি গ্রাফিকভাবে লগইন করার সময় থেকে যে প্রক্রিয়ায় লিখেছেন সেগুলি পরীক্ষা করা, আপনি যে সমস্ত স্ট্যাডারকে সেখানে পুনঃনির্দেশিত করেছেন।

অন্যথায় কেবল wকমান্ডটি ব্যবহার করুন , যেমন @ গ্রজেগোর্জ ইতিমধ্যে পরামর্শ করেছিলেন: FROMকলামটি শুরু হলে :এটি গ্রাফিকাল সেশন হয়।


0

লাইটডেমের রানটাইম ডিরেক্টরিটি পরীক্ষা করে দেখুন। সিস্টেমেড এবং লাইটডিএম সহ আর্কে, যখন কোনও ব্যবহারকারী লগ ইন করে, একটি xauthority ফাইল তৈরি হয়।

$ whoami
carl
$ sudo ls -al /run/lightdm/carl
total 4
drwx------ 2 carl    carl     60 Dec 11 19:40 .
drwx--x--x 8 lightdm lightdm 160 Dec 11 19:40 ..
-rw------- 1 carl    carl     55 Dec 11 19:40 xauthority

আপনি নিজের লুপটিতে এরকম কিছু দিয়ে পরীক্ষা করতে পারেন।

[[ -f /run/lightdm/${USER}/xauthority ]] && continue
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.