ডেবিয়ান এসএসএইচ - আকার পরিবর্তনকারী টার্মিনাল ব্যাশের সাথে নিবন্ধভুক্ত নয়


11

একটি ডিস্ক ব্যর্থতার কারণে আমরা সম্প্রতি আমাদের সার্ভারটি পুনরায় ইনস্টল করেছি এবং এখন আকার পরিবর্তনকারী টার্মিনালগুলির সাথে আমাদের একটি সমস্যা রয়েছে। আমরা ডেবিয়ান 6.0.6 ইনস্টল করেছি।

লক্ষণ

আপনি যখন কোনও টার্মিনালটির আকার পরিবর্তন করেন, কোনও এনক্রাস-ভিত্তিক অ্যাপ্লিকেশন (পরীক্ষিত: ytalk, irssi, স্ক্রিন, tmux, কিছু ncurses উদাহরণ অ্যাপ্লিকেশন) সঠিকভাবে আকার পরিবর্তন করতে পারে বলে মনে হয় না। স্ক্রিনটি সাধারণত ফাঁকা হয়ে যায়। অ্যাপ্লিকেশনটিতে একটি পুনরায় আঁকতে বাধ্য করা পুরানো টার্মিনাল আকার ব্যবহার করে পুনরায় আঁকবে।

বাশ (4.1.5 (1)) প্রম্পটে উইন্ডোটির আকার পরিবর্তন করার সময়, COLUMNS এবং লাইনগুলি ভেরিয়েবলগুলি কখনই আপডেট হয় না।

কারণ নির্ণয়

ব্যাগের মধ্যে সাইনচঞ্চ ফাঁদে দেওয়ার চেষ্টা করা হচ্ছে বলে মনে হয় এটি কখনই গৃহীত হয় নি। এটি দিয়ে পরীক্ষা করা হয়েছিল:

trap 'touch /home/user/sigwinch' SIGWINCH
trap 'touch /home/user/sigusr1' SIGUSR1
kill -s SIGWINCH $$
kill -s SIGUSR1 $$

যা আমার হোম ডিরেক্টরিতে উভয় ফাইল তৈরি করা উচিত ছিল। এটি কেবল তৈরি হয়েছিল /home/user/sigusr1

চেষ্টা করার kill -s SIGWINCH $$ফলে $ COLUMNS / $ লাইনগুলি ভেরিয়েবলের আপডেট হতে পারে না।

checkwinsize( shopt -s checkwinsize) সক্ষম করার ফলে কোনও অ্যাপ্লিকেশন থেকে প্রত্যাবর্তনের পরে প্রত্যাশার কারণে ash COLUMNS /। লাইনগুলি আপডেট করা হবে update এটি checkwinsizeসক্ষম সহ একটি টার্মিনালকে আকার দেওয়ার পরে নিম্নলিখিত দিকে নিয়ে যায় :

$ echo $COLUMNS ; ls > /dev/null ; echo $COLUMNS
72
107

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

আমি আমার .bashrc সরানোর চেষ্টা করেছি এবং এটি কিছুই করেনি। লিনাক্স বাক্স থেকে পুটিটিওয়াই এবং কিছু ধরণের আরএক্সভিটি-টাইপ টার্মিনালের বিভিন্ন বাশ কনফিগারেশন সহ বিভিন্ন অন্যান্য ব্যবহারকারীদের জন্য এই সমস্যা দেখা দিচ্ছে।

strace,

আমি বাশের উপর স্ট্রেস দৌড়ে গিয়ে টার্মিনালের আকার পরিবর্তন করার চেষ্টা করলাম, কিছুই আসেনি ( readপ্রম্পটটি মুদ্রণের সাথে সাথে এটি একটি কলে অবরুদ্ধ ছিল )।

আমি খালি লাইনে ফিরলাম, এবং ব্যাশ পুরো গোছা জিনিস করেছে। আমি যে আউটপুটটি প্রাসঙ্গিক বলে মনে করি তা হ'ল: ( সম্পূর্ণ স্ট্রেস )

