วิธีแก้ปัญหาที่หน้าจอเทอร์มินัลมีปัญหา (ปกติหลังจากการปรับขนาด)


75

บางครั้งหน้าจอเทอร์มินัลจะเลอะและเมื่อเราใช้man lsเพื่ออ่าน manpages หรือกดลูกศรขึ้นเพื่อไปที่คำสั่งก่อนหน้าในประวัติศาสตร์หน้าจอจะแสดงตัวอักษรที่ไม่ถูกต้อง (ตัวอย่างเช่นรักษาจุดสิ้นสุดของหน้าจอเป็นบางส่วนที่อยู่ตรงกลางของหน้าจอ)

คำสั่งresetถูกลองและจะไม่ทำงาน วิธีหนึ่งที่ใช้งานได้คือออกจากระบบหรือปิดหน้าต่างและปรับขนาดหน้าต่างก่อนแล้วจึงทำssh(หรือปิดแท็บนั้นและปรับขนาดหน้าต่างแล้วเปิดแท็บใหม่เพื่อรับเชลล์ใหม่)

แต่ด้วยวิธีนี้เราจะสูญเสียสิ่งที่เราทำไปก่อนหน้านี้เช่นการเริ่มต้นคอนโซลเครื่องเสมือนเป็นต้นดังนั้นหากเราไม่ปิดเชลล์มีวิธีแก้ไขปัญหานี้หรือไม่

(เกิดขึ้นก่อนหน้านี้ภายใน Fedora และสำหรับ Macbook sshในกล่อง RHEL 5.4)

ปรับปรุง:ผมจำได้ว่าตอนนี้วิธีที่มันเกิดขึ้นใน Fedora: ผมเปิด Terminal และได้ FreeVM ใช้คอนโซลของเครื่องเสมือนจริง (เปลือก) ฉันคิดว่ามันมีขนาด 80 x 25 และหลังจากนั้นครู่หนึ่งฉันปรับขนาดเทอร์มินัลเป็น 130 x 50 โดยประมาณจากนั้น "เชลล์ใน" (ของ VM) เริ่มทำงานแปลก ๆ )


คุณใช้เทอร์มินัลอีมูเลเตอร์ใด? เสียงขาดหากresetไม่สามารถแก้ไขปัญหาได้
จอร์แดน

โปรแกรม Terminal ใดก็ตามที่อยู่ภายใน Fedora ... และโปรแกรม Terminal เริ่มต้นบน Mac OS X Lion
nopole

โปรดดูการอัปเดตข้างต้นสำหรับสิ่งที่เกิดขึ้นใน Fedora
nopole

3
คาถามนต์ขลังเป็น^Jreset^Jที่หมายถึงการกด^J ctrl-Jหรือ (บนเทอร์มินัลกราฟิก) คุณสามารถลองใช้Resetปุ่มได้ นอกจากนี้บางโปรแกรมก็ไม่ได้เตรียมพร้อมสำหรับขนาดเทอร์มินัลที่เปลี่ยนแปลงภายใต้โปรแกรมเหล่านั้น (ใช่แล้วซอฟต์แวร์โบราณยังมีชีวิตอยู่และเตะได้) หรืออาจทำงานผิดพลาดได้ไม่ดีเมื่อเทอร์มินัลเล็กเกินไป
vonbrand

1
ปัญหาของฉันเกิดจากการทุบตีคำนวณความยาวของพรอมต์เพราะมันมีรหัสสีอยู่ ฉันหายตัวไปกับตัวละครหลบหนี \ [และ \] - ดูunix.stackexchange.com/questions/105958/…
qneill

คำตอบ:


93

หากคุณกำลังใช้ bash ให้ตรวจสอบว่ามีการเปิดใช้งานตัวเลือก "checkwinsize" ในเซสชันของคุณโดยใช้หรือไม่

shopt | grep checkwinsize

หากคุณไม่ได้รับ

checkwinsize    on

จากนั้นเปิดใช้งานด้วย

shopt -s checkwinsize

เอกสาร Bash บอกว่าสำหรับแอตทริบิวต์ "checkwinsize":

"ถ้าตั้งค่าไว้ Bash จะตรวจสอบขนาดหน้าต่างหลังจากแต่ละคำสั่งและหากจำเป็นให้อัพเดตค่าของ LINES และ COLUMNS"

ถ้าคุณชอบการตั้งค่าให้คุณสามารถเปิดใช้งานในของคุณcheckwinsize~/.bashrc

  • วิธีเปิดใช้งาน: shopt -s checkwinsize
  • วิธีปิดใช้งาน: shopt -u checkwinsize

