Вопрос или проблема
Перестаньте читать, если uname -r
возвращает версию Linux старше 5.9, так как функция прокрутки была просто удалена (1, 2).
На моей клавиатуре нет отдельных клавиш PgUp и PgDown. Они находятся на цифровой клавиатуре, разделяя свое положение с KP_9 и KP_3.
Прокрутка терминалов с помощью Shift+Pg{Up,Down}
была невозможна как с включенным, так и с выключенным Numlock.
Поскольку мне не важны цифры на цифровой клавиатуре, но очень важна прокрутка, я успешно перенастроил их в X11 на “Prior” и “Next” независимо от состояния Numlock, и теперь Shift+{PgUp,Down}
работает в Xterm.
Тем не менее, я не могу достичь того же в TTY. С другими клавиатурами, которые имели отдельные клавиши Page, я мог использовать Shift+PgUp
, чтобы прокрутить назад после просмотра большого файла с помощью cat
, например.
Оригинальные коды клавиш
Согласно showkeys
:
KP_3/KP_PgUp = 73
KP_9/KP_PgDown = 81
Slash = 89
Правый Shift = 54
Согласно dumpkeys
:
PgUp = 104
PgDown = 109
Slash и Правый Shift также были перечислены, потому что я также планирую их поменять для тестирования.
Попытки
-
Изменил
/etc/console-setup/remap.inc
на следующее:keycode 73 = Prior shift keycode 73 = Scroll_Backward shift shiftl keycode 73 = Scroll_Backward shift shiftr keycode 73 = Scroll_Backward shift shiftl shiftr keycode 73 = Scroll_Backward shift ctrll keycode 73 = Scroll_Backward shift shiftl ctrll keycode 73 = Scroll_Backward shift shiftr ctrll keycode 73 = Scroll_Backward shift shiftl shiftr ctrll keycode 73 = Scroll_Backward keycode 81 = Next shift keycode 81 = Scroll_Forward shift shiftl keycode 81 = Scroll_Forward shift shiftr keycode 81 = Scroll_Forward shift shiftl shiftr keycode 81 = Scroll_Forward shift ctrll keycode 81 = Scroll_Forward shift shiftl ctrll keycode 81 = Scroll_Forward shift shiftr ctrll keycode 81 = Scroll_Forward shift shiftl shiftr ctrll keycode 81 = Scroll_Forward keycode 89 = Shift keycode 54 = slash shift keycode 54 = question altgr keycode 54 = degree shift altgr keycode 54 = questiondown
-
Следовал инструкциям Как изменить раскладку клавиатуры консоли в Linux?.
dumpkeys > pageupdown
Затем поменял
keycode 73 keycode 104 keycode 81 keycode 109 keycode 54 keycode 89
в этом файле и выполнил
loadkeys -s pageupdown
.
Результаты
В обоих экспериментах,
-
Хотя две клавиши цифровой клавиатуры больше не печатают цифры и
PgUp
все еще работает (он прокручивает вless
) как и ожидалось,Shift+PgUp
не прокручивает TTY. -
Правый Shift и Slash были корректно поменяны местами.
Дополнительные примечания
-
Переключение Numlock не помогает в ни одной из конфигураций. Клавиша Fn также не имеет никакого эффекта на эти клавиши.
-
Я также пробовал переназначить более обычные клавиши, а именно
l
иp
, на действия Page, но безуспешно. -
Если это может помочь, это раскладка XKB, которая работает в X-сессии:
partial keypad_keys xkb_symbols "noKPNumbers" { key <KP9> { [ Prior, Prior ] }; key <KP3> { [ Next, Next ] }; };
Как я могу переназначить клавиши PgUp и PgDown на цифровой клавиатуре так, чтобы Shift+Pg{Up,Down}
прокручивали буфер TTY? Возможно ли это вообще?
Причина, по которой это не работает, заключается в том, что вы пытаетесь добавить элемент управления формой к бесформенному выводу. Буфера для прокрутки нет.
Это может показаться нелогичным, поэтому позвольте мне объяснить. TTY — это исторический артефакт, когда вывод консоли шел на реальное устройство TTY или TeleTYpe. Это был последовательный терминальный принтер, посмотрите на LA120 от DEC в качестве примера. На самом деле вы все еще можете сделать это, подключив линейный принтер к /dev/tty. Некоторые серверные аппаратные средства также позволяют перенаправлять этот вывод на уровне BIOS на последовательное устройство. Это очень полезно, если вы знаете, как использовать это в самых худших сценариях устранения неполадок аппаратного обеспечения.
Принтер TTY печатал каждую строку так, как она происходила, и затем бумага накапливалась на полу в операционной комнате. То, что на экране, — это просто то, что было напечатано в буфере экрана; другой сохраняемой информации для прокрутки нет.
Консоль TTY предназначена как последняя попытка сохранить какой-то лог, даже когда все остальное не работает. Именно здесь появляется сообщение о переполнении диска или ошибка сегментации, которая останавливает систему, чтобы дать оператору какое-то представление о том, почему система потребляет электричество, но не является иначе полезной.
Ответ или решение
К сожалению, в TTY (терминал) в Linux нет возможности использовать сочетание клавиш Shift + PgUp и Shift + PgDown для прокрутки буфера, поскольку это сочетание не обрабатывается как команды, которые могли бы создать буфер для прокрутки. Причиной этому служит исторический контекст TTY, который изначально предназначался для работы с физическими терминалами, а не для обработки визуальных интерфейсов с низким уровнем абстракции.
Понимание функциональности TTY
TTY (Teletypewriter) — это термины, которые берет свое начало из ранних экранирующих устройств, таких как принтеры и терминалы. Все выводимые данные отправляются непосредственно на экран, и тем самым экран не сохраняет никаких данных для последующей обработки, как это делают современные графические интерфейсы. То есть информация отображается на экране в режиме реального времени без создания буфера для последующей прокрутки. Как только данные отображаются, возможности для изменения их местоположения отсутствуют; они просто теряются, если экран заполняется.
Тем не менее, решение возможно
Существуют альтернативы для работы с данными в TTY. Вот несколько подходов к решению вашей проблемы:
-
Применение программного обеспечения для имитации терминала:
- Используйте такие программы, как
screen
илиtmux
. Эти утилиты позволяют создавать виртуальные терминалы, которые имеют собственные буферы прокрутки. В них вы сможете использовать сочетания клавиш, аналогичные Shift + PgUp и Shift + PgDown, для прокрутки назад и вперед по выводу.
- Используйте такие программы, как
-
Использование файлового вывода:
- Вместо вывода данных непосредственно на экран, вы можете перенаправлять их в файл и затем просматривать файл с помощью
less
. Например:some_command > output.txt less output.txt
- В
less
прокрутка осуществляет свою работу корректно и позволяет использовать PgUp и PgDown.
- Вместо вывода данных непосредственно на экран, вы можете перенаправлять их в файл и затем просматривать файл с помощью
-
Переход на различные уровни сопровождения:
- В некоторых случаях может оказаться полезным использование
cat
в сочетании с другими командами, такими какmore
, чтобы обеспечить возможность прокрутки. Тем не менее, это также будет требовать предварительного определения вывода или использования буфера.
- В некоторых случаях может оказаться полезным использование
-
Конфигурация клавиатуры:
- Как вы уже заметили, перенастройка клавиш можно осуществить в X11. Однако в TTY это не обеспечит необходимого результата, поскольку система не распознает никакие изменения в сопоставлении клавиш.
Заключение
К сожалению, возможность прокрутки в TTY, особенно через сочетание клавиш Shift + PgUp и Shift + PgDown, не доступна в силу архитектурных ограничений самого TTY. Однако использование таких программ, как screen
и tmux
, создание файла вывода и просмотр его с использованием less
, сможет решить вашу проблему и предоставить необходимые функции, такие как прокрутка. Это улучшит вашу повседневную работу с терминалом и предоставит доступ к важной информации.