मैं Cygwin के XWin सर्वर को स्वचालित रूप से Xterm शुरू करने से कैसे रोकूं?


12

जब भी मैं अपने स्टार्ट मेनू में "XWin सर्वर" लिंक का उपयोग करके Cygwin का X सर्वर शुरू करता हूं, या startxwinCygwin शेल से चलकर , मुझे स्वचालित रूप से एक xterm विंडो दिखाई देती है, जो मुझे न तो चाहिए और न ही चाहिए।

मैं इससे कैसे बचूं?

( स्टैक ओवरफ्लो पर Stijn Vanpoucke की इस टिप्पणी से प्रेरित प्रश्न )

जवाबों:


5

ऐसा लगता है कि @x_and का व्यवहार तब से बदल गया है जब @me_and ने मूल रूप से इस सवाल का जवाब दिया था, इसलिए बस अपने घर निर्देशिका में एक खाली .startxwinrc बनाना अब काम नहीं करेगा।

मुझे यहाँ एक उत्तर मिला । संक्षेप में जब .startxwinrc से अंतिम कमांड बाहर निकलती है, तो सर्वर बाहर निकल जाएगा। यदि आप इसे रोकना चाहते हैं, तो आप इसे अपने .startxwinrc में अंतिम पंक्ति के रूप में डाल सकते हैं:

sleep inf

यह कोई भी क्लाइंट प्रोग्राम शुरू नहीं करेगा, लेकिन .startxwinrc को बाहर निकलने से रोकेगा।


1
किसी कारण से यह मेरे लिए काम नहीं करता है। मुझे टाइप करना था: exec sleep infinityजैसा कि यहाँ दिखाया गया है: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

अद्यतन : यह उत्तर अब पुराना है। एक अप-टू-डेट उत्तर के लिए, नीचे उपयोगकर्ता 55551570 का उत्तर देखें

से man startxwin:

यदि कोई विशेष क्लाइंट प्रोग्राम कमांड लाइन पर नहीं दिया गया है, startxwinतो .startxwinrcग्राहक प्रोग्राम शुरू करने के लिए शेल स्क्रिप्ट के रूप में चलाने के लिए उपयोगकर्ता के होम निर्देशिका में एक फ़ाइल की तलाश करेगा । यदि ऐसी कोई फ़ाइल मौजूद नहीं है, तो startxwinडिफ़ॉल्ट के रूप में निम्न का उपयोग करेगा:

xterm  -geometry  +1+1  -n  login  -display  :0

इस प्रकार, जब आप X सर्वर शुरू करते हैं, तो कोई भी प्रोग्राम शुरू करने से बचने के लिए, आप एक रिक्त .startxwinrcफ़ाइल चाहते हैं । बस एक Cygwin प्रॉम्प्ट से निम्नलिखित चलाएँ:

touch ~/.startxwinrc

