您的位置:首页 > 运维架构 > Linux

Linux 发送信号, 修改键映射

2015-07-24 12:11 639 查看
遇到一个问题, 用SSH 工具登陆远程Linux 系统后, 使用 sqlplus 会出现问题, 比如输入 eixt, 发现输入错误, 然后Backspace 想删除这些字符, 发现没有删除字符, 却出现了 ^H 符号.

这个原因是我的计算机上发送的信号是 ^H, 但是在远程 Linux 上erase 信号映射到 ^? 信号.

可以用 stty -a 来查看 远程 Linux 上的键映射:

[oracle@erik-lnx admin_scripts_home]$ stty -a
speed 38400 baud; rows 39; columns 173; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke


然后 Ctrl+V, 按 Backspace 看看发送的字符是什么: ^H

然后重新设定键映射: stty erase ^H

这样我发送的 ^H 就会被映射为 erase 信号, 删除字符就正常工作了;

造成这个问题的原因其实是我使用的终端模拟器和远程Linux 使用的终端其实不一致.

查看远程 Linux 的终端类型: echo $TERM = xterm

我现在使用的SSH 工具是 Xshell, 在设定里面可以选择终端模拟器,



要么修改远程Linux 上的键映射, 要么修改SSH 工具的发送信号.

总结一下:

1. echo $TERM 查看终端类型

2. 设定 SSH 工具的终端类型, 保持一致

3. stty -a 查看键映射

4. Ctrl+V 按键, 查看SSH 工具发送的字符

5. stty 信号 字符, 修改键映射, 或者修改SSH 工具按键发送的字符

Xshell Backspace 按键 -> 发送 ^H 字符 -> Linux 接收 ^H 字符 -> ^H 映射到 erase 信号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: