Bagaimana mengatasi masalah bahwa layar Terminal kacau? (biasanya setelah mengubah ukuran)


76

Kadang-kadang, layar terminal kacau, dan ketika kita gunakan man lsuntuk membaca halaman manual, atau tekan panah ATAS untuk pergi ke perintah sebelumnya dalam sejarah, layar akan menampilkan karakter bukan sebagai tempat yang tepat. (misalnya, perlakukan ujung layar seperti di bagian tengah layar).

Perintah resetdicoba dan tidak akan berhasil. Salah satu cara yang berhasil adalah dengan keluar atau menutup jendela, dan mengubah ukuran jendela terlebih dahulu, lalu lakukan ssh(atau tutup tab itu, dan ubah ukuran jendela, lalu buka tab baru untuk mendapatkan shell baru).

Tetapi dengan cara ini, kita akan kehilangan apa pun yang sebelumnya kita lakukan, seperti memulai konsol mesin virtual, dll. Jadi jika kita tidak menutup shell, apakah ada cara untuk memperbaiki masalah ini?

(Ini terjadi sebelum tepat di dalam Fedora, dan juga untuk Macbook sshke kotak RHEL 5.4).

Pembaruan: Saya ingat sekarang bagaimana hal itu terjadi di Fedora: Saya membuka Terminal, dan melakukan FreeVM untuk menggunakan konsol dari Mesin Virtual (shell). Saya pikir itu ukuran 80 x 25 dan kemudian setelah beberapa saat, saya mengubah ukuran Terminal menjadi 130 x 50 kira-kira, dan kemudian "kulit dalam" (dari VM) mulai berperilaku aneh).


Emulator terminal apa yang Anda gunakan? Terdengar rusak jika resettidak menyelesaikan masalah.
jordanm

program Terminal apa pun di dalam Fedora ... dan program Terminal default di Mac OS X Lion.
nopole

Silakan lihat pembaruan di atas untuk bagaimana hal itu terjadi di Fedora
nopole

3
Mantra magis adalah ^Jreset^J, di mana ^Jberarti menekan ctrl-J. Atau (pada terminal grafis) Anda dapat mencoba Resettombolnya. Juga, beberapa program tidak siap untuk mengubah ukuran terminal di bawahnya (ya, perangkat lunak kuno hidup dan menendang) atau hanya berperilaku buruk ketika terminal menjadi terlalu kecil.
vonbrand

1
Masalah saya berasal dari bash salah menghitung panjang prompt karena ada kode warna di dalamnya; Saya melewatkan karakter pelarian \ [dan \] - lihat unix.stackexchange.com/questions/105958/…
qneill

Jawaban:


93

Jika Anda menggunakan bash, periksa apakah opsi "checkwinsize" diaktifkan di sesi Anda menggunakan

shopt | grep checkwinsize

Jika Anda tidak mengerti

checkwinsize    on

lalu aktifkan dengan

shopt -s checkwinsize

Dokumentasi Bash mengatakan untuk atribut "checkwinsize":

"Jika diatur, Bash memeriksa ukuran jendela setelah setiap perintah dan, jika perlu, memperbarui nilai-nilai LINES dan COLUMNS."

Jika Anda menyukai pengaturan, Anda dapat mengaktifkan checkwinsizedi ~/.bashrc.

  • Mengaktifkan: shopt -s checkwinsize
  • Untuk menonaktifkan: shopt -u checkwinsize

6
Ini tidak terjadi untuk menyelesaikan masalah saya, tetapi ini adalah jawaban umum yang baik, jadi +1 tetap saja. Saya pikir masalah saya berkaitan dengan emulasi Windows (?) Ketika ssh-ing ke server Linux.
geneorama

Pada awalnya sepertinya itu tidak berfungsi ketika saya menggunakan panah untuk melihat sejarah, tetapi tepat setelah perintah pertama dieksekusi itu memperbaiki semuanya. Menggunakan terminator dalam kasus saya. Terima kasih +1
kstenger

ini bekerja untuk saya, tetapi hanya dengan mematikan checkwinsize. untuk beberapa alasan, LINES = 24 sedang diset setelah setiap perintah meskipun jendela saya (berisi sesi picocom) jauh lebih tinggi.
Michael

19

Anda dapat mencoba Ctrl+ L. Ini membersihkan dan / atau menggambar ulang layar terminal, tergantung pada programnya.


3
tetapi itu tidak secara permanen menyelesaikan masalah ...
nopole

Saya pikir yang saya maksudkan adalah, jika Anda menekan CTRL L, maka salurannya ok untuk saat ini, tetapi jika Anda mengeditnya lagi (atau pada baris perintah berikutnya yang Anda ketikkan), maka masalahnya masih ada
nopole

11

menambahkan opsi ini ke exec buruh pelabuhan tampaknya menyelesaikan masalah saya

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

1
apakah Anda yang mengajukan pertanyaan 5 tahun yang lalu?
Archemar

3
Saya dapat memberitahu Anda dia tidak: "buruh pelabuhan" tidak benar-benar cocok dengan "5 tahun yang lalu". Docker belum dirilis pada Januari 2013 ;-)
jplandrain

