मैं स्क्रीन का उपयोग किए बिना ttys के बीच कैसे स्विच कर सकता हूं?


17

तो मान लें कि आप अपने लिनक्स को डेस्कटॉप पर स्थापित करते हैं। आप एक सूक्ति-टर्मिनल / konsole / जो कुछ भी आप आदेश में प्रवेश करने के लिए एक tty है शुरू करते हैं।

अब आइए मैं SSH को उसी मशीन में बताता हूं। यह मुझे आदेशों में प्रवेश करने के लिए एक और ट्टी से बांध देगा।

अब कहते हैं कि मैं अपने मूल SSH एक से gnome-टर्मिनल एक से पहले शुरू करने के लिए अपने tty को "स्विच" करना चाहता हूं।

मूल रूप से मैं पूछ रहा हूं कि क्या कोई ऐसा ही तरीका है जो screen -xस्क्रीन के बिना करता है?

मुझे पता है कि आप आसानी से / t / dev फ़ाइल में कुछ गूंज कर अन्य tty को आउटपुट भेज सकते हैं, लेकिन मुझे पता नहीं है कि tty में क्या है 'देखने' का तरीका।

कोई विचार?



क्या यह unix.stackexchange.com/questions/8469/… का डुप्लिकेट है ?
mattdm

जवाबों:


16

शायद ये स्कीमा स्थिति को स्पष्ट कर सकते हैं। यह सामान्य सेटिंग है:

                               Terminal  (/dev/ttyX or /dev/pts/x)
                                device
                                   |
                    (screen)<--[<output]----x-------(stdout) Process1
        Terminal  (keyboard)---[input >]---o-\----->(stdin)
                                            \ \
(hardware console or                         \ `----(stdout) Process2
 virtual console or terminal                  `---->(stdin)
 emulators like xterm, …)

और इस तरह से कुछ नया प्लग करने का कोई तरीका नहीं हैProcess3 :

                             Terminal
                              device
                                 |
             (screen)<---o---[<output]--x------(stdout) Process1
  Terminal (keyboard)---/-x--[input >]-o-\---->(stdin)
                       | /              \ \
                       | |               \ `---(stdout) Process2
                       | |                `--->(stdin)
                       | |
                       \ `---------------------(stdout) Process3
                        `--------------------->(stdin)

स्क्रीन (और अन्य) क्या करता है कुछ छद्म टर्मिनल डिवाइस आवंटित कर रहा है (जैसे xterm करता है) और इसे एक या अधिक "वास्तविक" टर्मिनलों (भौतिक, आभासी, या उत्सर्जित) पर पुनर्निर्देशित करता है:

             Terminal                   pseudo
             devices              ,--> Terminal (/dev/pts/x)
                |         _______/      device
Terminal <--[<output]--- |       |        |
 1       ---[input >]--> |screen | <--[<output]---x-----(stdout) Process1
                         |Process| ---[input >]--o-\--->(stdin)
Terminal <--[<output]--- |       |                \ \
 2       ---[input >]--> |_______|                 \ `--(stdout) Process2
                                                    `-->(stdin)

उपयोग करने से screen -xआप Terminal 3स्क्रीन सत्र के लिए एक और टर्मिनल, xterm, जो भी (कहते हैं ) संलग्न कर सकते हैं ।

तो नहीं, आप एक अलग टर्मिनल से जुड़ी प्रक्रियाओं के साथ सीधे stdin / stdout के माध्यम से संवाद नहीं कर सकते। आप केवल इस प्रक्रिया के माध्यम से ऐसा कर सकते हैं जो इस टर्मिनल को नियंत्रित कर रहा है यदि यह एक छद्म टर्मिनल होता है, और यदि इस प्रक्रिया को ऐसा करने के लिए संक्षिप्त किया गया था (जैसे स्क्रीन है)।


यह एक महान व्याख्या है! मुझे लगता है कि यह वास्तव में यहाँ एक जवाब नहीं है, लेकिन इस सवाल के लिए अच्छी तरह से सूट करेगा । एक अवलोकन: "कोई रास्ता नहीं है" केवल सच है अगर आप मना करते हैं ptrace; इसके लिए धन्यवाद ptrace, जैसे कार्यक्रम neercs, rettyऔर कभी-कभी ऐसा कर सकते हैं।
गिल्स एसओ- बुराई को रोकना '

@Gilles: अच्छी तरह से वे कुछ और ही होती हैं: वे (फ़ाइल वर्णनकर्ता का मूल्य बदल stdin, stdoutस्कीमा के दाईं ओर) सीधे प्रक्रिया अपहरण से। बुरा व्यक्ति!
स्टीफन जिमेनेज़

1
हम्म, आप सही कह रहे हैं, वे एक अलग तीर बदलते हैं। बुराई, लेकिन सुविधाजनक!
गिलेस एसओ- बुराई को रोकना '

8

अपने मौजूदा टर्मिनल पर अन्य टर्मिनल पर प्रक्रियाओं को फिर से जोड़ना बिना गंदे चाल के संभव नहीं है। यह कुछ सिस्टम कॉल (के साथ ptrace) करने के लिए प्रक्रिया को मजबूर करके संभव है ; इससे कुछ प्रोग्राम क्रैश हो जाते हैं। कई उपकरण है कि इस, कर रहे हैं जैसे neercs, retty, cryopid, reptyr, ...; देखें कि मैं इसे कैसे चालू कर सकता हूं और इसे एक नए स्क्रीन शेल में जोड़ सकता हूं? और जुड़े हुए प्रश्न।

दूसरे टर्मिनल पर पहले से प्रदर्शित आउटपुट को प्राप्त करना एक अलग समस्या है। पूरी तरह से सामान्य समाधान नहीं है: सिद्धांत रूप में, एक बार आउटपुट प्रदान किए जाने के बाद, टर्मिनल इसे केवल एक छवि के रूप में संग्रहीत कर सकता है। व्यवहार में, सभी एक्स टर्मिनल एमुलेटर अपने आउटपुट बफर को टेक्स्ट रूप में रखते हैं ताकि आप इसे कॉपी-पेस्ट कर सकें। उस आउटपुट को हथियाने का तरीका टर्मिनल एमुलेटर पर निर्भर करता है; मूल विचार संपूर्ण स्क्रॉलबैक बफर का चयन करना है। लिनक्स कंसोल जैसे कि /dev/tty1, स्क्रॉलबैक बफर आसानी से /dev/vcs1(और /dev/vcsa1पाठ विशेषताओं के साथ) उपलब्ध है।

इसका सरल उत्तर यह है कि यदि आप किसी दूसरी जगह से किसी टर्मिनल को फिर से जोड़ना चाहते हैं, तो उपयोग करें screenया tmux

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