6
นี่ไม่ได้เกิดขึ้นเพื่อแก้ปัญหาของฉัน แต่นี่เป็นคำตอบทั่วไปที่ดีดังนั้น +1 ฉันคิดว่าปัญหาของฉันเกี่ยวข้องกับ Windows emulation (?) เมื่อ ssh-ing เข้าสู่เซิร์ฟเวอร์ Linux
genorama

ตอนแรกดูเหมือนว่ามันจะไม่ทำงานเมื่อฉันใช้ลูกศรขึ้นเพื่อดูประวัติ แต่หลังจากคำสั่งที่เรียกใช้ครั้งแรกมันแก้ไขทุกอย่าง ใช้ terminator ในกรณีของฉัน ขอบคุณ +1
kstenger

นี้ทำงานให้ฉัน แต่เพียงโดยการเปิดปิด checkwinsize ด้วยเหตุผลบางอย่าง LINES = 24 ถูกตั้งค่าหลังจากแต่ละคำสั่งแม้ว่าหน้าต่างของฉัน (ที่มีเซสชัน picocom) จะสูงกว่ามาก
ไมเคิล

19

คุณสามารถลอง+Ctrl Lมันจะล้างและ / หรือวาดหน้าจอเทอร์มินัลใหม่ขึ้นอยู่กับโปรแกรม


3
แต่มันไม่สามารถแก้ปัญหาได้อย่างถาวร ...
nopole

ฉันคิดว่าฉันหมายความว่าถ้าคุณกด CTRL L แล้วบรรทัดก็โอเค แต่ถ้าคุณแก้ไขบรรทัดอีกครั้ง (หรือบนบรรทัดคำสั่งถัดไปที่คุณพิมพ์) ปัญหาก็ยังคงอยู่
nopole

11

การเพิ่มตัวเลือกเหล่านี้เพื่อนักเทียบท่า exec ดูเหมือนจะแก้ปัญหาของฉัน

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM

1
คุณเป็นคนที่ถามคำถามเมื่อ 5 ปีก่อนหรือไม่?
Archemar

3
ฉันบอกได้เลยว่าเขาไม่ใช่: "นักเทียบท่า" ไม่เหมาะกับ "5 ปีก่อน" นักเทียบท่ายังไม่ได้เปิดตัวในเดือนมกราคม 2013 ;-)
jplandrain

8

ฉันมีปัญหาเดียวกันและไม่มีสูตรใด ๆ ข้างต้นทำงานให้ฉันเพราะฉันเชื่อว่าทุบตีของฉันไม่เคยได้รับSIGWINCHสัญญาณซึ่งติดอยู่โดยกระบวนการของผู้ปกครอง

ในที่สุดฉันก็พบทางออก ฉันเพิ่มไปยัง.bashrc:

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

ตอนนี้ทุกครั้งที่ฉันได้รับพรอมต์ใหม่หน้าต่างของฉันจะถูกปรับใหม่

ขอบคุณUKmonkeyสำหรับการปรับปรุง PROMPT_COMMAND


2
ฉันจะไปด้วยตัวเองexport PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"เพื่อให้พรอมต์คำสั่งสิ่งที่ฉันจะรักษาไว้
UKMonkey

ฉันจะเรียกใช้การปรับขนาดด้วยตนเองเมื่อจำเป็น การสอบสวนขนาดคอนโซลอาจช้า การทำทุกคำสั่งดูเหมือนมากเกินไปและโดยปกติแล้วคุณจะรู้เมื่อมีการปรับขนาด
Conrad Meyer

6

ฉันแค่อยากจะเพิ่มสิ่งที่ Arcadien ได้กล่าวถึงไปแล้ว การเปิดใช้งาน checkwinsize นั้นเป็นการหลอกลวง แต่สำหรับฉันแล้วสิ่งที่จำเป็นคือการรีเซ็ตขนาดของหน้าต่างเพื่อให้ทำงานได้อย่างถูกต้อง ฉันเดาว่าการเช็คอินขนาดนั้นก็เพื่อกำจัดสิ่งนี้ แต่ก็ยังคุ้มค่ากับการยิง เพียงลองเปลี่ยนขนาดของหน้าต่างหรือยกเลิกการขยายใหญ่สุดและขยายขนาดให้ใหญ่ที่สุดเพื่อโพสต์ตัวเลือกนี้


1
เชื่อหรือไม่นี่คือทั้งหมดที่ฉันต้องได้รับการแก้ไข ตลกเพราะฉันลองทุกอย่างก่อนอื่น
taranaki

4

