এক্স নাম্বারটি দিয়ে আমাকে যে নম্বরটি অর্পণ করা হয়েছিল তা কীভাবে পাবেন


20

এক্স (7) ম্যান পেজ থেকে

DISPLAY NAMES
       From the user's perspective, every X server has a display name of the form:

                                  hostname:displaynumber.screennumber
[...]

displaynumber
    [...]
    To avoid confusion, each display on a machine is assigned a display
    number (beginning at 0) when the X server for that display is started.

আমাকে অর্পণ করা ডিসপ্লে নম্বরটি কীভাবে খুঁজে পাব?

অথবা তালিকাটি বর্তমানে খোলা প্রদর্শন এবং তাদের ব্যবহারকারীদের তালিকাবদ্ধ করবেন?

উত্তর:


29

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

cat /proc/$pid/environ | tr '\0' '\n' | grep '^DISPLAY='

উদাহরণস্বরূপ, বর্তমান কম্পিউটারে আপনার ইউআইডি দ্বারা ব্যবহৃত সমস্ত প্রধান প্রদর্শন তালিকার জন্য, ব্যবহার করুন:

ps -u $(id -u) -o pid= | \
    while read pid; do
        cat /proc/$pid/environ 2>/dev/null | tr '\0' '\n' | grep '^DISPLAY=:'
    done | grep -o ':[0-9]*' | sort -u

আপনি যদি কেবলমাত্র একটি এক্স সেশনে লগইন করেন তবে উপরেরটির মতো একটির সাথে একটি মাত্র লাইন আউটপুট করা উচিত :0


দ্রষ্টব্য: আপনি যদি এটি এক লাইনে ব্যবহার করতে চান তবে আপনাকে এর ;আগে একটি যুক্ত করতে হবে done
not2qubit

@ ব্যবহারকারী ১১47476868৮৮ ধন্যবাদ, তবে একটি নতুনলাইন চরিত্র ঠিক তেমনি কাজ করে, কমপক্ষে আমি যে শেলগুলি ব্যবহার করি (ব্যাশ এবং ড্যাশ) in
আমির

ব্রিল্যান্ট! ধন্যবাদ। আমি এটি unix.stackexchange.com/a/429162/12574 এর জন্য কিছু উন্নতি সহ চুরি করেছি ;)
গিলস কুইনট

11

এক্স সেশনে, DISPLAYআপনি বর্তমান প্রদর্শন নম্বর ( echo $DISPLAY) পেতে সর্বদা পরিবেশের পরিবর্তনশীলের সাথে পরামর্শ করতে পারেন ।

তা খুঁজে বের অন্যের প্রদর্শন সংখ্যার কঠোর হয়। আমি মনে করি না যে সমস্ত ব্যবহারকারীর সাথে তারা সংযুক্ত রয়েছে তার প্রদর্শন জিজ্ঞাসা করা ছাড়াও তথ্য পাওয়ার কোনও স্ট্যান্ডার্ড উপায় আছে, সুতরাং এই তথ্য অর্জনের যে কোনও প্রয়াসে কিছু প্রকারের হ্যাকারি প্রয়োজন এবং এটি সমস্ত ক্ষেত্রে কাজ করবে না।

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

ps axu | grep "X " নিম্নলিখিত ক্রিয়াকলাপগুলি বর্তমানে আপনাকে চালিত হওয়া এক্স প্রসেসগুলি দেখাবে:

root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:58 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a

এর পরে প্রথম প্যারামিটারটি /usr/bin/Xহ'ল কোলন দ্বারা উপস্থাপিত প্রদর্শন নম্বর এবং পরেরটিটি আপনাকে সেশনে নির্ধারিত ভার্চুয়াল টার্মিনালটি দেখায়।

প্রক্রিয়া তালিকাটি দেখে আপনি উত্তর পেতে পারেন, যদিও:

ps axu |grep -3 "X "

root      1990  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1991  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1992  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      2359  0.0  0.0   5264  2228 ?        S    Sep15   0:00 -:1            
user_1     2378  0.0  0.0   4920  1348 ?        Ss   Sep15   0:00 /bin/sh /usr/bin/startkde
user_1     2443  0.0  0.0   3868   348 ?        Ss   Sep15   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-kde-session
--
root      7500  0.0  0.0   6460  1080 ?        Ss   Sep14   0:00 /usr/sbin/sshd
ntp       7841  0.0  0.0   5352  1760 ?        Ss   Sep14   0:17 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111
root      7882  0.0  0.0   3964   716 ?        Ss   Sep14   0:00 /usr/bin/kdm -config /var/run/kdm/kdmrc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:59 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a
root      7906  0.0  0.0   5260  2224 ?        S    Sep14   0:00 -:0            
user_2    7925  0.0  0.0  12924  1560 ?        Ssl  Sep14   0:00 /usr/bin/lxsession -s LXDE -e LXDE
user_2    7990  0.0  0.0   3868   348 ?        Ss   Sep14   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/startlxde