1
यह समाधान लंबे समय तक अच्छा था, लेकिन अब अंतिम अपडेट के साथ ऐसा नहीं है। .startxwinrcएक्स सर्वर के तत्काल गायब होने में एक खाली परिणाम का उपयोग करना । :-(
नोटिनिस्टल

1
@Notinlist तो यह करता है। यह थोड़ा दुखद है। मैं कोशिश करूँगा और जांच करूँगा और एक नया समाधान ढूंढूँगा; ऐसा प्रतीत होता है कि प्रणाली अब कुछ अधिक जटिल है, और मैं तुच्छ रूप से यह नहीं
बता

3

के रूप में नवंबर 2014 , के नवीनतम संस्करण startxwinउपयोग xinitCygwin / X सर्वर, जो वास्तव में कहा जाता है शुरू करने के लिए XWin.exe। प्रक्रिया कुछ इस प्रकार है:

  1. आप कॉल करें startxwin
  2. startxwinएक नई .Xauthorityफ़ाइल बनाता है और एक कहा जाता है .serverauth.1234(जहाँ 1234आप हर बार एक्स शुरू करने पर बदलते हैं)
  3. startxwin कुछ क्लाइंट और सर्वर पैरामीटर सेट करता है
  4. startxwinxinitक्लाइंट और सर्वर मापदंडों के साथ कॉल करता है , जिसमें कुछ वैकल्पिक शेल स्क्रिप्ट और ऑर्टिकल फ़ाइल का संदर्भ भी शामिल है।
  5. xinit कुछ आरसी स्क्रिप्ट को चलाने वाला, एक्स सर्वर शुरू करता है
  6. xinitक्लाइंट (आमतौर पर xterm) या क्लाइंट आरसी स्क्रिप्ट शुरू करता है। हम इससे बचना चाहते हैं
  7. जब आप क्लाइंट या क्लाइंट आरसी स्क्रिप्ट खत्म करते हैं, xinitतो एक्स सर्वर को बंद कर देता है। यदि हम चरण 6 से बचते हैं, तो हमें भी इससे बचने की आवश्यकता है

XWin.exeआसपास के कार्यों startxwinऔर xinitप्रदर्शन के बिना, सीधे बैश लॉगिन शेल के भीतर से चलाना संभव है । इसका मुख्य लाभ यह है कि यह व्यवहार करता है जैसे हम चाहते हैं: एक्स सर्वर शुरू होता है और चालू रहता है। दुर्भाग्य से, चूंकि .Xauthorityस्टार्टअप के दौरान कोई फ़ाइल पास नहीं हुई है , आपका एक्स सर्वर इसे कनेक्ट करने के लिए किसी भी स्थानीय प्रक्रिया की अनुमति देगा, जो असुरक्षित है।

सौभाग्य से यह xinitऐसा सामान है जो हम नहीं चाहते हैं। एक त्वरित हैक है जो बायपास करता है xinitलेकिन उस के शेष तत्व startxwinसर्वर से संबंधित हैं।

TL; DR: में startxwin, नीचे की ओर एक रेखा है जो पढ़ता है:

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

उस पंक्ति को इसमें बदलें:

eval \"$server\" $display $serverargs

अब से, startxwinस्क्रिप्ट कॉल XWin.exeकरने के बजाय सीधे कॉल करेगी xinit। जाहिर है कि यह किसी भी ग्राहक आरसी स्क्रिप्ट को निष्क्रिय कर देगा, लेकिन हम उन लोगों को पहले स्थान पर नहीं चाहते थे। इसका मतलब यह भी है कि इसे जीवित रखने के लिए क्लाइंट प्रक्रिया की आवश्यकता के बिना एक्स जारी रहेगा (यानी xinitइसे मारने से बचना)।


0

मैंने इसे Cyxwin X को startxwin (.exe) के साथ शुरू करने की आदत बना ली है। मेरी .startxwinrc फ़ाइल इस प्रकार है:

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

अब तक, यह काम किया है। एकमात्र त्रुटि जो मुझे मिलती है वह यह है कि प्रदर्शन अभी भी एक और एक्स प्रक्रिया द्वारा "खुला" है। यह त्रुटि एक निश्चित फ़ाइल को निर्दिष्ट करती है जो X सर्वर हर सत्र के लिए डिफ़ॉल्ट रूप से उत्पन्न करता है। Cygwin लोगों को पता है कि सत्र समाप्त होने पर इसे हटाया नहीं जाता है।

इसलिए मैंने "इलाज" के लिए एक उपनाम लिखा है कि:

alias freex='rm /tmp/.X0-lock'

मैंने एक ही पंक्ति - उद्धरण के बीच का हिस्सा, किसी भी दर पर - अपने .bashrc और .bash_profile फ़ाइलों में डाल दिया, अगर मुझे इसे स्वयं करना भूल जाना चाहिए।

HTH।

BZT


यह वास्तव में इस सवाल का जवाब नहीं है; रिवाइडिंग के साथ यह हो सकता है, लेकिन मुझे लगता है कि यह एक अलग प्रश्न और उत्तर के रूप में बेहतर होगा (जैसा कि मैंने यहां किया था) आप जो त्रुटि देख रहे हैं उसे संभालने के बारे में। आप टिप्पणी में उस प्रश्न से लिंक कर सकते हैं।
me_and
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.