ฉันต้องเผชิญกับปัญหาเดียวกันเป็นครั้งคราวโดยใช้ zsh บน macOS การร้องขอresetคำสั่งอย่างง่ายตั้งค่าเทอร์มินัลตามที่ฉันชอบอีก


ดังนั้น OP จึงกล่าวresetว่าไม่ได้ผลสำหรับพวกเขาและนี่คือประเด็นของคำถาม ....
Stephen Rauch

OP ได้กล่าวถึงเรื่องนี้ว่ามันไม่ทำงานกับรสชาติของ Linux ฉันประสบปัญหาใน MacOS Sierra และresetทำงานในกรณีนี้ ฉันเพิ่มคำตอบนี้เพื่อช่วยให้ทุกคนที่ประสบปัญหาเดียวกันใน MacOS และไม่ทราบเกี่ยวกับresetคำสั่ง
nonocut

resetทำงานบน Windows Putty กับ Ubuntu 16.04!
musbach

รีเซ็ตทำงานในอูบุนตู 16.04 zsh
A.Wan

2

ฉันมีปัญหาเช่นเดียวกับคุณและนี่คือสิ่งที่ฉันทำ:
ฉันมีการ.profileตั้งค่าในผู้ใช้ของฉันดังนั้นฉันจึงทำการเปลี่ยนแปลงทั้งหมดของฉัน

มีแพคเกจที่เรียกว่าเป็นxtermที่สามารถใช้ได้ผ่านผมไม่ทราบเกี่ยวกับapt-get yumแต่ฉันได้ทำการติดตั้งจากแหล่งภายในเนื่องจากฉันไม่มีสิทธิ์การติดตั้ง ลิงค์: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

ฉันส่งออกเส้นทางในโปรไฟล์ของฉันและเรียกใช้ในที่เดียวกัน

export PATH=$PATH:/the/path/you/want/to/install/to
resize

ดังนั้นทุกครั้งที่ฉันเข้าสู่ระบบขนาดเทอร์มินัลจะถูกตั้งค่าตามการปรับขนาด


0

นั่นเป็นปัญหาที่พบบ่อยและควรมีวิธีแก้ปัญหาง่ายๆ

หากมาตรการอื่น ๆ เช่น Ctrl + A Ctrl + L ไม่ทำงานให้ลองใช้stty:

  1. Ctrl + T: เปิดแท็บใหม่ด้วยเชลล์ภายใน
    หรือ: ออกจากหน้าจอ (Ctrl + AD เพื่อแยกออก) และออกจากเซสชัน SSH ของคุณ
  2. stty -a | grep rows: รับจำนวนแถวและคอลัมน์
    ตัวอย่าง:speed 38400 baud; rows 33; columns 133; line = 0;
  3. กลับไปที่แท็บระยะไกลหรือเข้าสู่ระบบและใส่หน้าจออีกครั้ง sttyการส่งออกจะแตกต่างกัน
    ตัวอย่าง:speed 38400 baud; rows 47; columns 177; line = 0;
  4. พิมพ์stty rows Nและstty columns Nที่ N คือหมายเลข "ของจริง" (ด้านนอกของหน้าจอ) ตัวอย่าง:$ stty rows 33; stty columns 133

หากคุณใช้Terminatorคุณสามารถข้ามสามขั้นตอนแรกเพราะจะแสดงจำนวนคอลัมน์และแถวที่ด้านบน

คุณไม่จำเป็นต้องปรับขนาดหน้าต่างเทอร์มินัลเพื่อให้ทำงานได้ ผู้ดูแลระบบมักจะเข้าสู่ระบบจากคอมพิวเตอร์ที่แตกต่างกันและเมื่อจอภาพที่แนบมามีขนาดแตกต่างกัน (ความละเอียด) หน้าต่างที่ขยายใหญ่สุดจะมีขนาดแตกต่างกันในคอมพิวเตอร์แต่ละเครื่อง มันค่อนข้างยากที่จะไม่เจอบ่อยๆ

และผลลัพธ์นั้นไม่เพียง แต่หน้าคนบางหน้าไม่แสดงขึ้นอย่างถูกต้อง มันเป็นอะไรที่ใช้เพจเจอร์ - สองสามบรรทัดแรกมักจะหายไป (ตัวอย่าง) และอย่าแม้แต่คิดเกี่ยวกับการใช้ VIM ในเทอร์มินัลที่ไม่ตรงแนว คุณต้องการเน้นบรรทัดที่ 3 (V) เพื่อแทนที่ แต่เมื่อคุณทำข้อความที่ไฮไลต์คือของอีกบรรทัดหนึ่ง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.