按键透传 SecureCRT

2023年 8月 22日 52.5k 0

背景

我的工作环境是通过 SecureCRT 连接远程 linux 机器,然后使用 vim 进行开发。但是经常会发现一些 SecureCRT 默认的快捷键会与 VIM 的快捷键以及 linux 的控制台快捷键冲突。而且这个还很难取消掉,这个问题让我不胜其烦,因此一直在摸索如何处理掉这个问题。解下来就记录我解决这个问题的方法。

方案描述

按键设置

通过 SecureCRT 的设置 Tools → Keymap Editor 的方式,或者 Options → Session Optionas... → Terminal → Emulation → Mapped Keys → Map a Key 的方式,都可以映射一个快捷键,前者是对应全局,后者是修改本 Session 的按键映射。

下面以 Alt+j 举例,说明如何配置按键。

image.png

如上图所示,在 Keymap Editor 编辑界面中勾选需要映射的按键,然后在 Action → Function 的下拉框里面选择 Send String,并且在右边的输入框中输入 33j。如上面截图所示,要发送一个转移字符,需要使用一个八进制的编码。这里的 33 就是 Alt 按键的八进制编码。下面则来介绍如何获取各个按键的按键编码。

按键码的获取

获取按键的编码需要使用 showkey -a 这个命令。showkey 命令可以检查并显示按下按键的扫描码和键盘码。如果有 wsl 的话,可以从 wsl 中打开控制台,输入 showkey -a 然后会开始监控键盘,直到使用 CTRL-D 终止程序:

# 下面分别按下 Alt+j、Alt+k、Ctrl+A、Ctrl+K、Alt+Backspace
$ showkey -a
 Press any keys - Ctrl-D will terminate this program

 ^[j      27 0033 0x1b
         106 0152 0x6a
 ^[k      27 0033 0x1b
         107 0153 0x6b
^A         1 0001 0x01
^K        11 0013 0x0b
^[^?      27 0033 0x1b
         127 0177 0x7f

可以看到,Alt+j 对应两个八进制码 00330152,实际上 0152 就是 j 的 ASCII 码,所以 Alt 对应的八进制键盘码就是 0033。然后按键 j 的话,仍旧是输入 j 即可,无需改成 0152。如果组合按键中,有两个转义字符,如 Alt+Backspace 则两个按键都需要使用 + 八进制按键码的方式:Alt+Backspace = "33177"

注意事项

想通过设置 Disable 的方式,取消 Secure CRT 的默认按键配置,从而想让该按键能传入远程机器的方式是行不通的,这种操作只会让该按键完全无响应。

image.png

总结

可以通过 showkey -a 指令获取八进制按键码,然后通过按键映射 Send String 的方式将按键码发送到远端机器,从而实现按键透传到远端机器,解决 SecureCRT 按键与 VIM 按键或者 linux 控制台默认按键冲突的问题。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论