在我自己的机器上进行ssh时,我可以在终端模拟器中使用Ctrl + P作为命令历史记录。我想知道是否可以使箭头键功能。我正在通过一个程序,而不是通过命令 ssh user @ host
为什么我这样问,是因为,在从字节数组中提取单个字符之前,我正在打印它。按下一个字符时,字节数组显示很多数字,但是当我按箭头键时,它什么都不打印。我必须使用箭头键才能按Ctrl + P工作。
请注意,SHELL值为/ bin / bash。另外,我已经尝试了TERM变量的这些值:dumb,vt100,xterm,linux。对于安全登录,我使用的是Ganymed SSH库。
更新:(来自tripleee的建议)
一小段键盘处理逻辑如下:
for (int i = 0; i < len; i++)
{
char c = (char) (data[i] & 0xff);
System.out.print(c + ", ");
if (c == 8)
{
if (posx < 0)
continue;
posx--;
continue;
}
if (c == '\r')
{
posx = 0;
continue;
}
if (c == '\n')
{
posy++;
if (posy >= y)
{
for (int k = 1; k < y; k++)
lines[k - 1] = lines[k];
posy--;
lines[y - 1] = new char[x];
for (int k = 0; k < x; k++)
lines[y - 1][k] = ' ';
}
continue;
}
}//some more stuff and then the appending of characters with the previous ones
输入方式如下:
byte[] buff = new byte[8192];
try
{
while (true)
{
int len = in.read(buff);
if (len == -1)
return;
addText(buff, len);
}
}
catch (Exception e)
{
}
Key Listener代码是:
KeyAdapter kl = new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
System.out.println("EVENT IS: " + e.getKeyCode());
int c = e.getKeyChar();
try
{
out.write(c);
}
catch (IOException e1)
{
}
e.consume();
}
};
感谢。
答案 0 :(得分:0)
尝试使用 -t 键登录,例如ssh -t user@host
从手册页:
强制伪tty分配。这可以用来执行任意的 远程计算机上基于屏幕的程序,非常有用, 例如实施菜单服务时。