Как получить клавиши F1-F12 для переключения экранов на экране GNU в cygwin при подключении через SSH?

Я подключаюсь к рабочему столу, на котором запущен cygwin, через SSH из терминального приложения в Mac OS X. Я уже запустил экран на стороне cygwin и могу подключиться к нему через сеанс SSH. Кроме того, в файле .screenrc есть следующее:

bindkey -k k1 select 1  #  F1 = screen 1
bindkey -k k2 select 2  #  F2 = screen 2
bindkey -k k3 select 3  #  F3 = screen 3
bindkey -k k4 select 4  #  F4 = screen 4
bindkey -k k5 select 5  #  F5 = screen 5
bindkey -k k6 select 6  #  F6 = screen 6
bindkey -k k7 select 7  #  F7 = screen 7
bindkey -k k8 select 8  #  F8 = screen 8
bindkey -k k9 select 9  #  F9 = screen 9
bindkey -k F1 prev      # F11 = prev
bindkey -k F2 next      # F12 = next

Однако, когда я запускаю несколько окон на экране и пытаюсь переключаться между ними с помощью функциональных клавиш, все, что я получаю, - это звуковой сигнал.

Я пробовал различные настройки для $ TERM (например, ansi, cygwin, xterm-color, vt100), и они, похоже, ни на что не влияют.

Я убедился, что приложение терминала на самом деле отправляет escape-последовательность для функциональной клавиши, которую я ожидаю, и что моя оболочка bash (работающая внутри экрана) получает ее. Например, для F1 он отправляет следующее (hexdump - это сценарий Perl, который я написал, который принимает STDIN в binmode и выводит его как шестнадцатеричный / ascii-дамп):

% hexdump
[press F1 and then hit ^D to terminate input]
00000000:  1b4f50                               .OP

Если бы все работало правильно, я не думаю, что bash должен получить escape-последовательность, потому что screen должен был ее уловить и превратить в команду.

Как заставить работать функциональные клавиши?


person Mikey    schedule 11.01.2011    source источник
comment
В FAQ сказано: программные инструменты, обычно используемые программистами. Описанные мною инструменты кажутся мне актуальными.   -  person Mikey    schedule 11.01.2011


Ответы (3)


Если у вас более странная установка (например, Windows -> PuTTY -> Linux), где стандартное решение bindkey -k работает не совсем правильно, вы можете использовать команду showkey:

showkey -a

чтобы найти соответствие между нажатиями клавиш и кодами клавиш. В моем конкретном случае помещение их в ~/.screenrc помогло:

bindkey "^[[11~" select 1
bindkey "^[[12~" select 2
bindkey "^[[13~" select 3
bindkey "^[[14~" select 4
bindkey "^[[15~" select 5
bindkey "^[[17~" select 6
bindkey "^[[18~" select 7
bindkey "^[[19~" select 8
bindkey "^[[20~" select 9
bindkey "^[[21~" select 10
bindkey "^[[23~" select 11
bindkey "^[[24~" select 12
person Mr Fooz    schedule 11.06.2012
comment
У меня есть похожая странная установка с использованием mobaxterm. Сначала я отключил ярлык mobaxterm для f11, а затем у меня все еще не работал F10 с bindkey -k Fx (F1 - F11, F2 - F12, но F0 не работает, возможно, шестнадцатеричный). В любом случае я использовал ваше решение, чтобы получить правильное значение bindkey для F10. Спасибо. - person th3penguinwhisperer; 28.12.2016
comment
Это работает для меня на Mac OS с внешней волшебной клавиатурой. Спасибо! - person Blaf; 21.03.2019

После большого количества экспериментов мне удалось заставить его работать, добавив следующие строки в мой .screenrc:

terminfo * k1=\EOP
terminfo * k2=\EOQ
terminfo * k3=\EOR
terminfo * k4=\EOS
terminfo * k5=\E[15~
terminfo * k6=\E[17~
terminfo * k7=\E[18~
terminfo * k8=\E[19~
terminfo * k9=\E[20~
terminfo * F1=\E[23~
terminfo * F2=\E[24~
person Mikey    schedule 11.01.2011
comment
Было бы неплохо, если бы вы показали способ, которым вы пришли к этому решению. У меня это не работает. - person PonyEars; 09.07.2013
comment
Я не помню точно, как это было пару лет назад. Частично это было связано с знанием имен терминалов для клавиш (например, k1, k2 и т. Д.), А частично - с знанием того, что передает ваш терминал, когда вы нажимаете F1, F2 и т. Д. Я смог понять вывести последнее, запустив чтение в оболочке bash, а затем нажав F1, F2 и т. д. Например, когда я запускаю чтение и нажимаю F1, я увидел следующее: % read ^[OP - person Mikey; 10.07.2013
comment
В bash, если вы нажмете Ctrl-V, а затем интересующую функциональную клавишу, вы визуально увидите указанные выше коды, напечатанные в командной строке. Вот как вы находите коды. Может это readline особенность? - person Aaron McDaid; 27.10.2016

Я использую iTerm на macos. Это работает для меня:

terminfo * F1=^[OP
terminfo * F2=^[OQ

bindkey -k F1 prev
bindkey -k F2 next

Поместите эти 4 строки в свой .screenrc.

Ответ вдохновлен ответом Майки.

person user674669    schedule 14.08.2014