8

Saya memiliki masalah yang sama dan tidak ada resep di atas yang bekerja untuk saya karena saya percaya bahwa bash saya tidak pernah menerima SIGWINCHsinyal, yang terjebak oleh proses induknya.

Saya akhirnya menemukan solusi. Saya menambahkan ke .bashrc:

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

Sekarang setiap kali saya mendapatkan prompt baru, jendela saya disesuaikan kembali.

Terima kasih kepada UKmonkey untuk peningkatan PROMPT_COMMAND.


2
Saya pribadi akan pergi dengan itu export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"sehingga perintah cepat yang lama, apa pun yang saya dapat akan dipertahankan
UKMonkey

Saya hanya akan menjalankan mengubah ukuran secara manual bila diperlukan. Menginterogasi konsol untuk ukuran bisa lambat. Melakukannya setiap perintah tampaknya berlebihan, dan biasanya Anda tahu kapan itu telah diubah ukurannya.
Conrad Meyer

6

Saya hanya ingin menambahkan apa yang sudah disebutkan Arcadien. Pemberian checkwinsize berfungsi, tetapi bagi saya, yang diperlukan adalah mengatur ulang ukuran jendela agar berfungsi dengan benar. Saya kira checkwinsize dimaksudkan untuk menghilangkan ini, tetapi masih, layak dicoba. Coba ubah ukuran jendela atau un-memaksimalkan dan memaksimalkannya memposting opsi ini.


1
Percaya atau tidak, hanya ini yang perlu saya perbaiki. Lucu karena saya mencoba yang lain dulu.
taranaki

4

Saya menghadapi masalah yang sama dari waktu ke waktu menggunakan zsh di macOS. Doa sederhana resetperintah membuat terminal sesuai dengan keinginan saya lagi.


Jadi OP menyebutkan bahwa resetitu tidak bekerja untuk mereka, dan ini sebenarnya adalah inti dari pertanyaan ....
Stephen Rauch

OP telah menyebutkan tentang itu tidak bekerja dengan citarasa Linux. Saya menghadapi masalah pada MacOS Sierra dan resetbekerja dalam kasus ini. Saya menambahkan jawaban ini untuk membantu siapa saja, yang menghadapi masalah yang sama pada MacOS dan tidak mengetahui tentang resetperintah.
nonocut

resetberfungsi di Windows Putty dengan Ubuntu 16.04!
Musbach

reset bekerja di ubuntu 16.04 zsh
A.Wan

2

Saya memiliki masalah yang sama dengan Anda dan ini adalah apa yang saya lakukan:
Saya memiliki .profilepengaturan di pengguna saya, jadi di situlah saya melakukan semua perubahan saya.

Ada paket yang disebut xtermyang tersedia melalui apt-getsaya tidak tahu yum. Tapi saya melakukan instalasi lokal dari sumber karena saya tidak memiliki hak instalasi. LINK: http://invisible-island.net/xterm/#download

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

Saya mengekspor jalur di profil saya dan memintanya di tempat yang sama

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

Jadi sekarang setiap kali saya masuk, ukuran terminal diatur sesuai dengan ukurannya.


1

Nah, itu masalah umum dan harus ada solusi sederhana.

Jika tindakan lain seperti Ctrl + A Ctrl + L tidak berfungsi, coba gunakan stty:

  1. Ctrl + T: Buka tab baru dengan shell lokal.
    Atau: Tinggalkan layar (Ctrl + AD untuk melepaskan) dan keluar dari sesi SSH Anda.
  2. stty -a | grep rows: Dapatkan jumlah baris dan kolom.
    Contoh:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Kembali ke tab jarak jauh atau masuk dan pasang kembali layar. The sttyoutput harus berbeda.
    Contoh:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Ketik stty rows Ndan di stty columns Nmana N adalah nomor "nyata" (di luar layar). Contoh:$ stty rows 33; stty columns 133

Jika Anda menggunakan Terminator , Anda dapat melewati tiga langkah pertama karena ini menunjukkan jumlah kolom dan baris di bagian atas.

Anda tidak perlu mengubah ukuran jendela terminal Anda untuk mengalami hal ini. Admin biasanya masuk dari komputer yang berbeda dan ketika monitor yang terpasang memiliki ukuran (resolusi) yang berbeda, sebuah jendela yang dimaksimalkan akan memiliki ukuran yang berbeda di setiap komputer. Sebenarnya agak sulit untuk tidak sering mengalami hal ini.

Dan hasilnya bukan hanya beberapa halaman manual tidak muncul dengan benar. Cukup banyak yang menggunakan pager - beberapa baris pertama sering hilang (misalnya). Dan bahkan tidak berpikir untuk menggunakan VIM di terminal yang tidak selaras. Anda ingin menyorot baris 3 (V) untuk menggantikannya, tetapi ketika Anda melakukannya, teks yang disorot adalah teks dari baris lain.


CentOS tampaknya tidak memiliki ukuran - gunakan "stty rows 66" untuk melakukan trik.
Russ

0

Coba stty sane. itu harus melakukan apa yang Anda butuhkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.