showkey -s 在 CentOS 6.4 中不显示扫描代码

showkey -s 在 CentOS 6.4 中不显示扫描代码

我在 vagrant 上运行 CentOS 6.4,然后通过 vagrant SSH 进入盒子。我一直在尝试让退格键正常工作一段时间(如下所述:Centos 终端正确配置 Backspace 和 Ctrl-h

作为其中的一部分,我试图弄清楚退格键发送的扫描代码是什么,它们与 Ctrl-H 发送的扫描代码是否不同。为此,我尝试按指定使用 showkey -s这里。但这似乎不起作用。这是我以 root 身份执行时在控制台上看到的内容。

[vagrant@localhost ~]$ sudo showkey -s
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
sadfdsdfs[vagrant@localhost ~]$ sadfdsdfs

正如您所看到的,showkey 似乎只是回显我输入的内容,而不是给我扫描代码。有什么想法出了什么问题吗?

答案1

它不起作用,因为showkey只是打开它测试的第一个特殊设备(来自硬编码列表),而该设备恰好是终端。这是它使用的列表(引用自1.15版本):

static char *conspath[] = {
        "/proc/self/fd/0",
        "/dev/tty",
        "/dev/tty0",
        "/dev/vc/0",
        "/dev/systty",
        "/dev/console",
        NULL
};

当您通过 ssh 连接时,前两个是伪终端,不要通过尝试确定它们是否真正是虚拟控制台的后续测试。但第一个是与您的 shell 关联的终端。通过打开不同的终端,您会得到意想不到的回声等。

当您运行时showkey -s,它会使用通过打开设备获得的文件描述符来修改终端 I/O 模式(顺便说一下,3,与标准输入不同0)。它的作用相当于的终端

stty -icanon -echo -isig

showkey修改终端(3)您(可能)没有输入并在您的终端上显示结果。原来的标准输入showkey仍然使用原来的输入方式;更新后的输入模式应用于另一个终端。

该行为不是 中的错误showkey,因为它只能从虚拟控制台获取扫描代码。如果您不打算输入tty0,您将不会得到您期望的结果。它可以表现得更好,更清楚地告诉你你不会得到有用的结果。

答案2

尝试指示 Vagrant 强制分配 TTY。

$ vagrant ssh -- -ttt ...

我发现这是对标题为 ServerFault Q&A 的评论:使用 vagrant ssh 进行交互命令。退格键不会删除字符

相关内容