2009-03-12 18 views
36

क्या यह पता लगाने का कोई तरीका है कि वर्तमान सत्र उपयोगकर्ता Xserver (Linux के अंतर्गत) चला रहा है या नहीं?एक्स सर्वर चल रहा है या नहीं जांचें?

I'v जैसी चीजों के साथ शुरुआत की:

ps -e | grep X 

लेकिन यह हमेशा काम नहीं करता है

और एक और बात मैंने कोशिश की जाँच कर रहा है $DISPLAY चर

हैं किसी भी अन्य वहाँ इसे जांचने के तरीके?

संपादित करें: कुछ लोगों ने $ DISPLAY चर का उपयोग करने का सुझाव दिया लेकिन यदि उपयोगकर्ता इस चर के साथ झुका हुआ है तो क्या होगा? क्या होगा यदि वह कुछ करने की कोशिश करता है और इस चर को बदलता है और फिर जब मैं इसे जांचता हूं, तो यह अब सिस्टम की सटीक स्थिति को प्रतिबिंबित नहीं करता है। क्या ऐसा करने का कोई विशिष्ट तरीका नहीं है जो हमेशा सही उत्तर देगा?

मैंने पाया कि यह प्रोग्राम के इस प्रकार किया जा सकता है:

#include <X11/Xlib.h> 
int main() 
    { exit(XOpenDisplay(NULL) ? 0 : 1); } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

लेकिन मैं एक स्क्रिप्ट तरीका के लिए देख रहा हूँ।

+1

क्यों नहीं देता है "ps -e | grep X "हमेशा काम करते हैं? – stephendl

+2

और $ DISPLAY काम क्यों नहीं करता है? –

+0

@stephendl: मैंने पाया कि कुछ स्थितियों में एक्स चल रहा है लेकिन उपयोगकर्ता टर्मिनल के माध्यम से कोई एक्स @matthew के साथ जुड़ा हुआ है: क्या होगा यदि उपयोगकर्ता fiddles यह चर और यह अब सिस्टम की वास्तविक स्थिति को प्रतिबिंबित नहीं करता है? –

उत्तर

6

मैं उपयोग

pidof X && echo "yup X server is running" 

pgrep और $ प्रदर्शन अन्य विकल्प हैं।

अन्य विचार:

सु तो $ प्रदर्शन सेट नहीं किया जाएगा। जो प्रोग्राम चल रहे प्रोग्राम के पर्यावरण को बदलते हैं, वे इसे काम नहीं कर सकते हैं।

मैं ps -e की सिफारिश नहीं करता हूं। grep एक्स के रूप में यह procX मिलेगा, जो एक्स सर्वर नहीं है।

+0

यह पीएस के समान नहीं है - e | grep एक्स? AFAIK pidof killall5 के लिए सिर्फ एक उपनाम है और हमेशा सभी सिस्टम –

+0

पर परिभाषित नहीं किया गया है मेरा अद्यतन उत्तर देखें। –

+0

मैन पिडॉफ से: "पिडॉफ वास्तव में killall5 के समान प्रोग्राम है; कार्यक्रम उस नाम के अनुसार व्यवहार करता है जिसके अंतर्गत इसे कहा जाता है। " पिडॉफ killall5 से अलग व्यवहार करता है। यदि आप पुराने पुराने यूनिक्स सिस्टम का उपयोग कर रहे हैं तो यह वहां नहीं हो सकता है। –

15

$ DISPLAY मानक तरीका है। इस प्रकार उपयोगकर्ता प्रोग्राम के साथ संवाद करते हैं कि किस एक्स सर्वर का उपयोग करना है, यदि कोई हो।

+0

लेकिन यदि उपयोगकर्ता इस चर के साथ झुकाता है तो क्या होगा? यदि वह कुछ करने की कोशिश करता है और इस चर को बदलता है और फिर जब मैं इसे जांचता हूं, तो यह अब सिस्टम की सटीक स्थिति को प्रतिबिंबित नहीं करता है। क्या कोई ठोस तरीका नहीं है ऐसा करें? –

+2

यदि मैं $ DISPLAY सेट करता हूं, तो ऐसा इसलिए है क्योंकि मैं चाहता हूं कि आपका प्रोग्राम एक अलग डिस्प्ले पर जाएं। आपका उपयोग केस वास्तव में क्या है जहां आप उपयोगकर्ता की स्पष्ट कॉन्फ़िगरेशन का अनुमान लगा सकते हैं? क्या आप $ HOME का उपयोग करने से बचते हैं उस उपयोगकर्ता के साथ "फिडल्स" भी? यह कहां खत्म होता है? – Ken

+0

मैं दूसरा अनुमान नहीं चाहता, बस बुलेट प्रूफ। उपयोग केस ड्राइवर चालक के लिए है, पूर्वापेक्षाएँ में से एक x चल रहा है। और मैं $ HOME का उपयोग करने से नहीं बचूंगा लेकिन बीमार यह पहले एक मौजूदा निर्देशिका को इंगित करता है कि केवल ^^ –

6

एक चाल मैं अगर एक्स चल रहा है यह बताने के लिए उपयोग करते हैं:

