क्या किसी मशीन पर सभी खुले डिस्प्ले को सूचीबद्ध करने की आज्ञा है?


76

जब SSH मेरे कंप्यूटर में स्थानीय रूप से पूछेगा (पूछें नहीं, तो यह वर्कअराउंड है), मैं बिना चलाए ग्राफ़िकल एप्लिकेशन शुरू नहीं कर सकता:

export DISPLAY=:0.0

यदि मैं इसे पहले चलाता हूं और फिर एक चित्रमय अनुप्रयोग चलाता हूं, तो चीजें काम करती हैं। यदि नहीं, तो यह काम नहीं करता है, इसमें संलग्न करने के लिए कोई प्रदर्शन नहीं है।

क्या मशीन पर सभी उपलब्ध डिस्प्ले (यानी: सभी संभव मान) सूचीबद्ध करने के लिए एक कमांड है?


एक टर्मिनल से एप्लिकेशन लॉन्च करने का एक क्लीनर तरीका है ( DISPLAY=:0 yourapp & )
नोबार

3
कमांड लाइन स्क्रिप्ट से वह डिस्प्ले नंबर प्राप्त करने के लिए, प्रयास करें w। अधिक जानकारी: मौजूदा एक्स प्रदर्शन नामों की सूची?
aexl

जवाबों:


80

यदि आप चाहते हैं कि SSH पर X कनेक्शन आगे बढ़ाया जाए, तो आपको इसे सर्वर साइड और क्लाइंट साइड दोनों पर सक्षम करना होगा। (वितरण के आधार पर, यह सक्षम हो सकता है या डिफ़ॉल्ट रूप से अक्षम।) सर्वर साइड पर, सुनिश्चित करें कि आपके पास बनाने X11Forwarding yesमें /etc/sshd_config(या /etc/ssh/sshd_configया जहां विन्यास फाइल है)। क्लाइंट की तरफ, कमांड-X को विकल्प पास करें , या अपने में डालें ।sshForwardX11~/.ssh/config

यदि आप दौड़ते हैं ssh -X localhost, तो आपको यह देखना चाहिए कि $DISPLAY(शायद) localhost:10.0। इसके विपरीत :0.0, जो कि वह मूल्य है, जब आप SSH से जुड़े नहीं होते हैं। ( .0भाग छोड़ा जा सकता है; यह एक स्क्रीन नंबर है, लेकिन कई स्क्रीन का उपयोग शायद ही कभी किया जाता है।) एक्स डिस्प्ले के दो रूप हैं जिनसे आपको कभी भी सामना होने की संभावना है:

  • स्थानीय प्रदर्शन, पहले कुछ भी नहीं है :
  • से पहले एक होस्टनाम के साथ, टीसीपी प्रदर्शित करता है :

इसके साथ ssh -X localhost, आप एक्स सर्वर को दोनों डिस्प्ले के माध्यम से एक्सेस कर सकते हैं, लेकिन एप्लिकेशन एक अलग विधि का उपयोग करेंगे: :NUMBERसर्वर को स्थानीय सॉकेट और साझा मेमोरी के माध्यम से HOSTNAME:NUMBERएक्सेस करता है , जबकि टीसीपी पर सर्वर का उपयोग करता है, जो धीमा है और कुछ एक्सटेंशन को निष्क्रिय कर देता है।

ध्यान दें कि आपको एक एक्स सर्वर तक पहुंचने के लिए प्राधिकरण के एक रूप की आवश्यकता होती है, जिसे कुकी कहा जाता है और आमतौर पर फ़ाइल में पर्दे के पीछे संग्रहीत किया जाता है ~/.Xauthority। यदि आप किसी भिन्न उपयोगकर्ता खाते तक पहुँचने के लिए ssh का उपयोग कर रहे हैं, या यदि आपका वितरण कुकीज़ को अलग फ़ाइल में रखता है, तो आप पा सकते हैं कि DISPLAY=:0यह SSH सत्र के भीतर काम नहीं करता है (लेकिन ssh -X, यदि यह सर्वर में सक्षम है, तो आप कभी नहीं। XAUTHORITYजब कर ssh -X) के साथ गड़बड़ करने की जरूरत है । यदि यह समस्या है, तो आपको पर्यावरण चर सेट करनेXAUTHORITY या अन्य उपयोगकर्ता की कुकी प्राप्त करने की आवश्यकता है

