2013-07-02 41 views
1

我正在为其键盘上没有所有按键的特殊设备创建SSH客户端,我的问题是Esc,Alt,Ctrl和在发送到shell的字符串中编码的箭头键?它只是'\ 033'?如何在ssh/shell中编码Esc,Alt,Ctrl和箭头键

我知道该怎么输入键的行为,它提供了一个^ M,从here

但是,当我按下按Ctrl + v然后按Ctrl出现什么,当我按下Ctrl键 + v,然后按Ctrl +ç的端子短我得到:^ C,所以是按Ctrl只是^?

但对于ALT

而且我越发现:

离开^[d ^[[C
^[[A 下来^[[B

我可以只写这些命令如下command,以libssh:

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

的问题是我得到的SSH以下回应:zsh中:替代两个bash的失败在我的Mac和我的SSH程序:

-bash::■^ [^ C:取代失败

+0

它取决于终端。 –

+0

Libssh2通过一个shell连接到linux –

回答

2

键序列编码取决于在终端设备上。每个终端设备可以组成自己的编码。 Linux控制台,xterm,GNU屏幕,gnome-terminal,konsole,vt220等都有不同的(但相似的)功能和密钥编码。

如果您需要了解的关键序列的编码为特定的终端设备,那么你应该查询terminfo数据库为TERM你感兴趣的内容。

机会是终端仿真类似ECMA-48的东西,这是一个起点。但是,请勿将ECMA-48硬编码到您的应用程序中;有些用户可能会使用不同的终端—,特别是如果他们在使用您的应用程序ssh出来之前ssh进入系统。

有关更多文档,请参阅ncurses网站。

如果您正在尝试创建自己的终端设备(例如,模拟用户在终端上按键),则由您选择所需的编码。为了使其正常工作,您必须确保终端设备的密钥编码位于远程系统的terminfo数据库中,并且TERM环境变量已正确设置。为了最大限度地减少你需要做的工作,你可能最好的模拟现有流行的终端,如GNU屏幕或vt220。要获得它们的密钥编码,请参阅它们的terminfo数据库条目。