टेलनेट 127.0.0.1 6000

यदि यह जोड़ता है, आपके द्वारा चलाए जा एक एक्स सर्वर और उसके स्वीकार करने भीतर का TCP कनेक्शन नहीं आमतौर पर डिफ़ॉल्ट है (इन दिनों) ....

+0

मुझे लगता है कि वर्तमान में, सुरक्षा-जागरूक प्रणालियों में 'टेलनेट' कमांड उपलब्ध नहीं होगा। – boardrider

3

1)

 
# netstat -lp|grep -i x 
tcp  0  0 *:x11     *:*      LISTEN  2937/X   
tcp6  0  0 [::]:x11    [::]:*     LISTEN  2937/X   
Active UNIX domain sockets (only servers) 
unix 2  [ ACC ]  STREAM  LISTENING  8940  2937/X    @/tmp/.X11-unix/X0 
unix 2  [ ACC ]  STREAM  LISTENING  8941  2937/X    /tmp/.X11-unix/X0 
# 

2) nmap

 
# nmap localhost|grep -i x 
6000/tcp open X11 
# 
38

मुझे अक्सर कई एक्स सर्वर चलाने वाले सर्वर पर एक्स कमांड चलाने की आवश्यकता होती है, इसलिए ps आधारित उत्तर काम नहीं करते हैं। स्वाभाविक रूप से, $DISPLAY उचित रूप से सेट किया जाना है। कि जो मान्य है की जाँच करने के लिए, जैसे कुछ टुकड़ा में xset q का उपयोग करें:

if ! xset q &>/dev/null; then 
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2 
    exit 1 
fi 
+0

मुझे लगता है कि 'xprop' और 'xdpyinfo' का उपयोग करने से यह" बेहतर "है क्योंकि' xset' खाने के लिए'/dev/null' के लिए कम आउटपुट उत्पन्न करता है। ओपी को यह जवाब स्वीकार करना चाहिए। – jamadagni

4

रन xdpyinfo करें और देखें कि यह देता है एक शून्य

2
xprop -root &> /dev/null 

..."एक्स-सक्षम" स्थिति के परीक्षण के लिए मेरी कोशिश की गई & सच्ची कमांड है। और, यह एक्स चलाने वाले किसी भी सिस्टम पर होने की बहुत अधिक गारंटी है, बेशक, कमांड विफल होने पर विफल रहता है, इसलिए यदि यह अस्तित्व में नहीं है, तो भी आप बहुत अधिक मान सकते हैं कि कोई एक्स नहीं है। (यही कारण है कि मैं &> के बजाय>

+0

'dash' के अंतर्गत चलने वाली शैल स्क्रिप्ट में उपयोग के लिए ''>> ''>> का समर्थन नहीं करता है, कोई भी '>/dev/null 2> और 1' का उपयोग कर सकता है। – jamadagni

+0

साइगविन पर एक्स स्थापित करने के लिए एक सामान्य तरीका पैकेज 'xinit' स्थापित है। इसलिए, 'xprop' स्वचालित रूप से स्थापित नहीं है क्योंकि यह निर्भरता नहीं है। –

0

मैंने xdpyprobe प्रोग्राम लिखा जो इस उद्देश्य के लिए है। Xset, xdpyinfo और अन्य सामान्य उपकरण के विपरीत, यह कोई अतिरिक्त क्रिया नहीं करता है (केवल एक्स सर्वर और निकास की जांच करता है) और यह किसी भी आउटपुट का उत्पादन नहीं कर सकता है (यदि "-q" विकल्प निर्दिष्ट है)।

0

यह जांच के लिए PHP स्क्रिप्ट है।

$xsession = `pidof X`; 
if (!$xsession) { 
    echo "There is no active X session, aborting..\n"; 
    exit; 
} 

इसी तरह की कमांड शेल स्क्रिप्ट में भी उपयोग की जा सकती है। pidof कमांड की तरह।

rpm -qa | grep xorg-x11-xauth 

नहीं तो, कृपया सभी संकुल स्थापित कर लेते हैं:

sudo yum install xorg-x11-xauth xterm 

सुनिश्चित करें कि OpenSSH सर्वर अग्रेषित करने के लिए कॉन्फ़िगर किया गया है

1

सबसे पहले आप मूलभूत X11 संकुल सुनिश्चित करने के लिए सही ढंग से अपने सर्वर पर स्थापित कर रहे हैं की जरूरत है x11 कनेक्शन:

edit file : vim /etc/ssh/sshd_config 

X11Forwarding yes 

नोट: यदि वह रेखा पी है एक टिप्पणी (#) से हटा दी गई है या उपरोक्त से मेल खाने के लिए फ़ाइल को अपडेट करें, और अपने एसएसएच सर्वर डिमन को पुनरारंभ करें (यहां सावधान रहें - अगर आपने कोई त्रुटि की है तो आप सर्वर से खुद को लॉक कर सकते हैं)

sudo /etc/init.d/sshd restart 

अब, X11 अनुरोध भेजना SSH आवेदन कॉन्फ़िगर करें:

ssh -Y [email protected]_server.your_domain.com 
संबंधित मुद्दे