( लिनक्स से अनुकूलित : sm + स्क्रीन के माध्यम से शुरू होने पर wmctrl प्रदर्शन नहीं खोल सकता है )
प्रदर्शन और स्वचालन
एक्स डिस्प्ले से कनेक्ट करने के लिए एक एक्स प्रोग्राम को दो टुकड़ों की जानकारी चाहिए।
इसे डिस्प्ले के पते की आवश्यकता होती है, जो आमतौर पर :0
जब आप स्थानीय रूप से लॉग इन करते हैं :10
, या :11
आदि, जब आप दूरस्थ रूप से लॉग इन होते हैं (लेकिन नंबर कितने एक्स कनेक्शन सक्रिय हैं इसके आधार पर बदल सकते हैं)। प्रदर्शन का पता सामान्य रूप से DISPLAY
पर्यावरण चर में इंगित किया गया है।
इसमें डिस्प्ले के लिए पासवर्ड की जरूरत होती है। एक्स डिस्प्ले पासवर्ड को मैजिक कुकीज कहा जाता है । मैजिक कुकीज को सीधे निर्दिष्ट नहीं किया जाता है: वे हमेशा एक्स अथॉरिटी फाइलों में संग्रहित होती हैं, जो "डिस्प्ले :42
में कुकी 123456
" के रूप के रिकॉर्ड का संग्रह होती हैं । X अथॉरिटी फ़ाइल को आमतौर पर XAUTHORITY
पर्यावरण चर में इंगित किया जाता है। यदि $XAUTHORITY
सेट नहीं है, तो प्रोग्राम उपयोग करते हैं ~/.Xauthority
।
आप अपने डेस्कटॉप पर प्रदर्शित होने वाली खिड़कियों पर कार्रवाई करने की कोशिश कर रहे हैं। यदि आप अपने डेस्कटॉप मशीन का उपयोग करने वाले एकमात्र व्यक्ति हैं, तो यह बहुत संभावना है कि प्रदर्शन नाम है :0
। एक्स अथॉरिटी फ़ाइल का स्थान खोजना कठिन है, क्योंकि जीडीएम के साथ डेबियन निचोड़ या उबंटू 10.04 के तहत सेट किया गया है, यह एक फ़ाइल में बेतरतीब ढंग से उत्पन्न नाम के साथ है। (आपको पहले कोई समस्या नहीं थी क्योंकि gdm के पुराने संस्करणों ने डिफ़ॉल्ट सेटिंग का उपयोग किया था, अर्थात कुकीज़ को स्टोर किया गया था ~/.Xauthority
।)
चरों का मान प्राप्त करना
यहाँ का मान प्राप्त करने के लिए कुछ तरीके हैं DISPLAY
और XAUTHORITY
:
आप अपने डेस्कटॉप से व्यवस्थित रूप से एक स्क्रीन सेशन शुरू कर सकते हैं, शायद अपने लॉगिन स्क्रिप्ट्स में (से ~/.profile
; लेकिन ऐसा केवल तभी करें जब X के तहत लॉगिंग करें: टेस्ट अगर DISPLAY
शुरू होने वाले मान पर सेट हो :
(जिसमें उन सभी मामलों को कवर किया जाए, जिनकी आप संभावना रखते हैं मुठभेड़ करना))। इन ~/.profile
:
case $DISPLAY in
:*) screen -S local -d -m;;
esac
फिर, ssh सत्र में:
screen -d -r local
आप फ़ाइल में DISPLAY
और मानों को सहेज भी सकते हैं और मानों को XAUTHORITY
याद भी रख सकते हैं । इन ~/.profile
:
case $DISPLAY in
:*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
esac
Ssh सत्र में:
. ~/.local-display-setup.sh
screen
आप एक चालू प्रक्रिया से DISPLAY
और उसके मूल्यों का पता लगा सकते हैं XAUTHORITY
। यह स्वचालित करने के लिए कठिन है। आपको एक प्रक्रिया की पीआईडी का पता लगाना होगा जो उस डिस्प्ले से जुड़ी है जिस पर आप काम करना चाहते हैं, फिर पर्यावरण चर /proc/$pid/environ
( eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
।) से प्राप्त करें ।
कुकीज़ को कॉपी करना
एक अन्य दृष्टिकोण ( एरोमास्टर के एक सुझाव के बाद ) को $XAUTHORITY
ssh सत्र में मान प्राप्त करने का प्रयास नहीं करना है , लेकिन इसके बजाय X सत्र को अपने कुकीज़ की प्रतिलिपि बनाना है ~/.Xauthority
। चूंकि आपके द्वारा लॉग इन करने पर हर बार कुकीज जेनरेट होती हैं, इसलिए यदि आप बासी मान रखते हैं तो यह कोई समस्या नहीं है ~/.Xauthority
।
यदि आपके घर की निर्देशिका NFS या अन्य नेटवर्क फ़ाइल सिस्टम पर पहुंच योग्य है, तो सुरक्षा समस्या हो सकती है, जो दूरस्थ व्यवस्थापकों को इसकी सामग्री देखने की अनुमति देती है। जब तक आपने एक्स टीसीपी कनेक्शन सक्षम नहीं किया है, तब तक उन्हें किसी भी तरह से आपकी मशीन से कनेक्ट करने की आवश्यकता होगी, (डिबियन डिफ़ॉल्ट रूप से बंद है)। तो ज्यादातर लोगों के लिए, यह या तो लागू नहीं होता है (कोई एनएफएस नहीं) या कोई समस्या नहीं है (कोई एक्स टीसीपी कनेक्शन नहीं)।
जब आप अपने डेस्कटॉप X सत्र में लॉग इन करते हैं तो कुकीज़ की प्रतिलिपि बनाने के लिए, ~/.xprofile
या ~/.profile
(या जब आप लॉग इन करते हैं तो पढ़ी जाने वाली कोई अन्य स्क्रिप्ट) निम्न पंक्तियों को जोड़ते हैं :
case $DISPLAY:$XAUTHORITY in
:*:?*)
# DISPLAY is set and points to a local display, and XAUTHORITY is
# set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac
¹ सिद्धांत रूप में इस हवाले से उचित, लेकिन विशेष रूप से में कमी होती है $DISPLAY
और $XAUTHORITY
किसी भी खोल metacharacter शामिल नहीं होंगे।