তারপরে লাইনগুলি দেখুন /usr/bin/X- এক্স সেশন শুরু হওয়ার সাথে সাথে একটি উইন্ডো ম্যানেজার সাধারণত সেশনটির অন্তর্ভুক্ত ব্যবহারকারী হিসাবে শুরু হয় এবং সেখানে আপনি ব্যবহারকারীর নাম পান। আমার ক্ষেত্রে ব্যবহারকারী_1 কেডিএ ব্যবহার করছে এবং ব্যবহারকারী ৩ এলএক্সডিই ব্যবহার করছে। যাইহোক, এই সমাধানটি সম্পূর্ণরূপে নির্ভর করে যে কার্নেলটি আরোহী ক্রম অনুসারে নতুন প্রক্রিয়া আইডি নির্ধারণ করে যা ঘটতে পারে না।


ধন্যবাদ, DISPLAY এর সাথে পরামর্শ করা উত্তরটি আমার মনে হয়। তবে, ডিসপ্লে ভেরিয়েবল পুরানো হতে পারে। স্ক্রিন সেশনে পুনরায় সংযোগ করার সময় আমার সাথে এটি ঘটেছিল । এটি গ্রাফিকাল জিনিসগুলি কাজ না করার কারণ ঘটায়। আমি এটি আলাদা করে, DISPLAY প্রতিধ্বনিত করে, পুনরায় সংযুক্ত করে এবং DISPLAY কে নতুন মান হিসাবে সেট করে সমাধান করেছি।
রাকব

লিনাক্স প্রতিটি প্রক্রিয়ার পরিবেশকে /proc/$pid/environযেমন অন্তর্গতভাবে প্রকাশ করে cat /proc/$$/environ | tr '\0' '\n' | grep '^DISPLAY='। অন্য উত্তর ব্যবহারের জন্য আমার উত্তর দেখুন।
আমির

2

who& গ্রেপের উপর ভিত্তি করে এই উত্তরের একটি ওয়ান-লাইনার রয়েছে

/ubuntu//a/230838/152287

who সংক্ষেপে হিসাবে চিহ্নিত করা যেতে পারে w

মান পেতে আপনি ওয়ান-লাইনার সহ লিঙ্কটিতে আরও পড়তে পারেন।

এটা কাজ করে। এখানে রাস্পবেরিপি (রাসবিয়ান) আউটপুট রয়েছে, যেখানে ডিসপ্লে মানটি FROM কলামে রয়েছে

tim@raspberrypi:~ $ w
 19:19:30 up  8:15,  2 users,  load average: 0.12, 0.11, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
pi       tty7     :0               11:04    8:15m  1:15   0.89s /usr/bin/lxsess
tim      pts/0    192.168.0.29     19:17    0.00s  1.00s  0.09s w

1

https://gitorious.org/termsql/pages/Home

termsql এর মতো তথ্য আহরণের জন্য একটি ভাল সরঞ্জাম।

ডিজেল নম্বর সন্ধান করা উদাহরণগুলির মধ্যে একটি:

export DISPLAY=$(ps aux | termsql "select COL11 from tbl where COL10 like '%Xorg.bin%' limit 1")

(এক্স বাইনারি বলা হয় ধরে নেওয়া, এখনই এক্সপ্রেস এক্সটি কী চলছে তার সাথে পরিবেশের পরিবেশের পরিবর্তনশীল সেট করুন Xorg.bin)


1

আমিরের উত্তরে একটি সামান্য প্রকরণ।

ps eপ্রতিটি কমান্ডের পরিবেশকে আউটপুট দেবে, স্থান পৃথক করা হবে যাতে সরাসরি sed/ প্রোপ / পিআইডি / এনভায়রনমেন্ট পড়ার চেয়ে সহজ কমান্ড দিয়ে ডিআইএসআইপি ফিল্টার করার জন্য এটি সরাসরি চলে যেতে পারে । (অন্যান্য ব্যবহারকারীর পরিবেশ পড়ার জন্য আপনাকে এখনও মূল অনুমতি প্রয়োজন, যদিও))

এই কোডটি এক্স সেশন সহ সমস্ত লগ-ইন করা ব্যবহারকারীদের নাম এবং তাদের ডিসপ্লে নম্বর আউটপুট দেবে:

#!/bin/bash
declare -A disps usrs
usrs=()
disps=()

for i in $(users);do
    [[ $i = root ]] && continue # skip root
    usrs[$i]=1
done # unique names

for u in "${!usrs[@]}"; do
    for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do
        disps[$i]=$u
    done
done

for d in "${!disps[@]}";do
    echo "User: ${disps[$d]}, Display: $d"
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.