2013-07-02 88 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數據庫條目。