ব্যাকস্পেসের জন্য crtl-H ব্যবহার করতে টেলনেট / এসএসকে বাধ্য করুন


9

আমার কয়েকটি ডিভাইস সিসকো সিরিয়াল টার্ম সার্ভারের সাথে সংযুক্ত রয়েছে; যখন আমি telnetসরাসরি সিস্কোর বন্দরে চলে যাই তখন অনেকে কাজ করে। তবে, আমার কাছে কয়েকটি জেদী ডিভাইস রয়েছে যা Backspaceএটি ডিফল্টরূপে টেলনেটে ম্যাপ করার কারণে ব্যবহার করবে না ।

যদি এটি গুরুত্বপূর্ণ হয় তবে আমি দেবিয়ান চেপে ধরে rxvtএকটি এক্স উইন্ডোতে টেলনেট করি । TERMসেট করা হয় rxvt, কিন্তু এটি কিনা আমি ব্যবহার ব্যাপার না vt100, vt101বা, xterm... পরিবর্তন TERMকোনো প্রভাব নেই। আমি পুরানো কেরমিট এফএকিউতেTERM যা দেখেছি তার ভিত্তিতে পরিবর্তনের পথটি শুরু করেছি । FWIW, এবং কোন কাজ করে না।stty erase ^hstty erase ^?

আমি লক্ষ করেছি যে Backspaceএই ডিভাইসগুলিতে সঠিকভাবে কাজ করে যদি আমি netcat... থেকে কোনও কাঁচা টিসিপি সকেট ব্যবহার করি nc 192.168.12.117 2006; যাইহোক, তবে আমি পাসওয়ার্ডগুলি গোপন বা টার্মিনাল পেজিং নয় এমন অন্যান্য সমস্যাগুলিতে চালিত করি।

আমি কিভাবে বেছে বেছে ম্যাপ টেলনেট এবং SSH জোর করতে পারেন Backspaceথেকে CtrlHএই ধরনের ডিভাইসের জন্য? এছাড়াও, ডিভাইসে এটি কোনও বাগ কিনা তা মূল্যায়নের জন্য আমার কী মানদণ্ড ব্যবহার করা উচিত?

সম্পাদনা

যদি এটি বিবেচিত হয় তবে showkey -aএটি প্রশ্নে থাকা কীগুলির জন্য আউটপুট ... এর ^?সাথে সম্পর্কিত Backspaceএবং ^Hহয় CtrlHলিনাক্স কীবোর্ড এবং কনসোল হাওটো যখন দেখি তখন আমার কাছাকাছি হওয়া উচিত বলে মনে হয় তবে এটিকে পরিবর্তন করার জন্য আমি কী করতে পারি তা আমি বুঝতে পারি না। আমি loadkeysকোনও প্রভাব ফেলতে না পেরে বিভিন্ন পদক্ষেপের চেষ্টা করেছি ।

[mpenning@hotcoffee docs]$ sudo showkey -a

Press any keys - Ctrl-D will terminate this program

^?      127 0177 0x7f
^H        8 0010 0x08

আমি dumpkeysপাশাপাশি থেকে প্রাসঙ্গিক আউটপুটও অন্তর্ভুক্ত করছি ... এটি আমার সিস্টেমে বর্তমান ম্যাপিং (যা কিছু প্রশ্নে ডিভাইসে কাজ করে না)। যদি আমি কীভাবে Backspaceএকই জিনিসটি পেতে পারি তা বুঝতে পারি CtrlH, আমার একটি সমাধান হবে।

[mpenning@hotcoffee docs]$ sudo dumpkeys | grep -Ei "backspace|127"
keycode   8 = BackSpace        ampersand        braceleft       
keycode  14 = BackSpace        Delete          
        control keycode  14 = BackSpace       
keycode 127 =
[mpenning@hotcoffee docs]$

1
আপনি চেষ্টা করেছেন ssty erase '^?'? ডিভাইসগুলি যদি কোনটিতে জোর দেয় তবে এটি C-hটেলনেটের কল নয়, এটি টার্মিনাল (এমুলেটর) এর।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস আপনার মন্তব্যটি আসলে সঠিক নয়, নীচে আমার উত্তরটি দেখুন
মাইক পেনিংটন

উত্তর:


10

