Saat menggunakan konsol serial sistem saya, saya selalu berakhir dengan $COLUMNS=80
dan $LINES=24
.
Walaupun saya dapat mengubah variabel-variabel ini secara manual, agak menjengkelkan untuk melakukan ini kapan saja ketika jendela terminal sisi klien telah diubah ukurannya.
Biasanya saya terhubung ke konsol menggunakan screen /dev/mytty baudrate
.
Mengubah $TERM
variabel lingkungan ke "layar" atau "xterm" tidak membantu.
Apakah saya perlu menelepon getty
dengan beberapa dari mereka, bukan vt100?
Tidak perlu dikatakan bahwa semua ini berfungsi dengan baik, ketika saya terhubung ke mesin yang sama menggunakan ssh.
sumber
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
ke salah satu konfigurasi profil shell (misalnya/etc/profile
,,~/.bash_profile
). Ini akan membuatnya dijalankan setelah setiap perintah tunggal (yang hanya akan menjadi hal yang baik jika Anda mengubah ukuran jendela / panel dengan layar / tmux / terminal-emulator).res
&res2
terlalu lambat untuk apa pun kecuali digunakan pada login pertama. Di mesin saya, mereka berdua mengambil 0,5sec untuk menyelesaikan ... membuat semua perintah saya tampak lamban (bila digunakan dengan perangkap DEBUG). Aduh! Tidak dapat memiliki itu Kira saya akan menginstalxterm
.resize
adalah waaaay lebih cepat - biasanya 0,002sec.busybox
es tampaknya lambat bagi saya.resize
bukan pilihan.Sebagai catatan, berikut adalah jawaban untuk Masalah ini (Usenet menang):
Aplikasi Konsol yang berjalan di dalam aplikasi terminal virtual (
xterm
,rxvt
dan teman) akan menerimaSIGWINCH
setelah operasi pengubahan ukuran telah terjadi. Dengan demikian aplikasi akan dapat menggambar ulang jendela dll dalam penangan sinyal yang sesuai.Sayangnya saat menggunakan konsol serial, tidak ada mekanisme seperti itu.
Namun dimungkinkan untuk aplikasi untuk secara aktif meminta ukuran Window konsol saat ini . Jadi, hal terbaik kedua adalah melakukan ini setiap kali prompt perintah dicetak oleh shell.
Ini dapat dicapai dengan terlebih dahulu mengkompilasi ukuran khusus yang dapat dieksekusi dan kemudian menggunakan yang berikut di
bashrc
:Tentu saja ini tidak akan mengubah pengaturan ukuran konsol dalam aplikasi konsol selama runtime.
sumber
resize
yang diinstal pada sistem Anda.Terminal "Resizable" adalah hasil dari NAWS (
Negotiate About Window Size
dari RFC 1073 Pilihan Ukuran Jendela Telnet ).Jika Anda terhubung langsung ke komputer menggunakan port serial, tidak ada negosiasi yang terlibat, dan komputer tidak memiliki pengetahuan langsung tentang ukuran layar terminal Anda.
Jika terminal dapat menegosiasikan ukuran, komputer akan mengirim
SIGWINCH
ke aplikasi yang berjalan di terminal, memberi tahu mereka untuk memperbarui gagasan screensize mereka.Ketika komputer tidak mengetahui screensize, biasanya mengatur ukuran yang ditunjukkan oleh
stty -a
(baris dan kolom) menjadi nol. Untuk penggunaan interaktif, ini sedikit tidak ramah, dan beberapa sistem menggunakan variabel lingkunganLINES
danCOLUMNS
untuk membantu. Nilai yang diberikan dapat diturunkan dari deskripsi terminal; lebih sering mereka hanya hardcoded. Konvensi untuk variabel-variabel ini mensyaratkan bahwa mereka berlaku kecuali ditekan secara eksplisit, misalnya, dalamuse_env
fungsi aplikasi kutukan . Di sisi positif, variabel-variabel itu dapat berguna ketika tidak ada informasi yang dapat diandalkan tersedia. Di sisi negatif, tidak ada metode yang mudah untuk mengubah variabel-variabel tersebut.The
resize
Program (utilitas disediakan denganxterm
) dapat menggunakan VT100 gaya laporan posisi kursor urutan escape untuk menentukan ukuran layar. Ini dapat dijalankan dari baris perintah; tidak ada lagi cara mudah untuk melakukannya secara otomatis. Sebagai efek samping,resize
memperbarui informasi pada baris / kolom yang dilihat olehstty
. Penggunaannya untuk menyediakan variabel lingkungan diperbarui terutama berguna untuk kasus-kasus seperti ini, di manaLINES
danCOLUMNS
yang ditetapkan, dan harus diperbarui.sumber
Berikut adalah solusi lain yang bekerja sangat baik untuk saya pada sistem Linux yang tertanam (Overo menjalankan Angstrom). Saya baru saja menjalankannya dari file .bashrc saya. Saya tidak ingin menggunakan pengubahan ukuran karena itu perlu menginstal beberapa paket X, dan saya tidak menginginkannya.
Memberitahu Raspberry Pi Anda bahwa terminal Anda lebih besar dari 24 baris | Blog Pikiran Dangkal
sumber
Jika Anda dapat menggunakan FreeBSD sebagai gantinya, ada perintah resizewin (1) , yang melakukan persis apa yang Anda inginkan.
sumber
Saat menjalankan sesi shell melalui jalur serial, cukup memanggil
resize
perintah di dalam sesi itu - setelah membuat koneksi dan setelah setiap perubahan geometri terminal.The
resize
Perintah merupakan bagian dari xterm tetapi tidak tergantung pada X11. Misalnya, pada Fedora itu secara terpisah dikemas sebagaixterm-resize
.Bagaimana cara kerjanya: perintah resize mengukur tinggi / lebar melalui beberapa gerakan kursor dan kemudian mengirimkan nilai-nilai tersebut ke terminal melalui escape sequence.
Dengan shell seperti zsh, ini juga secara otomatis memperbarui
LINES
danCOLUMNS
variabel (sebagai alternatif, seseorang dapat mengevaluasi pernyataan ekspor yang dicetak perintah ke stdout).Mengapa ini perlu: dengan sesi lokal atau ssh terminal dapat memberi sinyal sesi tentang perubahan geometri (lih. SIGWINCH). Mekanisme ini tidak berfungsi melalui koneksi serial.
sumber
Berikut adalah fungsi pengubahan ukuran sederhana dan cepat yang hanya berfungsi untuk bash. Itu dimodifikasi dari res2 phk, memanfaatkan bash
read -d delim
untuk menghindari membiarkan batas waktu selesai membaca.sumber