Отправка функциональных клавиш (F1-F12) по SSH

Это - ожидаемое поведение и уже обсуждало несколько раз.

Скрипт запущен в подоболочке и не может изменить родительскую оболочку рабочий каталог. Его эффекты потеряны, когда это заканчивается.

Для изменения каталога постоянно, необходимо получить сценарий, как в

. ./script
13
02.11.2012, 00:52
3 ответа

Терминалы только понимают символы, не ключи. Так al функциональные клавиши кодируются как последовательности символов, с помощью управляющих символов. Кроме нескольких общих, которые имеют связанный управляющий символ (Вкладка Ctrl+I, Войдите Ctrl+M, Esc Ctrl+[), функциональные клавиши отправляют escape-последовательности, начинаясь Ctrl+[ [ или Ctrl+[ O. Можно использовать tput команда для наблюдения то, что приложения escape-последовательности ожидают для каждой функциональной клавиши на терминале. Эти последовательности хранятся в terminfo база данных. Например, отрывок оболочки ниже показывает escape-последовательности, соответствующие каждой функциональной клавише.

$ for x in {1..12}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
F1 ^[OP
F2 ^[OQ
F3 ^[OR
F4 ^[OS
F5 ^[[15~
F6 ^[[17~
F7 ^[[18~
F8 ^[[19~
F9 ^[[20~
F10 ^[[21~
F11 ^[[23~
F12 ^[[24~

Другой способ видеть escape-последовательность для функциональной клавиши состоит в том, чтобы нажать Ctrl+V в терминальном приложении, которое не снова переплетает ключ Ctrl+V (такой как оболочка). Ctrl+V вставляет следующий символ (который будет символом ESC), буквально, и Вы сможете видеть остальную часть последовательности, которая состоит из обычных символов.

Так как последовательности может быть неудобно ввести, действительно исследуйте изменение привязок клавиш в Вашем приложении или использования другого эмулятора терминала. Кроме того, обратите внимание, что у Вас может быть ограничение по времени: некоторые приложения только распознают escape-последовательности, если они входят достаточно быстро, так, чтобы они могли дать значение одной только клавише Esc.

25
27.01.2020, 19:52

Эмулятор терминала Android Jack Palevich использует сочетания клавиш с кнопками громкости для отправки множества ключей, включая функциональные клавиши. Существует также Клавиатура Хакера, которая имеет каждый ключ, доступный, который имела бы реальная клавиатура.

3
27.01.2020, 19:52
  • 1
    Спасибо, Клавиатура Хакера должна покрыть то, в чем я нуждаюсь на данный момент. –  Sizik 02.11.2012, 21:02

Как предлагает Дрейк Кларрис, на Android можно установить альтернативные клавиатуры, такие как Hacker's Keyboard , включающие клавиши F -.

Однако, если по какой-либо причине вы не можете установить новую клавиатуру, есть другие альтернативы, если ваше терминальное приложение позволяет вам нажимать Escи/или Alt.

Часто можно использовать Esc, а затем Numberили Alt+Numberдля имитации F1-F10, используя 0для F10.

Эти сочетания клавиш очень полезны при использовании эмулятора терминала на телефоне или другом ограниченном устройстве, на котором отсутствуют физические клавиши F -. Они также полезны с физической клавиатурой, когда ваша терминальная программа или другая программа, работающая в том же сеансе (, например, byobu/screen/tmux ), перехватывает клавиши F -для своих целей.

  • Пример сEsc:Я хочу нажать F10, чтобы выйти из mc, Midnight Commander, но Gnome Terminal перехватывает F10и интерпретирует его как свою клавишу меню. Вместо этого я нажимаю Esc, затем 0. Терминал Gnome передает входные данные отдельно, mcинтерпретирует их как F10и mcзавершает работу.

  • Пример сAlt:Я хочу нажать F4, чтобы отфильтровать htop, но byobuперехватывает F4и интерпретирует его как "следующее окно". Вместо этого я удерживаю Altи нажимаю 4. Byobu передает комбинацию клавиш, htopинтерпретирует ее как F4и включает фильтрацию.

Метод Altможет не работать, если приложение интерпретирует Alt+Numberкак комбинацию клавиш, отличную от F-Number. На практике с этой проблемой не сталкивался.

Я не знаю, есть ли способ набрать F11или F12таким образом, поскольку мне это никогда не требовалось.

0
19.03.2021, 11:53

Теги

Похожие вопросы