আমি অবশেষে অ্যান ব্রেটারার লিনাক্স কীবোর্ড হল অফ লজ্জাতে একটি উত্তর পেয়েছি ... দেখে মনে হচ্ছে যে কী ম্যাপিংগুলি xterm/ এ পরিবর্তন করা rxvtভাল নয়telnet

আমি যখন এটি টেলনেট সংযোগটি স্নিগ্ধ করলাম তখন আমি এটি যাচাই করেছি। প্রথমে আমি টেলনেট সেশনটি স্নিগ্ধ করে দেখলাম যে হোস্টকে Backspaceপাঠানো 0x7fহয়েছে। পরবর্তী আমি ইচ্ছাকৃতভাবে কপর্দকশূন্য Backspaceমধ্যে rxvtব্যবহার stty erase $(সুতরাং মধ্যে ডলার চিহ্ন আমার ব্যাকস্পেস ম্যাপিং rxvt)। এটি করার পরে, আমাকে $ব্যাকস্পেসে প্রবেশ করতে হয়েছিল rxvt, তবে আমি যখন রিমোট হোস্টটিতে ব্যবহার করি telnetতখনও পাঠানো হয়েছিল ।0x7fBackspace

সমাধান

kbdfix(নীচে) নামে একটি স্ক্রিপ্ট তৈরি করুন , এবং 755অনুমতি দিয়ে এটি কার্যকর করার জন্য; আপনার বিতরণ সংরক্ষণাগারগুলি থেকে লোড হওয়া tclshএবং expectপ্যাকেজগুলির প্রয়োজন হবে ।

#!/usr/bin/expect

#Name this file as kbdfix and make it executable in your path
eval spawn -noecho $argv

interact {
 \177        {send "\010"}
 "\033\[3~"  {send "\177"}
}

এখন ভাঙা হোস্ট, আমি টাইপ সংযোগ করতে kbdfix telnet 192.168.12.117 2006, এবং Backspaceকাজ করে।

উপরে 2006 এর বিভ্রান্ত যে কারও জন্য নোট করুন ... এটি সিসকো টার্ম সার্ভারটি ভাঙা ডিভাইসের কনসোলের সিরিয়াল সংযোগের জন্য ব্যবহার করে (এই ক্ষেত্রে, একটি ব্রোকেড এফসিএক্স স্যুইচ)।

যদি আপনি কেবল এমন কোনও ডিভাইসে টেলনেটিং করছেন যা পছন্দ করে না Backspace, আপনি ব্যবহার করতে পারেন kbdfix telnet <addr_of_the_broken_device>। আমি যখন DLink DGS-3200 ইথারনেট স্যুইচটিতে অনুরূপ সমস্যা রয়েছে তখন আমি এসএসএস সহ এটি ব্যবহার করছি; বাক্যবিন্যাস হয় kbdfix ssh 172.16.1.26


2
stty erase $"ব্যাকস্পেস" কীটি "$" তে ম্যাপ করে না, এটি টিটিআই ড্রাইভারকে বলে যে একটি চরিত্র মুছতে "" key "কীটি ব্যবহার করা দরকার। আপনি যখন টেলনেট চালান, আপনি কাঁচা মোডে থাকবেন তাই এই সেটিংটি উপেক্ষা করা হবে। একটি সহজ সমাধান হ'ল ব্যাকস্পেসের জন্য terminal এইচ প্রেরণের জন্য আপনার টার্মিনাল এমুলেটরটি কনফিগার করা, godশ্বরের ইচ্ছা অনুসারে, অন্য একটি হ্যাক ব্যবহার করছে যা প্রত্যাশা ব্যবহার করে এই চরিত্রটিকে অনুবাদ করে।
jlliagre

@ জেলিয়াগ্রে, হ্যাঁ, আমি আবিষ্কার করেছি যে আমি যখন ব্যবহার করি তখন কী কী বোর্ডের পঠন sttyপরিবর্তন হয় না ; যাইহোক, আমি শুকনো না হওয়া পর্যন্ত এই গুরুত্বপূর্ণ ঘটনাটি আমার কাছে পরিষ্কার ছিল না। আমি তদন্ত করব কীভাবে আমি ব্যবহার করতে ব্যাকস্পেস পরিবর্তন করতে পারেন মধ্যে ... অথবা হয়তো, আমি অন্য শব্দ খুঁজে নেওয়ার বিষয়ে চিন্তা করতে হবে। telnetwiresharkControl_hrxvt
মাইক পেনিংটন

