टर्मिनल में काम नहीं कर रहा बैकस्पेस, टैब, डेल और एरो कीज़ (ssh का उपयोग करके)


44

जब मैं अपने खाते (sudo अनुमतियों के साथ) के साथ एक और उबंटू मशीन में ssh करता हूं, तो मेरी बैकस्पेस कुंजी दबाने पर कुछ अजीब प्रतीक उत्पन्न करती है। इसके अलावा टैब, डेल और एरो कीज़ काम नहीं करती हैं।

दूसरी ओर, मेरे पास उसी मशीन पर एक और खाता है और जब मैं इस खाते के माध्यम से ssh करता हूं, तो इसका टर्मिनल पूरी तरह से ठीक काम करता है। मैं यह पता नहीं लगा सका कि ऐसा क्यों हो रहा है।


मुझे एक ही समस्या है - मेरा होस्ट Win7-64 है और मेरे दूरस्थ अतिथि सिस्टम दोनों Ubuntu सर्वर 10.04 हैं। एक सर्वर पर, चाबियाँ दूसरे पर काम करती हैं, न कि।
मटेंग

Additonal Info: मैं पोट्टी / किट्टी के साथ रिमोट मशीनों में प्रवेश करता हूं
Mateng

क्या आप एक अलग कार्यक्रम के माध्यम से ssh करने का प्रयास कर सकते हैं, या लक्ष्य प्रणाली के लिए एक नया प्रोफ़ाइल बना सकते हैं?
बेलाक्वा


जब यह होता है, तो "$ TERM" प्रतिध्वनि लिखकर लौटाया जाता है।
david6

जवाबों:


32

संपादित करें: संदर्भ: मटेंग का जवाब

मटेंग करीब है कि मुझे लगता है कि आप शायद बॉर्न शेल चला रहे हैं। लेकिन आपको अपनी /etc/passwdफ़ाइल को सीधे संपादित नहीं करना चाहिए । chshइसके बजाय कमांड का उपयोग करने का प्रयास करें :

chsh -s /bin/bash

-S ध्वज नए शेल (इस मामले में बैश) को आपके लॉगिन शेल को आगे बढ़ाएगा।


वैध लगता है। अगर गोपी 1410 सहमत है, तो 50 प्रतिनिधि आपके हैं।
मैटेंग

@ मटेंग: सहमत, और आपके उत्तर के लिए एक लिंक इसे पूरा करने के लिए जोड़ा गया
gopi1410

1
रूट के रूप में चलाएँ:sudo chsh -s /bin/bash
KrisWebDev 8

1
@ मेरे लिए 3 साल से अधिक समय बाद काम किया। आपको बहुत - बहुत धन्यवाद! तुम कमाल हो!
goncalotomas

17

निम्नलिखित परिवर्तनों ने मेरे लिए समस्या हल कर दी। सबसे पहले, मैंने जाँच की कि कौन सा शेल चल रहा था:

$ echo $0

जो लौटा:

/bin/sh

जैसा कि मैंने Ubuntuforums में इस पोस्ट में पढ़ा , /bin/bashसमाधान लाने के लिए शेल को बदलना । इसलिए मैंने अपनी उपयोगकर्ता सेटिंग को इसमें संपादित किया /etc/passwd:

johndoe:x:1001:104:John Doe:/home/johndoe:/bin/bash

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

/bin/bash

देखा!
[वितरण अद्यतन के कारण समस्या उत्पन्न हुई।]


13

जब आप पहली बार ssh में आते हैं, तो इन दोनों आदेशों को आज़माएँ

stty sane
export TERM=linux

मुझे कुछ मशीनों पर यह करना है कि मैं इस समस्या को ठीक करने के लिए जाता हूं


1
मैंने कोशिश की, लेकिन समस्या बनी हुई है
Mateng

1
क्या आपने linux के बजाय VT100 के रूप में कार्यकाल की कोशिश की? के बारे में stty erase <backspace>(<बैकस्पेस> जहां आप वास्तव में कुंजी हिट करते हैं)
ड्रेक क्लेरिस

के साथ (तीर ऊपर) $ stty erase '^[[A' stty: invalid integer argument '\033[A':। [बैकस्पेस] के साथ: $ stty erase '^?'यह काम करता है। [टैब] के साथ: $ stty erase ' ' कोई त्रुटि नहीं है, लेकिन फिर [बैकस्पेस] विषम व्यवहार पर वापस आ गया है।
Mateng

मैंने कोशिश की export TERM=VT100, लेकिन कोई फायदा नहीं हुआ।
Mateng

1
stty tab0सहायता नहीं करता है। मुझे लगता है, xterm के कुछ प्रकार के सामान्य पुनर्निर्माण आवश्यक हैं। या कीमैप बस गलत है?
मटेंग

5

इस समस्या को ठीक करने का सबसे आसान तरीका कमांड लाइन इंटरफ़ेस प्रॉम्प्ट पर टाइप / बिन / बैश करना है:

$ / बिन / बैश

