При использовании последовательной консоли моей системы я всегда получаю $COLUMNS=80
и $LINES=24
.
Хотя я могу изменить эти переменные вручную, это несколько раздражает, когда я изменяю размер окна терминала на стороне клиента.
Обычно я подключаюсь к консоли используя screen /dev/mytty baudrate
.
Изменение $TERM
переменной среды на «screen» или «xterm» не помогает.
Нужно ли мне звонить getty
с некоторыми из них вместо vt100?
Само собой разумеется, что все это прекрасно работает, когда я подключаюсь к той же машине, используя ssh.
источник
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
к одному из конфигов профиля оболочки (например,/etc/profile
,~/.bash_profile
). Это заставит его запускаться после каждой отдельной команды (что было бы хорошо, если вы изменяете размеры окон / панелей с помощью screen / tmux / Terminal-Emulator).res
иres2
являются слишком медленными для чего , кроме использования на первом входе в систему. На моих машинах они оба требуют 0,5 секунды, чтобы закончить ... заставляя все мои команды казаться вялыми (при использовании с ловушкой DEBUG). Упс! Не может этого иметь. Думаю, я буду устанавливатьxterm
.resize
быстрее, чем обычно - 0,002 сек.busybox
казался мне таким же медленным.resize
это не вариант.Для справки, вот ответ на эту проблему (Usenet победил):
Консольные приложения , работающие в виртуальных терминальных приложений (
xterm
,rxvt
и друзей) будет получатьSIGWINCH
после того, как операция изменения размера имеет место. Таким образом, приложение сможет перерисовать окно и т. Д. В соответствующем обработчике сигналов.К сожалению, при использовании последовательной консоли такой механизм отсутствует.
Однако приложение может активно запрашивать текущий размер окна консоли. Итак, вторая лучшая вещь - делать это каждый раз, когда командная строка печатается оболочкой.
Это может быть достигнуто путем компиляции специального исполняемого файла изменения размера, а затем с помощью следующего в
bashrc
:Конечно, это не изменит настройки размера консоли в консольном приложении во время выполнения.
источник
resize
которая установлена в вашей системе.Терминалы «изменяемого размера» как таковые являются результатом NAWS (
Negotiate About Window Size
из RFC 1073 Опция размера окна Telnet ).Если вы подключены напрямую к компьютеру через последовательный порт, согласование не требуется, и компьютер не знает напрямую о размере экрана вашего терминала.
Если терминал может согласовать размер, компьютер отправит
SIGWINCH
приложениям, работающим в терминале, указание им обновить свое представление о размере экрана.Когда компьютер не знает размера экрана, он обычно устанавливает размер, показанный
stty -a
(строки и столбцы), равным нулю. Для интерактивного использования это немного недружелюбно, и некоторые системы используют переменные окруженияLINES
иCOLUMNS
для помощи. Присвоенные значения могут быть получены из описания терминала; чаще они просто жестко закодированы. Соглашение для этих переменных требует, чтобы они вступили в силу, если они явно не подавлены, например, вuse_env
функции приложения curses . С положительной стороны, эти переменные могут быть полезны, когда нет надежной информации. С другой стороны, нет удобного метода для изменения этих переменных.resize
Программа (утилита снабженаxterm
) можно использовать VT100-стиль отчета позиции курсора последовательность для определения размера экрана. Это может быть запущено из командной строки; (опять же) нет удобного способа сделать это автоматически. Как побочный эффект,resize
обновляет информацию о строках / столбцах, видимыхstty
. Его использование для обеспечения обновленных переменных сред в основном полезно для таких случаев, как это, гдеLINES
иCOLUMNS
будет установлены, и должны быть обновлены.источник
Вот еще одно решение, которое отлично сработало для меня в моей встроенной Linux-системе (Overo под управлением Angstrom). Я просто запустил его из моего файла .bashrc. Я не хотел использовать изменение размера, потому что это требует установки некоторых пакетов X, и я не хотел этого.
Сообщаем вашему Raspberry Pi, что ваш терминал больше 24 линий | Мелкий Мысли Блог
источник
Если вы могли бы использовать FreeBSD вместо этого, есть команда resizewin (1) , которая делает именно то, что вы хотите.
источник
При запуске сеанса оболочки по последовательной линии достаточно вызвать
resize
команду внутри этого сеанса - после установления соединения и после каждого изменения геометрии терминала.Команда
resize
является частью xterm, но не зависит от X11. Например, на Fedora он отдельно упакован какxterm-resize
.Как это работает: команда resize измеряет высоту / ширину с помощью некоторых движений курсора, а затем отправляет эти значения в терминал с помощью escape-последовательностей.
С оболочкой , как ЗШ это также автоматически обновляет
LINES
иCOLUMNS
переменные ( в качестве альтернативы, можно оценить экспортные заявления команд печатают на стандартный вывод).Почему это необходимо: при локальном сеансе или сеансе ssh терминал может сигнализировать сеансу об изменениях геометрии (см. SIGWINCH). Этот механизм не работает через последовательное соединение.
источник
Вот простая и быстрая функция изменения размера, которая работает только для bash. Он модифицирован из res2 команды phk и использует bash,
read -d delim
чтобы не дать тайм-ауту закончить чтение.источник