আমি কি অন্য ব্যবহারকারীর ডেস্কটপে রুট হিসাবে কোনও গ্রাফিকাল প্রোগ্রাম চালু করতে পারি?


39

নিম্নলিখিত অন্যান্য প্রশ্নগুলি যা আমার মনে হয় আমার জানা উচিত:

  • নন এক্স সেশন থেকে? (এর অর্থ মূলটি এক্স-এ প্রবেশ করা হয়নি)

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

  • আমি কি ব্যবহারকারী হিসাবে অ্যাপটি চালু করতে পারি? (ঠিক আছে আমি 99.999% নিশ্চিত এটি হ্যাঁ)

  • এক্স গ্রুপের ব্যবহারকারীরা এক্স-এ লগ ইন করেছেন কিনা তা আমি সনাক্ত করতে পারি?


যত্ন করে নিন naga_plugged.plস্ক্রিপ্ট শেষ (অথবা পটভূমি মধ্যে কাটাচামচ), কারণ udevপ্রস্থান করার জন্য এটি জন্য অপেক্ষা করা হবে না।
রোজিট্রিজেভিয়াচজ

ধন্যবাদ আমি সি কোডে ডেমনকে (0,0) কল করে ডেমোন তৈরি করেছি যা নাগা_প্লাগড.পিএল সর্বশেষে কল করে। আমি এখানে নতুন তাদের ইউনিক্স ফোরাম ছিল না। তাদের এটিকে নতুন ডোমেনের পরিবর্তে সমস্ত সাইট করা উচিত।
over_optimistic

উত্তর:


23

ব্যবহারকারীর ডেস্কটপে গ্রাফিক্যাল প্রোগ্রাম চালু করতে আপনার দুটি জিনিস খুঁজে বের করতে হবে: ব্যবহারকারীর ডেস্কটপটি কী প্রদর্শিত হবে (ঠিকানা) এবং কোন অনুমোদনের কুকি ব্যবহার করতে হবে (পাসওয়ার্ড)।

নিম্নলিখিত কমান্ডটি স্থানীয় প্রদর্শনগুলিতে তালিকাভুক্ত করা উচিত যা ব্যবহারকারীর বেশিরভাগ আনসেইনে লগইন হয় (প্রতি লাইনে একটি করে):

who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'

অনুমোদনের কুকি খুঁজে পাওয়া কিছুটা শক্ত। আপনাকে ব্যবহারকারীর কুকি ফাইলটি সন্ধান করতে হবে, এটি ~/.Xauthorityডিফল্টরূপে (আপনার কেবলমাত্র কুকি ফাইলের অবস্থান প্রয়োজন, এটি থেকে কুকিটি বের করার দরকার নেই)। এটি অনেক সিস্টেমে কাজ করে তবে সমস্তটি নয়; এটি ডিসপ্লে ম্যানেজার এবং এটি কীভাবে সেট আপ হয় তার উপর নির্ভর করে এবং বিশেষত জিডিএম (উবুন্টুতে ডিফল্ট) সর্বশেষে আমি দেখেছি ডিফল্ট অবস্থানটি ব্যবহার করে নি। আসল এক্স কুকি ফাইলটি খুঁজে পাওয়ার কোনও পোর্টেবল উপায় আমি ভাবতে পারি না। সর্বাধিক সঠিক উপায়টি X প্রক্রিয়ার পিড খুঁজে বের করা এবং -authবিকল্পটিতে যুক্তি সন্ধান করা । আর একটি উপায় হ'ল সেই এক্স সার্ভারে চলমান একটি প্রক্রিয়া খুঁজে পাওয়া এবং এর XAUTHORITYএনভায়রোনমেন্ট ভেরিয়েবলটি ধরা। আপনার যদি কুকি ফাইলটি খুঁজতে সমস্যা হয় তবে দেখুনএকটি রিমোট এক্স ডিসপ্লেতে একটি উইন্ডো খুলুন (কেন "প্রদর্শন খুলতে পারে না")?

আপনার কাছে উভয় টুকরো তথ্য হয়ে গেলে, DISPLAYপরিবেশিত পরিবর্তনশীলতে বাছাই করা প্রদর্শনটি, পরিবেশে পরিবর্তনশীল হিসাবে নির্বাচিত এক্স কর্তৃপক্ষের কুকি ফাইলটি রাখুন XAUTHORITYএবং আপনি সেট হয়ে গেছেন। প্রোগ্রামটি কোন ব্যবহারকারীর হিসাবে চলে তা বিবেচ্য নয়; suআপনি যদি চান সঙ্গে একত্রিত ।