उपर्युक्त आदेश मौजूदा शेल के शीर्ष पर बॉर्न अगेन शेल को एक उपप्रकार के रूप में निष्पादित करेगा। यह अधिक संसाधनों के उपयोग का नुकसान प्रस्तुत करता है, लेकिन कुछ भी संपादित नहीं करना पड़ता है और किसी विशेष अनुमति की आवश्यकता नहीं होती है। उदाहरण के लिए, हाल के कुबंटु संस्करणों में यह डिफ़ॉल्ट / बिन / डैश कमांड लाइन शेल इंटरफ़ेस के ऊपर / बिन / बैश सत्र शुरू करेगा।

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


1

'गबनोम टर्मिनल' वास्तव में 'xterm' का अनुकरण नहीं करता है।

से: विकिपीडिया >> GNOME टर्मिनल

GNOME टर्मिनल xterm टर्मिनल एमुलेटर का अनुकरण करता है और कुछ समान सुविधाएँ प्रदान करता है।


समस्या और समाधान के बारे में एक ग्रंथ यहां पाया जा सकता है:

लिनक्स बैकस्पेस / मिनी HOWTO हटाएं

प्रत्येक लिनक्स उपयोगकर्ता जल्दी या बाद में ऐसी स्थिति में फंस गया है जिसमें कंसोल पर और एक्स पर काम करने वाले बैकस्पेस और डिलीट कीज असंभव थे। यह पेपर बताता है कि ऐसा क्यों होता है और समाधान सुझाता है। यहां दी गई धारणाएं अनिवार्य रूप से वितरण-स्वतंत्र हैं: प्रत्येक वितरण में सिस्टम कॉन्फ़िगरेशन फ़ाइलों की व्यापक रूप से भिन्न सामग्री के कारण, मैं पाठक को अपने स्वयं के सुधारों को सोचने के लिए पर्याप्त ज्ञान देने की कोशिश करूंगा, यदि आवश्यक हो।

मेरा मानना ​​है कि बैकस्पेस कुंजी को एक वर्ण पर वापस जाना चाहिए और फिर कर्सर के नीचे के चरित्र को मिटा देना चाहिए। दूसरी ओर, हटाए गए कुंजी को कर्सर के नीचे के चरित्र को हटा देना चाहिए, इसे स्थानांतरित किए बिना। यदि आपको लगता है कि दो कुंजियों के फ़ंक्शन का आदान-प्रदान किया जाना चाहिए, इस तथ्य के बावजूद कि अधिकांश कीबोर्ड बैकस्पेस कुंजी पर बाईं ओर (←) की ओर इशारा करते हुए एक तीर की सुविधा देते हैं, तो यह पेपर आपको तत्काल समाधान नहीं देगा, लेकिन निश्चित रूप से आप यहां दिए गए स्पष्टीकरण उपयोगी हो सकते हैं।

सरलतम समाधान दिया गया (जो यहां काम कर सकता है) का उपयोग करना है: $ $ निर्यात TERM = सूक्ति


1

रूट यूजर के रूप में अपने यूजर के लिए / etc / passwd फाइल को एडिट करें और / bin / sh से / bin / bash में बदलें

hdfs: x: 1020: 1001 :: / home / hdfs: / bin / sh to hdfs: x: 1020: 1001 :: / home / hdfs: / bin / bash

इसने मेरे लिए काम किया।


1

मैंने ऊपर के सभी नोटों को ( इस लिंक से ) बिना किसी सफलता के आज़माया । आप जांचना चाहते हैं कि विम स्थापित है।

मैं आमतौर पर vi का उपयोग नहीं करता हूँ। इसलिए मैंने विम स्थापित किया।

$ sudo apt-get install vim

उसके बाद, जब मैंने vi निष्पादित किया तो कीबोर्ड स्ट्रोक ठीक से काम करना शुरू कर दिया। निम्नलिखित के उत्पादन को देखते हुए, ऐसा लगता है कि vi स्थापित होने के बाद विम करने के लिए एक उपनाम बनाया गया था:

$ ls -al /etc/alternatives | grep vi 
lrwxrwxrwx   1 root root    18 Jan 13 09:38 vi -> /usr/bin/vim.basic

0

यह कीबोर्ड के साथ एक संगतता मुद्दा है, अर्थात, मेजबान सिस्टम में इसकी व्याख्या कैसे की जाती है। कमांड मोड में vi एडिटर में जाने के लिए आपको j या h का उपयोग करना पड़ सकता है। तीर नहीं चलेगा।

प्रोफ़ाइल वरीयताओं की जाँच करें-> उस विशिष्ट उपयोगकर्ता के लिए होस्ट सिस्टम में संगतता।


0

ठीक है, मुझे पता है कि यह "समाधान" प्रति कहना नहीं है, और यह आप में से कई की मदद नहीं कर सकता है , लेकिन उम्मीद है कि यह आप में से कम से कम 1 को मदद करता है । इसने मेरी समस्या को ठीक कर दिया।

