2013-07-02 3 views
1

Я делаю SSH-клиент для специального устройства, у которого нет всех клавиш на клавиатуре, мой вопрос: как Esc, Alt, Ctrl и клавиши со стрелками, закодированные в строке, отправленной в оболочку? это просто «\ 033»?Как Esc, Alt, Ctrl и клавиши со стрелками закодированы в ssh/shell

Я знаю, как Введите ключ ведет себя, он дает^М, от here

Но когда я нажимаю Ctrl + v и затем появляется ничего Ctrl, когда я нажимаю Ctrl + v, а затем Ctrl + с в teminal я получаю:^C, так Ctrl только ^?

Но что альт

Дальше больше я нашел:

оставил^[[D правый^[[C
до^[[A вниз^[[B

может я просто пишу эти команды command ниже, чтобы libssh:

rc = libssh2_channel_write(self.channel, [command UTF8String], strlen([command UTF8String]))) 

Проблема заключается в том, я получаю следующий ответ от SSH: ЗШ: замена не удалось в обоих Баш на моем Mac и в моей SSH программе:

-bash:: s^[^ с: замена не удалось

+0

Это зависит от терминала. –

+0

Libssh2 подключается к Linux через оболочку –

ответ

2

Ключ кодирования последовательности зависит от оконечного устройства. Каждое терминальное устройство может составлять собственную кодировку. Консоль Linux, xterm, экран GNU, gnome-terminal, konsole, vt220 и т. Д. Имеют разные (но похожие) возможности и кодировки клавиш.

Если вам нужно знать, кодирование последовательности клавиш для конкретного терминала, то вы должны запросить базу данных terminfo для TERM вас интересует.

Скорее всего, терминал эмулирует нечто похожее на ECMA-48, так что это отправная точка. Однако не вносите код ECMA-48 в ваше приложение; некоторые пользователи могут использовать другой терминал —, особенно если они ssh в систему перед использованием вашего приложения в ssh out.

Дополнительную документацию можно найти на веб-сайте ncurses.

Если вы пытаетесь создать собственное оконечное устройство (например, эмулировать нажатие кнопок пользователя на терминале), то вам решать выбрать нужную кодировку. Чтобы он работал, вам нужно убедиться, что ключевое кодирование вашего терминального устройства находится в базе данных terminfo удаленной системы и что переменная среды TERM установлена ​​правильно.Чтобы свести к минимуму работу, которую вам нужно сделать, вам, вероятно, лучше всего эмулировать существующий популярный терминал, например, экран GNU или vt220. Чтобы получить их ключевые кодировки, см. Их записи базы данных terminfo.