1: rt_sigprocmask(SIG_SETMASK, [WINCH], NULL, 8) = 0
2: rt_sigaction(SIGWINCH, {0x80e2c20, [], SA_RESTART}, {0x809c310, [], 0}, 8) = 0
3: rt_sigprocmask(SIG_BLOCK, [INT], [WINCH], 8) = 0
4: write(2, "aa:~$ ", 6)                   = 6
5: rt_sigprocmask(SIG_SETMASK, [WINCH], NULL, 8) = 0
6: rt_sigprocmask(SIG_BLOCK, NULL, [WINCH], 8) = 0
7: read(0,

যা আমার বোঝার জন্য বাশ দেখায়: (আমি এটি মারাত্মকভাবে ভুল বুঝে উঠতে পারি I'm আমি এখানে আমার উপাদান থেকে দূরে আছি))

1: Disabling delivery of the SIGWINCH signal, when previously it was allowed.
2: Registering a handler for the SIGWINCH signal.
3: Masking some other combination of signals. As evidenced by line 5, this does not include SIGWINCH.
4: Printing the prompt.
5: Masking SIGWINCH, where previously nothing was blocked.
6: Masking the "union of null and SIGWINCH" which, to my understanding, would result in SIGWINCH being masked.
7: Waiting on input.

এই সমস্যাগুলি ছাড়াই একটি বাক্সে সঞ্চালিত একই স্ট্রেস (উবুন্টু, বাশ 4.2.24 (1)) এর ফলস্বরূপ:

1: rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
2: rt_sigaction(SIGWINCH, {0x49e320, [], SA_RESTORER|SA_RESTART, 0x7f7ef49f64c0}, {0x457880, [], SA_RESTORER, 0x7f7ef49f64c0}, 8) = 0
3: rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
4: write(2, "aaaaaaa:~$ ", 11)             = 11
5: rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
6: rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
7: read(0,

প্রশ্ন

নরকে কী চলছে আর আমার বাশ কেন ভেঙে গেছে? :(

আমি অনুমান করছি যে সম্ভবত কোথাও একটি অপশন আছে যা অপ্রত্যাশিত কিছুতে ডিফল্ট হয়েছিল, তবে গুগলে কয়েক ঘন্টা কিছুই আপ হয় নি।

যে কোনও সহায়তা এবং / অথবা পয়েন্টারগুলি প্রশংসিত হয়। এটি সত্যিই হতাশাব্যঞ্জক।

ধন্যবাদ.


আপনি প্রথমটি নন : list.gnu.org/archive/html/bug-bash/2007-01/msg00084.html আপনি যদি exec bashহাতে হাতে থাকেন (তবে এটি আর লগইন শেল নয়) এটি কি এখনও খারাপ ব্যবহার করে? যদি না হয়, কী exec bash -l(তাই এটা একটি লগইন শেল)? যদি তা হয়, তবে আপনার লগইন স্ক্রিপ্টগুলি ( /etc/profile /etc/profile.d/ ~/.bash_profile ~/.profile) এর সাথে কিছু একটা রয়েছে, তবে শেলটি কী না তা বলতে পারে তা অনুসন্ধান করার জন্য আপনাকে কী বলতে হবে তা আমি জানি না SIGWINCH
DerfK

উভয় exec bashএবং exec bash -lএকই আচরণ প্রদর্শন। আমি মনে করি এটি একটি ছোট সান্ত্বনা যা আমি এতে একা নই। যদিও এর কারণ কী তা নিয়ে আমি পুরোপুরি বিভ্রান্ত। একটি নতুন ডাউনলোড করা ডেবিয়ান চিত্র থেকে কলো একটি সর্বনিম্ন ইনস্টল ইনস্টল করেছে। আমাকে স্থানীয়ভাবে ইনস্টল করার চেষ্টা করতে হবে এবং কোন সমস্যা আছে কিনা এবং (এটি অন্য কোনও ব্যক্তির ক্ষেত্রে ঘটবে না বলে মনে হচ্ছে), চলমান সিস্টেমের সাথে তুলনা শুরু করতে হবে।
নিউক্লিয়ারডগ

আমি একটি ভিএম-তে একটি নতুন ইনস্টল করেছি, / etc এবং / usr এর সমস্ত ফাইলের এমডি 5 সংখ্যার একটি তালিকা উত্পন্ন করেছি এবং ভাঙা সিস্টেমের তুলনায় তুলনা করছি। তাত্ক্ষণিকভাবে, আমি স্পষ্টত ভুল কিছু দেখতে পাচ্ছি না। /etc/bash.bashrcএবং সমস্ত /etc/profileএবং /etc/profile.dফাইলগুলি একটি পরিষ্কার ইনস্টল থেকে অপরিবর্তিত রয়েছে। আমি বাশ উত্স ( apt-get source bash) ডাউনলোড করেছি ./configureএবং উত্সটি খনন করার আগে সমস্যাটি সঙ্কুচিত করার চেষ্টা করার জন্য বিভিন্ন যুক্তি দিয়ে খেলছি ।
নিউক্লিয়ারডগ

আমি বাশ বিয়োগ --disable-readline --enable-minimal-config --disable-job-controlবিয়োগের সাথে সমস্ত ডেবিয়ান প্যাচগুলি সংকলন করেছি , কোন ফাইলগুলি এটি আছে তা দেখার জন্য একটি স্ট্রেস চালালেন open, সেই সমস্ত ফাইলের নাম পরিবর্তন করে আবার লগ ইন করলেন। একই সমস্যা। আমি বাশ নিজেই কোনও কনফিগারেশন পরিবর্তনগুলি অবশ্যই বাতিল করে দিয়েছি।
নিউক্লিয়ারডগ

আমি একই সমস্যাটি জিএনইউ থেকে সরাসরি প্রাপ্ত উত্স থেকে সংকলিত ৩.২, ৪.১ এবং ৪.২ দিয়ে প্রতিলিপি করেছি। আমি জব নিয়ন্ত্রণ না করে এবং কিছু বাগের কারণে বাশ টিমের কাছে ন্যূনতম কনফিগারেশন সহ 4.2 সংকলন করতে অক্ষম ছিলাম। এটি বেশ কয়েকটি সংস্করণের বাশের সাথে ঘটেছিল তা দেওয়া, আমি বিশ্বাস করতে শুরু করেছি যে ত্রুটিটি কোনও লাইব্রেরির উপর নির্ভর করে যার উপর নির্ভর করে। যে দিকে অগ্রসর।
নিউক্লিয়ারডগ

উত্তর:


11

স্ট্রেস আউটপুট সম্পর্কে কিছু আমাকে বগল করছে। যথা মনে হয়েছিল যে ব্যাশ শুরু হওয়ার পরে মনে হয়েছিল ইতোমধ্যে সাইনচিন্কটি মুখোশযুক্ত রয়েছে। নিশ্চিত হওয়া যায়নি, এটি কি থুথু দিচ্ছে তার অর্ধেকটি বুঝতে পারিনি, তবে অবশ্যই এই মুহুর্তে এটি কিছুটা অনুসন্ধানের জন্য মূল্যবান ছিল।

আমি strace -o strace_file bash -lএকটি টিসিএস শেল থেকে দৌড়েছি , যেখানে সমস্যাটি উপস্থিত ছিল না। বাশ কখনই সাইনচিনকে মুখোশ দেয় না। এটি যখন মাস্কিং করছিল তখন এটি কেবল কারণ এটি পূর্ববর্তী মুখোশটি পুনরুদ্ধার করার চেষ্টা করেছিল। তাহলে প্রাথমিক মুখোশটি কোথা থেকে আসছিল?

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

আমি চেষ্টা করেছি ps axwwws(সমস্ত, বিচ্ছিন্ন, প্রশস্ত আউটপুট, সংকেত)। এটি দেখিয়েছিল যে বেশ কয়েকটি প্রসারিত sshd প্রক্রিয়াতে সাইনচিনকে মুখোশ রয়েছে।

সার্ভার / শ্রবণ প্রক্রিয়া (নিজেই sshd) করেন নি। তেমনি প্রক্রিয়াগুলি হোস্টিং সংযোগগুলিও ব্যবহার করে নি যা tcsh ব্যবহার করে। অংশটি আমার কাছে বিভ্রান্ত করছে। আমি অনুমান করছি (আবার এগুলির কোনও সম্পর্কে খুব কমই জেনেছি) যে সিগন্যাল মাস্কটি প্রসেস-গ্রুপ প্রশস্ত বা অন্য কিছু, tcsh এটিকে পুনরায় সেট করে নিচ্ছে এবং এটি এসএসকেও প্রভাবিত করছে।

সুতরাং, আমি এক ঝাঁকুনিতে, আমি টিসিএসের সাথে সংযুক্ত হয়েছি (কোন সাইনওয়াক মুখোশ ছাড়াই একটি পরিচ্ছন্ন শব্দটি পেতে), এসএসএস পুনরায় চালু করেছি, আমার শেলটি আবার বদলে বদলে ... এবং এটি কার্যকর! সবকিছু আবার স্বাভাবিক!

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

একই সমস্যাটি সনাক্ত করতে, চালিত করুন ps axwwws | grep sshdএবং দ্বিতীয় লম্বা কলাম ( BLOCKED) এর সাথে 0x8000000 সেট রয়েছে এর সাথে sshd প্রক্রিয়াগুলি অনুসন্ধান করুন । এটা সাইনচিন্চ। কিছুটা এইরকম:

   0 26425 0000000000000000 0000000008000000 0000000000001000 0000000180004003 Ss   ?          0:00 sshd: aa [priv]
1000 26430 0000000000000000 0000000008000000 0000000000001000 0000000180010000 S    ?          0:02 sshd: aa@pts/24

এটি ঠিক করার জন্য (সম্ভবত সেরা সমাধান নয়, আমার পক্ষে কাজ করেছে):

$ sudo apt-get install tcsh
[snip]
$ chsh -s /bin/tcsh
[connect in with a new connection, leave the old one open in case of any issues with tcsh]
$ sudo /etc/init.d/ssh restart

এবং এটি স্থির

চিয়ার্স!


1

এটা চেষ্টা কর. ডু

bash$ shopt -s checkwinsize

আপনার শেলটিতে, তারপরে আপনার টার্মিনাল উইন্ডোর আকার পরিবর্তন করুন।


2
সার্ভারফল্টে আপনাকে স্বাগতম। আপনি কি লক্ষ্য করেছেন যে ব্যবহারকারী ইতিমধ্যে কয়েক বছর আগে এই সমস্যাটি সমাধান করেছিলেন?
ছানা

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