Вопрос или проблема
Есть ли способ изменить скорость прокрутки текстовой консоли без перезагрузки? В настоящее время использую Fedora, но буду признателен за обходные решения, не привязанные к дистрибутиву.
https://www.kernel.org/doc/Documentation/fb/vesafb.txt
Я хотел бы использовать ‘ywrap’ в документации выше в параметрах ядра для vesafb, не перезагружая ядро для его тестирования.
stty
не имеет значения.
Установленная скорость линии оборудования через дисциплину соединения не имеет смысла для виртуального терминала, если она не нулевая. Она имеет значение только для “терминалов”, сформированных с помощью реальных последовательных устройств, потому что контролирует скорость линии последовательного устройства. Встроенный терминал ядра не использует последовательных устройств.
ywrap
не является панацеей.
Аппаратные механизмы дисплея, такие как те, которые включены с помощью ywrap
, могут помочь терминальному эмулятору только с (почти) полноразмерной прокруткой по высоте строки.
По очевидным причинам терминальный эмулятор не может использовать такие аппаратные механизмы вообще, если он поддерживает левые и правые отступы, и, следовательно, действия прокрутки не прокручивают всю ширину строки. Встроенный терминал ядра Linux не поддерживает управляющую последовательность DECSLRM (“DEC установить левые и правые отступы”) (или что-то подобное) изначально, поэтому прокрутка частичных строк не представляет здесь опасения.
Но прокрутка частичной высоты представляет опасность. Встроенный терминал ядра Linux поддерживает управляющую последовательность DECSTBM (“DEC установить верхние и нижние отступы”), которая позволяет приложениям устанавливать первую и последнюю строки на экране для участия в прокрутке. Эта управляющая последовательность правильно указана как возможность change_scroll_region
в записи термина linux
. Использование таких регионов прокрутки действительно довольно распространено в полноэкранных TUI-приложениях. Например, vim
использует их при прокрутке окон на всю ширину.
Драйвер fbcon
ядра Linux использует механизм ywrap
только в том случае, если более трех четвертей всего изображения экрана сохраняется и перемещается с помощью действия прокрутки. Это происходит потому, что прокрутка частичной высоты с использованием ywrap
также включает в себя некое копирование, так что “непрокрученные” части экрана кажутся оставшимися на одном месте, даже если аппаратное средство прокрутило весь экран. Чем меньше регион прокрутки, тем менее полезен ywrap
, потому что большее количество копирования должно иметь место, чтобы создать иллюзию того, что некоторые части дисплея не были прокручены.
Управляющие последовательности не поддерживаются.
На реальных терминалах, в отличие от виртуальных терминалов, иногда есть управляющие последовательности, которые позволяют выбирать скорости прокрутки. Например: Семейство DEC VT имеет флаг, называемый DECSCLM (“Режим прокрутки DEC”, закрытый режим DEC #4). Если сброшен (через управляющую последовательность ECMA-48 RM), терминал прокручивает так быстро, как может. Если установлен (через управляющую последовательность ECMA-48 SM), терминал прокручивает медленнее, вставляя задержки во время прокрутки.
Если бы встроенный терминал ядра Linux был полноценной эмуляцией DEC VT, это был бы соответственно способ управления скоростью прокрутки. Но это не так. Хотя некоторые терминальные эмуляторы пользовательского пространства, такие как xterm
, реализуют этот флаг режима, мне не известно о существовании терминального эмулятора ядра, который бы делал это. Встроенный терминал ядра Linux определенно не делает этого.
Вы можете удалить модуль драйвера кадровой буфера ядра Linux без перезагрузки, если скажете подсистеме VT прекратить его использование (см. Documentation/console/console.txt для подробностей):
# tl;dr
reload_fb() {
echo 0 > /sys/devices/virtual/vtconsole/vtcon1/bind
rmmod uvesafb
modprobe uvesafb scroll=ywrap
}
reload_fb
Внимание: Если vtcon0 – это фиктивный драйвер (например, на EFI) или если есть ошибки (в прошивках BIOS часто бывают ошибки), это может оставить вас без работающего дисплея консоли, пока вы не перезагрузите или не загрузите работающий драйвер fb. Работает только дисплей; вы все еще можете вводить команды, но не сможете видеть их вывод. X11, похоже, не затрагивается. Поэтому Я рекомендую вам войти удаленно через SSH или через терминал X на том же компьютере.
Примечание: Если вы используете драйвер uvesafb
(как предложил eyoung100), вам также нужно будет установить пакет v86d
.
Вы можете перечислить все загруженные драйверы консоли:
[root@linflas ~]# cd /sys/devices/virtual/vtconsole
[root@linflas vtconsole]# grep -H "" vtcon*/[bn]*
vtcon0/bind:0
vtcon0/name:(S) фиктивное устройство
vtcon1/bind:1
vtcon1/name:(M) устройство кадрового буфера
Ответ или решение
Изменение скорости прокрутки текстового консоли в Linux без перезагрузки системы — это задача, которая требует внимательного подхода. Хотя операционная система Fedora и предоставляет много возможностей, основные методы подходят для всех дистрибутивов Linux. Рассмотрим ряд шагов и практическую информацию по этому вопросу.
Понимание проблемы
Для начала, стоит отметить, что скорость прокрутки в текстовом консоли нередко определяется аппаратными средствами и драйверами. Для изменения данного параметра необходимо понять, какой именно драйвер используется для отображения консоли. Например, драйвер fbcon
работает напрямую с фреймбуфером, и у него есть специфические параметры, которые можно настроить.
Использование механизма ywrap
Параметр ywrap
, который упоминается в документации к vesafb
, позволяет более эффективно использовать аппаратные возможности при прокрутке. Однако для его активации потребуется перезагрузка системы, если не воспользоваться обходными путями.
Активация ywrap
без перезагрузки
-
Отключение текущего фреймбуфера:
Для начала, если вы хотите изменить настройки фреймбуфера, вам нужно отключить его. Это можно сделать командой:echo 0 > /sys/devices/virtual/vtconsole/vtcon1/bind
-
Удаление драйвера:
Затем нужно удалить текущий модуль фреймбуфера, например,uvesafb
:rmmod uvesafb
-
Загрузка модуля с новыми параметрами:
После этого можно загрузить модуль снова с нужными параметрами:modprobe uvesafb scroll=ywrap
Эти шаги позволят вам активировать параметр ywrap
без перезагрузки системы.
Важные замечания
-
Прежде чем выполнять эти команды, рекомендуется подключиться к системе удаленно через SSH или работать в графической среде, чтобы избежать потери выхода в консоль. Работая только в текстовом режиме, вы рискуете остаться без видимого вывода после изменений.
-
Обратите внимание, что не всегда использование
ywrap
даст ожидаемый эффект. Эффективность прокрутки будет зависеть от ряда факторов, включая разрешение экрана и объем данных, которые необходимо прокрутить.
Альтернативные методы управления прокруткой
К сожалению, встроенные в ядро Linux терминальные эмуляторы, как правило, не поддерживают более сложные методы управления скоростью прокрутки, которые могут быть доступны на реальных терминалах. Тем не менее, использование утилит, которые имитируют поведение терминала, таких как xterm
или screen
, может предоставить пользователю больше гибкости и возможностей для настройки.
Заключение
Изменение скорости прокрутки текстового консоли на Linux — это задача, требующая понимания взаимодействия между ядром, драйверами и аппаратным обеспечением. Способ, описанный выше, позволяет сделать это без перезагрузки системы. Однако следует проявлять осторожность и проводить операции, увеличивающие вероятность ошибок, с учетом их воздействия на взаимодействие с системой.