मेरे छह महीने पुराने मेरे कीबोर्ड पर धमाका हो गया, और मेरे तीर कुंजी ने मेरे पोटीन सत्र पर डेबियन बॉक्स में काम करना बंद कर दिया। उन्होंने हर जगह (पोटीन के बाहर अन्य सभी कार्यक्रम) काम किया। Googleing और यहां तक ​​कि लैंडिंग के बाद (मैं इस टैब को बंद करने जा रहा था, यह मेरे लिए हल नहीं हुआ)। मैंने कुछ कोशिश की। मैंने उसी बॉक्स में एक नया ssh सत्र खोला, और मेरे तीर कुंजी ने काम किया। मैं अपने स्क्रीन सेशन में शामिल हुआ और उन्होंने काम नहीं किया। तो कुछ ऐसा हुआ जो वर्तमान स्क्रीन सत्र से जुड़ा हुआ है जो तीर कुंजियों को अक्षम कर रहा है। दुर्भाग्य से, मैं एक बड़ी परियोजना के बीच में था (हूँ), मेरे स्क्रीन सत्र में 28 खिड़कियां खुली हैं, और सभी 28 खिड़कियों पर अपनी जगह खोते हुए, सत्र को बंद नहीं करना चाहता।

इसलिए..

बैश शेल पर रहते हुए, मैंने CTRL + अप, डाउन, लेफ्ट राइट, ALT + अप, डाउन, लेफ्ट, राइट, SHIFT + अप, डाउन, लेफ्ट राइट, CTRL + ALT + अप, डाउन, के बारे में सोच सकता था। , बाएँ दाएँ, CTRL + SHIFT + ऊपर, नीचे, बाएँ दाएँ, आदि। फिर भी कोई भाग्य नहीं है, मैंने भी ऊपर, नीचे, बाएँ दाएँ के साथ विंडोज़ मेनू और विंडोज़ ऐप कुंजियाँ आज़माईं।

अब मेरे तीर फिर से काम करते हैं! जो कुछ ऊपर है और तीर कुंजियों के संयोजन में से एक के बारे में कुछ तय किया है।


0

मेरे समान समस्या के ऊपर दिए गए उत्तरों में से कोई भी, अर्थात एक उबंटू के रिमोट (यहाँ ubuntu-17.10 के साथ ncurses-6.0) के लिए दूरस्थ करने के बाद बैकस्पेस या समान कुंजी का उपयोग नहीं किया जा सकता है।

यह समाप्त होने के साथ ही एक समस्या है। मूल रूप से, मेरे सूक्ति-टर्मिनल का कहना है कि यह एक xterm-256color टर्मिनल है (TERM चर के माध्यम से, जिसे ssh द्वारा रिमोट में निर्यात किया जाता है), लेकिन रिमोट में xterm-256color के लिए एक टर्मिनल कॉन्फ़िगरेशन नहीं था।

निम्नलिखित समस्या को हल करते हुए:

$ होस्ट: गूंज $ TERM
टर्म-256color
$ होस्ट: infocmp> termfo.src
$ होस्ट: टिक टर्मिनो.src
$ होस्ट: scp .terminfo / x / xterm-256color $ रिमोट: / usr / share / termfo / x / xterm-256color

infocmp, बिना किसी विकल्प के, पर्यावरण चर $ TERM में टर्मिनल के लिए एक स्रोत लिस्टिंग का उत्पादन करता है। तो यह infocmp -I $ TERM के बराबर है।

फिर परिणामस्वरूप स्रोत टिक के माध्यम से संकलित किया जाता है।

अंत में, दूरस्थ स्थान पर संबंधित टर्मफ़ॉर्फ़ कॉन्फ़िगरेशन स्थापित करें। इसलिए, अगली बार जब मैं $ होस्ट के माध्यम से $ रिमोट से कनेक्ट होता हूं, तो यह मेरे टर्मिनल के बारे में जान जाएगा।


आपके ब्लॉक का कोड क्या करता है? किसी भी तरह एक शब्द विन्यास बनाएँ? कुछ व्याख्या करना अच्छा होगा, रहस्य कोड चलाना सबसे अच्छा विचार नहीं है, यहां तक ​​कि उनके मैन पेज भी infocmp के डिफ़ॉल्ट प्रभाव पर सुपर स्पष्ट नहीं हैं, या यह कैसे उपयोगी है
Xen2050

@ Xen2050: मैंने प्रत्येक कमांड के लिए एक स्पष्टीकरण जोड़ा है। बिना किसी विकल्प के infocmp infocmp -I $ TERM के बराबर है। यह मैन पेज में वर्णित है, लेकिन दो भागों में: "यदि कोई विकल्प निर्दिष्ट नहीं है और शून्य या एक शब्द निर्दिष्ट नहीं है, तो -I विकल्प मान लिया जाएगा। [...] -I, -L, और -C विकल्प नामित प्रत्येक टर्मिनल के लिए एक स्रोत लिस्टिंग का उत्पादन करेगा। -मैं नाम का उपयोग करता हूं यदि कोई शब्द नहीं दिए गए हैं, तो टर्मिनल नाम के लिए पर्यावरण चर TERM का उपयोग किया जाएगा। "
user1448926
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.