আপনার "কীভাবে -aut বিকল্পের পক্ষে যুক্তি সন্ধান করবেন"?
rubo77

@ রুবো With psবা এর সাথে htopবা…
গিলস 'অশুভ হওয়া বন্ধ করুন'

ঠিক আছে, তাই pids=$(pgrep -u $target_user nautilus)পিড পায়, এবং আমি একটি -authবিকল্প আছে যেখানে আছে ?
rubo77

1
@ Rubo77 আপনি -authকোথাও একটি বিকল্প রাখেন না । XAUTHORITYএনভায়রনমেন্ট ভেরিয়েবলের মধ্যে কী রাখতে হবে তা নির্ধারণ করার জন্য আপনাকে এক্স সার্ভার প্রক্রিয়াটির কমান্ড লাইনে এটি সন্ধান করতে হবে । আপনার যদি ক্লায়েন্টের প্রক্রিয়া থাকে তবে আপনার যা প্রয়োজন তা -authclient ক্লায়েন্টের XAUTHORITYভেরিয়েবলের মান ছাড়া কিছুই নয় not আপনি কী করতে চাইছেন তা আমি বুঝতে পারছি না। আপনি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারেন।
গিলস 16'12


11

আমি সম্পূর্ণরূপে এটি চেষ্টা করতে পারি না কারণ আমার সমস্ত মেশিন রুট অক্ষম করেছে।

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

who | grep -m1 ^username.*\( | awk '{print $5}' | sed 's/[(|)]//g'

তারপরে সেই প্রদর্শনীতে একটি গ্রাফিকাল এক্স কমান্ড চালু করতে:

DISPLAY=:0 firefox &

যেখানে: প্রথম কমান্ডটিতে আপনি যা কিছু ডিসপ্লে পেয়েছেন সেটির সাথে 0 প্রতিস্থাপন করা হবে এবং আপনি যে কমান্ডটি চালাতে চান তাতে ফায়ারফক্স প্রতিস্থাপন করা হবে। আপনি এটি একটি শেল স্ক্রিপ্টে রাখতে পারেন এবং কেবল একটি ভেরিয়েবল ব্যবহার করতে পারেন।

পরের অংশটি সেই অংশটি যা আমি পরীক্ষা করে দেখিনি, তবে কেন এটি করা সম্ভব হবে না তা আমি দেখছি না:

su username -c "DISPLAY=:0 firefox"

ব্যবহারকারী হিসাবে এক্স কমান্ড চালু করতে।


1
রুট অক্ষম হওয়ার কারণে কেবল স্টাফগুলি রুট হিসাবে চালিত হয় না;) আসলে আমার এটি এটিকে মূল হিসাবে চলমান স্ক্রিপ্ট হিসাবে চালানো দরকার।
xenoterracide

@xenoterracide, ঠিক আছে। আমি কেবল বোঝাতে চাইছিলাম যে আমি এটি সমস্ত সম্ভাব্য পরিস্থিতিতে পরীক্ষা করতে পারছি না। অর্থাৎ, আমি এটি কেবল রুট হিসাবে ব্যবহার করে পরীক্ষা করেছি sudo -iএবং নিশ্চিত হতে পারি না যে সরাসরি রুট হিসাবে লগ ইন করার পরে ফলাফলগুলি চালানোর চেয়ে আলাদা হবে কিনা। :-)
স্টিভেন ডি

আমাকে কিছুটা পরিবর্তন করতে হয়েছিল। এটি who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$ কাজ করছে বলে মনে হচ্ছে ...
xenoterracide

ইতিমধ্যে চেইনে বিশ্রী থাকা অবস্থায় যে কেউ গ্রেপ এবং সেড ব্যবহার করে তা আমার বাইরে beyond

হ্যাঁ ... "শিখুন awk" কিছুক্ষণের জন্য আমার টুডো তালিকায় রয়েছে।
স্টিভেন ডি

4

আপনি কীভাবে এসপিড এটি দেখতে পারেন। উদাহরণস্বরূপ, যখন এটি এক্স স্ক্রিনসেভার কমান্ড জারি করে বা এক্স বা এক্স সেশন চলমান প্রতিটি ব্যবহারকারীর জন্য পর্দা ফাঁকা করে।

উদাহরণস্বরূপ উবুন্টুর নীচে এই ফাইলটিতে সম্পর্কিত স্টাফ রয়েছে:

