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).

nopole
sumber
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
Arcadien
sumber
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.

BlueBomber
sumber
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
Oran Agra
sumber
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.

Anthony Scemama
sumber
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.

saketrp
sumber
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.

tanpa potongan
sumber
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.

LipatKromatin
sumber
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.

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

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

phil294
sumber