अपने वास्तविक प्रश्न का उत्तर देने के लिए:

  • स्थानीय डिस्प्ले एक सॉकेट के अनुरूप होता है /tmp/.X11-unix

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • रिमोट प्रदर्शित करता है 6000 से ऊपर टीसीपी पोर्ट खोलने के लिए; मशीन M पर डिस्प्ले नंबर N तक पहुँचने पर मशीन M से टीसीपी पोर्ट 6000 + N से जुड़कर किया जाता है। मशीन M से ही:

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (इस बुलेट प्वाइंट के बाकी हिस्से केवल शैक्षणिक हित के हैं।)

    किसी अन्य मशीन से, आप nmap -p 6000-6099 host_nameसामान्य सीमा में खुले टीसीपी पोर्ट की जांच करने के लिए उपयोग कर सकते हैं । यह आजकल दुर्लभ है कि एक्स सर्वरों को टीसीपी सॉकेट पर सुनना पड़ता है, खासकर लूपबैक इंटरफेस के बाहर।

    कड़ाई से बोलते हुए, एक अन्य एप्लिकेशन आमतौर पर एक्स सर्वर द्वारा उपयोग की जाने वाली सीमा में एक पोर्ट का उपयोग कर सकता है। आप बता सकते हैं कि क्या X सर्वर चेक करके सुन रहा है कि किस प्रोग्राम में पोर्ट ओपन है।

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    अगर वह कुछ अस्पष्ट दिखाता है sshd, तो यह सुनिश्चित करने का कोई तरीका नहीं है कि यह एक्स सर्वर है या संयोग।


15

प्रदर्शन पहला तर्क है Xorgpsफिर आप Xorgबाहर निकल सकते हैं।

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

इसके बाद awkआपको जहां भी प्रारूप की आवश्यकता होगी, आप इसे कर सकते हैं ।


10
यह Xorg, जैसे Xvnc के अलावा किसी सर्वर द्वारा बनाए गए डिस्प्ले का पता नहीं लगाता है ।
cjm

5
ps aux |grep Xमेरे लिए बेहतर काम किया
nobar

6
wलॉग-इन और उनके प्रदर्शन को सभी को दिखाता है।
प्लेनस फ्रेंक्ली

2
ध्यान दें कि Xorg का तर्क (कम से कम अब, 2016 में) वैकल्पिक है और (कम से कम फेडोरा पर) आम तौर पर अनुपस्थित है, इसलिए यह विधि अब बिल्कुल भी काम नहीं करती है।
BRPocock

अगर किसी कारणवश सिर्फ एनवायरनमेंट वर्जन सेट करने से काम नहीं चलेगा ... तो इसे कमांड में रखने की कोशिश करें DISPLAY=:0 netsurf "https://medium.com/"... या export DISPLAY=:0इस प्रक्रिया को वेरिएबल के साथ साझा करने के लिए उपयोग करें, न कि केवल शेल
रे फॉस

7
# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[संपादित करें: मैंने यह देखने के लिए एक ज़ेनस्ट उदाहरण चलाया कि क्या यह इसे पकड़ लेगा - यह नहीं है; यह केवल लॉगिन गोले को कैप्चर करता है ('डब्ल्यू' 'कौन' के लिए छोटा है)। मेरे लिए ड्राइंग बोर्ड पर वापस।] [संपादित करें: यह पाया गया:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]


1
यह अजीब है ... मुझे आश्चर्य है कि वहाँ क्या स्पष्टीकरण है।
5

(जीडीएम मेरे लिए 1024 पर चलने के संबंध में) मैं इसे दूसरी बार दोहरा नहीं सकता। उस समय मैं xrdp को आज़मा रहा था, X11 अग्रेषण और कुछ VNC क्लाइंट को विंडो किया। ऐसा लगता है कि एक विशिष्ट इंस्टॉलेशन में, GDM X0 ... या X1 पर चलेगा यदि आपने लॉक स्क्रीन पर "लॉग इन द अदर यूजर" बटन दबाया है। आपकी दूसरी विधि ने मेरे लिए फेडोरा 23
रे फॉस

मुझे आपके आदेश का उपयोग करते हुए डिस्प्ले 1024 पर कुछ मिला, लेकिन मुझे वहाँ कुछ भी नहीं दिख रहा है ... ps xeww | grep DISPLAY=:1024अब इसका उपयोग करना अजीब है। मैं डिस्प्ले 20 पर क्रोम-रिमोट-डेस्कटॉप चला रहा हूँ।
रे फॉस

wयदि कोई एप्लिकेशन एक्स सर्वर पर नहीं चल रहा है (कोई विंडो प्रबंधक और कोई डेस्कटॉप नहीं) सहित काम नहीं करता है। लेकिन ls /tmp/.X11-unixकाम करता है।
12431234123412341234123

3
ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

सभी मौजूदा प्रदर्शनों को सूचीबद्ध करके काम करेंगे। इसके अलावा, आप एक विशिष्ट उपयोगकर्ता ($ usr) के लिए निर्दिष्ट प्रदर्शन देख सकते हैं:

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

क्या वह दूसरा होने का मतलब है ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u?
एलेक्स रॉश

0

में /tmpफ़ोल्डर वहाँ भी हो सकता है .X??-lockके साथ फ़ाइलें ??सत्र संख्या का संकेत है।

यदि आप सत्र संख्या का पुन: उपयोग करना चाहते हैं, तो आपको इन्हें हटाने की आवश्यकता है।

आप इन्हें ls -aआम तौर पर .छुपी हुई फाइलों के रूप में उपयोग करके देख सकते हैं ।


वे प्रदर्शन सत्र हैं?
phk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.