На Ubuntu 14.04, рабочий стол MATE. Я только что установил терминал Tilda, поэтому добавил его в Startup Applications, как раз как /usr/bin/tilda
. Перезагрузился, увидел запуск Tilda, а затем заметил это:
«Ваш размер экрана 131072x1 — подделка. Ждите неприятностей»
Затем я попробовал killall tilda
снова запустить тильду, то же самое сообщение.
Кто-нибудь знает, как исправить эту проблему с фиктивным размером экрана?
решение1
Что генерирует это сообщение?
Это не производится оболочкой Bourne Again. Это не производится Tilda.
Это производится командой ps
изнабор инструментов procpsвыполнениеэта проверка в своей set_screen_size()
функции. ps
Команда требует, чтобы ваше терминальное устройство было минимум 9 столбцов на 2 строки, чтобы оно могло отображать вещи разумно. Где-то, возможно, без вашего ведома, вы вызываете ps
.
Команда ps
получает размер вашего терминала напрямую из (линейная дисциплина) терминального устройства, подключенного к его стандартным файловым дескрипторам ввода-вывода, и позволяет переопределить его с помощью COLUMNS
переменных LINES
окружения, если их значения являются надлежащими числовыми. Вы можете увидеть, что ps
видит ваша команда, чтобы сделать свое определение, выполнив:
stty размер ; printenv СТОЛБЦЫ СТРОКИВы можете поэкспериментировать с подшучиванием
ps
над , запустив такие команды, как:СТОЛБЦЫ=65535 СТРОК=1 шт.
Если вы установили переменные среды COLUMNS
и LINES
в значения daft 131072×1, как показано в выводе printenv
, то просто не делайте этого. ☺ Однако более вероятно, что само терминальное устройство сообщает этот размер, что вы увидите в выводе stty
. (Обратите внимание, что все, что делает оболочка Bourne Again, checkwinsize
это устанавливает значения этих переменных оболочки, которые, если не экспортируются, даже не передаются команде ps
в ее среде, в тот размер, который сообщает терминальное устройство. Так что checkwinsize
это отвлекающий маневр в том, что если переменные среды бессмысленны, терминальное устройствосам по себе сообщает(Бессмыслица, и последнее является основной проблемой, которую необходимо решить.)
Вот почему, пока он не выдает сообщение, Tilda может быть неисправна. Размер терминального устройства — это общий ресурс, который все, что имеет открытый файловый дескриптор терминального устройства, может произвольно изменять с помощью ioctl()
системного вызова. Но этоусловноустановить, в сценарии, когда используется программное обеспечениепрограмма эмулятора терминалакак Tilda, программой эмулятора терминала, когда изменяется размер окна GUI, в котором отображается эмуляция. Программа эмулятора терминала получает событие изменения размера GUI, преобразует его в столбцы и строки и устанавливает размер устройства с помощью ioctl()
.
Это не значит, что что-то другое не установило размер этой ерунды. В конце концов, вы можете установить егосамдо произвольного бессмысленного размера, просто выполнив, например, команду:
stty столбцы 1 строки 65535
Что приводит нас к…
Как сбросить размер терминального устройства
Если вы оказались в ситуации, когда терминальное устройство сообщает о бессмысленном размере:
- Если вы используете эмулятор терминала GUI, измените размер GUI на столбец/строку или около того. Это должно вызвать
ioctl()
и установить разумный размер терминала. - Установите более разумный размер (например):
stty столбцы 80 строки 25
- Используйте
reset
команду. Обратите внимание, чтоreset
она устанавливает много других параметров, помимо размера терминального устройства. - Если ваш эмулятор терминала совместим с DEC VT340/VT420, отправьте соответствующие управляющие последовательности DECSCPP и DECSLPP/DECSNLS напрямую или используйтенабор инструментов для еды's
console-resize
(также известный какresizecons
) команду для их испускания:изменение размера 80x25