Làm thế nào để giải quyết vấn đề màn hình Terminal bị rối? (thường sau khi thay đổi kích thước)


76

Đôi khi, một màn hình đầu cuối bị rối và khi chúng ta sử dụng man lsđể đọc các trang hoặc nhấn mũi tên LÊN để đi đến các lệnh trước đó trong lịch sử, màn hình sẽ hiển thị các ký tự không đúng vị trí. (ví dụ: coi phần cuối của màn hình là một số ở giữa màn hình).

Lệnh đã resetđược thử và nó sẽ không hoạt động. Một cách hoạt động là đăng xuất hoặc đóng cửa sổ, và thay đổi kích thước cửa sổ trước, sau đó thực hiện ssh(hoặc đóng tab đó và thay đổi kích thước cửa sổ, sau đó mở một tab mới để lấy vỏ mới).

Nhưng theo cách này, chúng ta sẽ mất bất cứ thứ gì chúng ta đã làm trước đây, chẳng hạn như khởi động bảng điều khiển máy ảo, v.v. Vậy nếu chúng ta không đóng vỏ, có cách nào để khắc phục vấn đề này không?

(điều này đã xảy ra trước ngay bên trong Fedora, và cả Macbook sshvào hộp RHEL 5.4).

Cập nhật: Bây giờ tôi nhớ nó đã xảy ra như thế nào trong Fedora: Tôi đã mở Terminal và thực hiện FreeVM để sử dụng bàn điều khiển của Máy ảo (vỏ). Tôi nghĩ rằng nó có kích thước 80 x 25 và sau một thời gian, tôi đã thay đổi kích thước Terminal thành 130 x 50 và sau đó "lớp vỏ bên trong" (của VM) bắt đầu hoạt động kỳ lạ).


Trình giả lập thiết bị đầu cuối nào bạn đang sử dụng? Âm thanh bị hỏng nếu resetkhông giải quyết vấn đề.
jordanm

bất cứ chương trình Terminal nào bên trong Fedora ... và chương trình Terminal mặc định trên Mac OS X Lion.
nopole

Vui lòng xem cập nhật ở trên để biết nó đã xảy ra như thế nào trong Fedora
nopole

3
Câu thần chú là ^Jreset^J, nơi ^Jcó nghĩa là nhấn ctrl-J. Hoặc (trên thiết bị đầu cuối đồ họa) bạn có thể thử Resetnút. Ngoài ra, một số chương trình không được chuẩn bị cho kích thước thiết bị đầu cuối thay đổi bên dưới chúng (vâng, phần mềm cổ còn sống và đang hoạt động) hoặc chỉ hoạt động sai khi thiết bị đầu cuối quá nhỏ.
vonbrand

1
Các vấn đề của tôi bắt nguồn từ việc bash tính toán độ dài của dấu nhắc vì nó có mã màu trong đó; Tôi đã bỏ lỡ các ký tự thoát \ [và \] - xem unix.stackexchange.com/questions/105958/ Kẻ
qneill

Câu trả lời:


93

Nếu bạn đang sử dụng bash, hãy kiểm tra xem tùy chọn "checkwinsize" có được kích hoạt trong phiên của bạn không

shopt | grep checkwinsize

Nếu bạn không nhận được

checkwinsize    on

sau đó kích hoạt nó với

shopt -s checkwinsize

Tài liệu Bash nói về thuộc tính "checkwinsize":

"Nếu được đặt, Bash kiểm tra kích thước cửa sổ sau mỗi lệnh và, nếu cần, sẽ cập nhật các giá trị của LINES và COLUMNS."

Nếu bạn thích cài đặt, bạn có thể kích hoạt checkwinsizetrong ~/.bashrc.

  • Để kích hoạt: shopt -s checkwinsize
  • Để hủy kích hoạt: shopt -u checkwinsize

6
Điều này không xảy ra để giải quyết vấn đề của tôi, nhưng đây là một câu trả lời chung tốt, vì vậy +1 dù sao đi nữa. Tôi nghĩ vấn đề của tôi liên quan đến giả lập Windows (?) Khi ssh-ing vào máy chủ Linux.
genorama

Lúc đầu, có vẻ như nó không hoạt động khi tôi sử dụng mũi tên để xem lịch sử, nhưng ngay sau lệnh thực thi đầu tiên, nó đã sửa mọi thứ. Sử dụng terminator trong trường hợp của tôi. Cảm ơn +1
kstenger

điều này làm việc cho tôi, nhưng chỉ bằng cách tắt checkwinsize. vì một số lý do, LINES = 24 đã được đặt sau mỗi lệnh mặc dù cửa sổ của tôi (chứa phiên picocom) cao hơn nhiều.
Michael

19

Bạn có thể thử Ctrl+ L. Nó xóa và / hoặc vẽ lại màn hình thiết bị đầu cuối, tùy thuộc vào chương trình.


3
nhưng nó không giải quyết được vấn đề vĩnh viễn ...
nopole

Tôi nghĩ ý tôi là, nếu bạn nhấn CTRL L, thì hiện tại dòng này vẫn ổn, nhưng nếu bạn chỉnh sửa lại dòng đó (hoặc trên dòng lệnh tiếp theo bạn nhập), thì vấn đề vẫn còn đó
nopole

11

thêm các tùy chọn này vào docker exec dường như để giải quyết vấn đề của tôi

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

1
bạn có phải là người đã hỏi câu hỏi 5 năm trước không?
Archemar 15/03/18

3
Tôi có thể nói với bạn rằng anh ấy không: "docker" không thực sự phù hợp với "5 năm trước". Docker chưa được phát hành vào tháng một năm 2013 ;-)
jplandrain