@ মাইক: আমি মনে করি আপনি এখনও কিছু সম্পর্কে বিভ্রান্ত হয়ে পড়েছেন (যা আমি জেলিয়াগ্রেকেও স্বীকার করি নি বা আমি স্পষ্টভাবে উল্লেখ করেছি না; আমি আমার উত্তর আপডেট করেছি)। sttyঅ্যাপ্লিকেশন দিকে চালানো প্রয়োজন। আমি অত্যন্ত সন্দেহ telnetইনপুট অক্ষর অনুবাদ বা আপনি ব্যবহার করা প্রয়োজন যে script; কেবল sttyরিমোট মেশিনে চালানো সম্ভবত কৌশলটি করবে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলস, রিমোট মেশিনটি একটি নেটওয়ার্ক ডিভাইস, এটি নেই stty
মাইক পেনিংটন

1
@ মাইক: আপনি নেটকাট ব্যবহার করার সময়, আপনার টার্মিনালটি রান্না করা মোডে থাকে: আপনি স্থানীয়ভাবে সম্পাদনা করে একটি লাইন লেখেন এবং Enterপ্রেরণ করেন। আপনি যখন টেলনেট ব্যবহার করেন তখন আপনার টার্মিনালটি কাঁচা মোডে থাকে: প্রতিটি অক্ষর তত্ক্ষণাত অ্যাপ্লিকেশনে প্রেরণ করা হয়। উদাহরণস্বরূপ দেখুন এই পৃষ্ঠার সূচনা , বা এই উইকিপিডিয়া নিবন্ধ
গিলস 'অশুভ হওয়া বন্ধ করুন'

3

ব্যাকস্পেস এবং কন্ট্রোল-এইচ একই জিনিস তৈরির জন্য ডিজাইন করা হয়েছিল তবে আজকাল, বিশেষত লিনাক্সে আপনার প্রায়শই ব্যাকস্পেস প্রেরণ করে কিছু অদ্ভুত অব্যাহতি ক্রম প্রেরণ করে মুছুন এবং মুছুন।

যে কোনও ক্ষেত্রে এবং যতদূর আমি জানি, টেলনেট বা টিআরএম ভেরিয়েবলের ব্যাকস্পেস যা প্রেরণ করে তা পরিবর্তন করা উচিত নয়, এটি সাধারণত একটি টার্মিনাল এমুলেটর কনফিগারেশন বৈশিষ্ট্য।


আপনার প্রশ্নটি অনুমানের উপর ভিত্তি করে টেলনেট ব্যাকস্পেস কীটির নির্দিষ্ট প্রক্রিয়াকরণ করছে যা আমার বিশ্বাস ভুল I আমার উচিত ছিল একটি মন্তব্য পরিবর্তে একটি উত্তর প্রকৃতপক্ষে।
jlliagre

AFAICT, telnetকীবোর্ডের স্থানীয় টার্মিনাল ম্যাপিংগুলিতে কোনও মনোযোগ দেয় না। কীবোর্ড এবং টেলনেট সম্পর্কে অ্যান বারেটার নোটগুলি
মাইক পেনিংটন

আমি আশঙ্কা করছি আপনি স্টটি কী করেন তা ভুল বুঝে যাচ্ছেন।
jlliagre

3

ব্যাকস্পেসের অক্ষরটি কী তা খুঁজে বের করার জন্য প্রোগ্রামগুলি টার্মিনাল সেটিংসে জিজ্ঞাসা করার কথা রয়েছে ( ^hএবং ^?, \010এবং \177সেখানে দুটি পছন্দ আছে)। আপনার টার্মিনাল যা প্রেরণ করবে তা ব্যবহার stty erase '^h'বা stty erase '^?'ঘোষণা করতে।