/etc/acpi/lid.sh

এই লুপটি ধারণ করে:

for x in /tmp/.X11-unix/*; do
    displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
    getXuser;
    if [ x"$XAUTHORITY" != x"" ]; then
        export DISPLAY=":$displaynum"
        grep -q off-line /proc/acpi/ac_adapter/*/state
        if [ $? = 1 ]
            then
            if pidof xscreensaver > /dev/null; then 
                su $user -c "xscreensaver-command -unthrottle"
            fi
        fi
        if [ x$RADEON_LIGHT = xtrue ]; then
            [ -x /usr/sbin/radeontool ] && radeontool light on
        fi
        if [ `pidof xscreensaver` ]; then
            su $user -c "xscreensaver-command -deactivate"
        fi
        su $user -c "xset dpms force on"
    fi
done

বিশেষত, কোডটি ভিতরে রয়েছে /usr/share/acpi-support/power-funcs। এটি fgconsoleসক্রিয় লিনাক্স ভিটি সন্ধানের জন্য কল করে, তারপরে এই কনসোলে প্রদর্শিত একটি এক্স সার্ভারের সন্ধান করবে এবং সেখান থেকে ব্যবহারকারীর সন্ধান করবে। তারপরে এটি ~/.Xauthorityএক্স কুকি হিসাবে ব্যবহার করে , যার কিছু না পাওয়া যদি না বোঝায় যে এটি আসলে এক্স সার্ভারের সাথে সংযোগ স্থাপন করতে সক্ষম হবে না (জিডিএম ব্যবহার করে উবুন্টুর ডিফল্ট সেটআপ ব্যবহারকারীর ঘরে এক্স কুকি সংরক্ষণ করে না ডিরেক্টরি)।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলিস lid.sh উদাহরণস্বরূপ getXconsole কল করে না। সুতরাং, fgconsole ব্যবহার করা হয় না। আমার মনে থাকা স্নিপেটের সাথে উত্তরটি আপডেট করেছি। এবং এটি আসলে উবুন্টুতে কাজ করে। আমি idাকনাটি বন্ধ করলে স্ক্রিনটি ফাঁকা থাকে।
ম্যাক্সচলেপজিগ

1
উবুন্টু 14.04 এ আমি ত্রুটিটি getXuser: command not found
পেয়েছি

1

গিলিস উত্তরের একটি বর্ধন হ'ল কুকি ফাইলটি কীভাবে সন্ধান করা যায়। এটি করার একটি উপায় হতে পারে আপনি DISPLAYপরিবেশ পরিবর্তনশীল (গিলস দ্বারা বর্ণিত) সেট করার পরে , straceফাইল xhostঅ্যাক্সেস সন্ধান করতে ব্যবহার করুন। আমি বাসে এ জাতীয় কিছু ভাবতে পারি:

# Set the DISPLAY variable first
DISPLAY = :0.0
# Use strace on xhost
strace xhost 2>&1 | grep access

উপরের কোড থেকে আউটপুটটি দেখতে পাবেন:

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
access("/home/someuser/.Xauthority", R_OK) = 0

আপনি পরিষ্কারভাবে দেখতে পাচ্ছেন, কুকি ফাইলটি সরাসরি এখানে উপস্থিত হবে।


0

উদেব নিয়ম বা সুপার-ব্যবহারকারীর মতো সীমাবদ্ধ পরিবেশ থেকে জিইউআই বা এক্স টাস্ক প্রদর্শন করার জন্য আমার মার্জিত উপায় সন্ধানের ক্ষেত্রে, আমি সম্প্রতি এটির সাথে ফিট করার জন্য একটি সরঞ্জাম তৈরি করেছি ( আরও তথ্যের জন্য )।

xpub বর্তমান বা প্রদত্ত টিটিওয়াই সম্পর্কিত এক্স ডিসপ্লে পরিবেশের ভেরিয়েবলগুলি পেতে শেল স্ক্রিপ্ট।

এটি একটি ওদেব বিধি সহ একটি উদাহরণ:

IMPORT{program}="/usr/bin/xpub", \
RUN+="/bin/su $env{XUSER} -c '/usr/bin/notify-send Hello'"

$env{ENV}: যদি বর্তমান-টিটি-ব্যবহারকারীর এক্স শুরু হয়, অন্যথায় এটি সরিয়ে দিন।

কমান্ড-লাইনের সাহায্যে নীতিটি একই export:

export $(xpub) ; su ${XUSER} -c 'notify-send Hello'

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