Прокрутка TTY без выделенных клавиш PgUp и PgDown

Вопрос или проблема

Перестаньте читать, если 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. Вот несколько подходов к решению вашей проблемы:

  1. Применение программного обеспечения для имитации терминала:

    • Используйте такие программы, как screen или tmux. Эти утилиты позволяют создавать виртуальные терминалы, которые имеют собственные буферы прокрутки. В них вы сможете использовать сочетания клавиш, аналогичные Shift + PgUp и Shift + PgDown, для прокрутки назад и вперед по выводу.
  2. Использование файлового вывода:

    • Вместо вывода данных непосредственно на экран, вы можете перенаправлять их в файл и затем просматривать файл с помощью less. Например:
      some_command > output.txt
      less output.txt
    • В less прокрутка осуществляет свою работу корректно и позволяет использовать PgUp и PgDown.
  3. Переход на различные уровни сопровождения:

    • В некоторых случаях может оказаться полезным использование cat в сочетании с другими командами, такими как more, чтобы обеспечить возможность прокрутки. Тем не менее, это также будет требовать предварительного определения вывода или использования буфера.
  4. Конфигурация клавиатуры:

    • Как вы уже заметили, перенастройка клавиш можно осуществить в X11. Однако в TTY это не обеспечит необходимого результата, поскольку система не распознает никакие изменения в сопоставлении клавиш.

Заключение

К сожалению, возможность прокрутки в TTY, особенно через сочетание клавиш Shift + PgUp и Shift + PgDown, не доступна в силу архитектурных ограничений самого TTY. Однако использование таких программ, как screen и tmux, создание файла вывода и просмотр его с использованием less, сможет решить вашу проблему и предоставить необходимые функции, такие как прокрутка. Это улучшит вашу повседневную работу с терминалом и предоставит доступ к важной информации.

Оцените материал
Добавить комментарий

Капча загружается...