আপনি যদি টার্মিনালের ভিতরে দূরবর্তীভাবে (টেলনেট, আরশ বা এসএসএস সহ) লগ ইন করেন তবে নোট করুন যে আপনাকে অবশ্যই stty অ্যাপ্লিকেশন দিকে চালানো উচিত । sttyটার্মিনালটিকে অন্য কিছু করতে বলছে না, এটি স্থানীয় টার্মিনাল ড্রাইভারকে (যেমন অংশটি টার্মিনালটিতে চলমান অ্যাপ্লিকেশনগুলির সাথে ইন্টারফেস করে) টার্মিনাল সম্পর্কে (historতিহাসিকভাবে একটি শারীরিক বস্তু, এখন একটি টার্মিনাল এমুলেটর) সেটিংস সম্পর্কে অবহিত করে। একইভাবে, আপনি যদি স্ক্রিন বা অনুরূপ টার্মিনাল-ইন-টার্মিনাল সফ্টওয়্যার চালনা sttyকরেন তবে আপনাকে প্রতিটি স্ক্রিন উইন্ডোতে চালনা করতে হবে (তবে সাধারণত স্ক্রিনটি তার কনফিগারেশন ফাইল থেকে সঠিক কাজ করার জন্য কনফিগার করা যেতে পারে, যদি এটি বাক্স থেকে কাজ না করে তবে )।

আচরণের পার্থক্য যা আপনি netcatবনাম থেকে পর্যবেক্ষণ telnetকরেছেন টার্মিনালটি যেভাবে ব্যবহৃত হচ্ছে তার কারণে এটি ঘটে: * নেটক্যাটে টার্মিনালটি লাইন বাই লাইন মোডে থাকে (এটি "রান্না মোড" নামেও পরিচিত)। আপনি একটি লাইন সম্পাদনা করুন (স্থানীয় টার্মিনালের অন্তর্নির্মিত সংস্করণ বৈশিষ্ট্যটি ব্যবহার করে, এবং বিশেষত স্থানীয় স্টেটি সেটিংস), তারপরে এটি চূড়ান্ত অবস্থায় দূরবর্তী হোস্টে প্রেরণ করুন। * টেলনেটে, (স্থানীয়) টার্মিনালটি অক্ষর দ্বারা অক্ষর মোডে থাকে (এটি "কাঁচা মোড" নামেও পরিচিত)। প্রতিটি কীস্ট্রোক সরাসরি টেলনেটে যায় যা এটি তত্ক্ষণাত দূরবর্তী সিস্টেমে সম্পর্কিত করে। আপনি রিমোট সিস্টেমের লাইন সংস্করণ বৈশিষ্ট্যগুলির উপর নির্ভরশীল।

টুকরো টুকরো প্রোগ্রাম রয়েছে যা টার্মিনাল সেটিংস সম্পর্কে চিন্তা করে না। দেখে মনে হচ্ছে আপনি তাদের মধ্যে একটির মুখোমুখি হয়ে গেছেন। আপনার সেরা বাজি আপনার টার্মিনালের কনফিগারেশন পরিবর্তন করা change আপনার যদি টেলনেট বা এসএসএইচের মতো দূরবর্তী প্রোটোকলের মাধ্যমে কোনও ডিভাইসের সাথে যোগাযোগের প্রয়োজন হয় এবং ডিভাইসটি কনফিগারযোগ্য না হয়।

এক্সটার্মের সাহায্যে এটি সহজ: BackSpaceরান-টাইমে কী দ্বারা প্রেরিত অক্ষরটি টগল করার জন্য একটি সেটিংস রয়েছে । বাম বোতামের মেনু থেকে, টগল করুন "মুছে দিন হ'ল"। প্রোগ্রামেটিক্যালি পাঠাতে পালাবার ক্রম \e[?67h আছে BackSpaceপাঠান ^h, অথবা \e[?67lআছে BackSpaceপাঠান ^?। সংশ্লিষ্ট সম্পদটি হ'ল XTerm.backarrowKeyIsErase। অন্যান্য টার্মিনাল এমুলেটরগুলির একটি অনুরূপ ইন্টারফেস বৈশিষ্ট্য থাকতে পারে বা নাও থাকতে পারে পালানোর ক্রমটিকে সমর্থন করে।

অনেক টার্মিনাল অনুকরণকারী আপনি যখন চাপেন তখন একটি ^hবা অন্যটি অক্ষর যখন আপনি + টিপেন তখন তা প্রেরণ করে । এটি একটি চিমটি কার্যকর হতে পারে।^?BackSpaceCtrlBackSpace

নোট করুন showkeysএবং বন্ধুরা কেবলমাত্র লিনাক্স কনসোলে প্রাসঙ্গিক, এক্স এর মধ্যে নয় not

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.