8

Tôi đã có cùng một vấn đề và không có công thức nào ở trên làm việc cho tôi vì tôi tin rằng bash của tôi không bao giờ nhận được SIGWINCHtín hiệu, bị kẹt trong quá trình cha mẹ của nó.

Cuối cùng tôi đã tìm thấy một giải pháp. Tôi đã thêm vào .bashrc:

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

Bây giờ mỗi khi tôi nhận được một lời nhắc mới, cửa sổ của tôi được điều chỉnh lại.

Cảm ơn UKmonkey vì sự cải tiến của PROMPT_COMMAND.


2
Cá nhân tôi sẽ thực hiện theo export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"lệnh nhắc nhở cũ, bất kể nó sẽ được giữ nguyên
UKMonkey

Tôi sẽ chỉ chạy thay đổi kích thước bằng tay khi cần thiết. Việc thẩm vấn bàn điều khiển cho kích thước có thể chậm. Thực hiện nó mọi lệnh có vẻ quá mức, và thường bạn biết khi nào nó đã được thay đổi kích thước.
Conrad Meyer

6

Tôi chỉ muốn thêm vào những gì Arcadien đã đề cập. Việc kích hoạt checkwinsize thực hiện thủ thuật, nhưng đối với tôi, điều cần thiết là đặt lại kích thước của cửa sổ để nó hoạt động bình thường. Tôi đoán rằng checkwinsize có nghĩa là để loại bỏ điều này, nhưng vẫn, đáng để bắn. Chỉ cần thử thay đổi kích thước của cửa sổ hoặc không tối đa hóa và tối đa hóa nó đăng tùy chọn này.


1
Dù bạn có tin hay không, đây là tất cả những gì tôi cần để sửa chữa. Buồn cười vì tôi đã thử mọi thứ khác trước.
taranaki

4

Thỉnh thoảng tôi cũng gặp vấn đề tương tự khi sử dụng zsh trên macOS. Một resetlệnh gọi đơn giản thiết lập lại thiết bị đầu cuối theo ý thích của tôi một lần nữa.


Vì vậy, OP đã đề cập rằng điều đó resetkhông hiệu quả với họ, và thực tế đây là điểm của câu hỏi ....
Stephen Rauch

OP đã đề cập về việc nó không hoạt động trên các hương vị Linux. Tôi đã đối mặt với vấn đề trên MacOS Sierra và resetđã làm việc trong trường hợp này. Tôi đã thêm câu trả lời này để giúp bất kỳ ai, những người gặp phải vấn đề tương tự trên MacOS và không biết về resetlệnh.
nonocut

resethoạt động trên Windows Putty với Ubuntu 16.04!
musbach

thiết lập lại hoạt động trên Ubuntu 16.04 zsh
A.Wan

2

Tôi có cùng một vấn đề với bạn và đây là những gì tôi đã làm:
Tôi có một .profilethiết lập trong người dùng của mình, vì vậy đó là nơi tôi thực hiện tất cả các thay đổi của mình.

Có một gói được gọi xtermlà có sẵn thông qua apt-gettôi không biết yum. Nhưng tôi đã cài đặt cục bộ từ nguồn vì tôi không có đặc quyền cài đặt. LINK: http://invisible-island.net/xterm/#d Download

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

Tôi đã xuất đường dẫn trong hồ sơ của mình và gọi nó ở cùng một nơi

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

Vì vậy, bây giờ mỗi khi tôi đăng nhập, kích thước thiết bị đầu cuối được đặt tương ứng bằng cách thay đổi kích thước.


1

Vâng, đó là một vấn đề phổ biến và cần có một giải pháp đơn giản.

Nếu các biện pháp khác như Ctrl + A Ctrl + L không hoạt động, hãy thử sử dụng stty:

  1. Ctrl + T: Mở một tab mới với vỏ cục bộ.
    Hoặc: Rời khỏi màn hình (Ctrl + AD để tách ra) và đăng xuất khỏi phiên SSH của bạn.
  2. stty -a | grep rows: Lấy số lượng hàng và cột.
    Thí dụ:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Quay trở lại tab từ xa của bạn hoặc đăng nhập và màn hình reattach. Đầu sttyra phải khác nhau.
    Thí dụ:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Nhập stty rows Nvà trong stty columns Nđó N là số "thực" (bên ngoài màn hình). Thí dụ:$ stty rows 33; stty columns 133

Nếu bạn sử dụng Terminator , bạn có thể bỏ qua ba bước đầu tiên vì nó hiển thị số lượng cột và hàng ở trên cùng.

Bạn không phải thay đổi kích thước cửa sổ đầu cuối của mình để chạy vào đây. Quản trị viên thường đăng nhập từ các máy tính khác nhau và khi màn hình đính kèm khác nhau về kích thước (độ phân giải), một cửa sổ được tối đa hóa sẽ có kích thước khác nhau trên mỗi máy tính. Thật sự khá khó khăn để không gặp phải điều này thường xuyên.

Và kết quả không chỉ là một số trang người đàn ông không hiển thị đúng. Đó là hầu hết mọi thứ sử dụng máy nhắn tin - một vài dòng đầu tiên thường bị thiếu (ví dụ). Và thậm chí không nghĩ về việc sử dụng VIM trong một thiết bị đầu cuối bị sai lệch như vậy. Bạn muốn làm nổi bật dòng 3 (V) để thay thế nó, nhưng khi bạn làm, văn bản được tô sáng là dòng khác.


CentOS dường như không thay đổi kích thước - sử dụng "stty rows 66" để thực hiện thủ thuật.
Nga

0

Hãy thử stty sane. nó nên làm những gì bạn cần

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.