如何确定 x11 终端的图形功能 window

How to determine graphics capabilities of an x11 terminal window

标准的 xterm 程序有一个用于一些简单图形输出的 Tek4014 仿真。然而,这并没有在大多数(所有?)后继者中实现,比如 rxvt、gnome-terminal 或 kterm。

然而,几乎所有 X11 终端都将 xterm 报告为环境变量 TERM(的一部分),这使得程序很难确定底层终端是否具有图形功能。

是否可以通过编程方式找到它?并且,是否有实现 Tek4014 图形的现代终端 windows(在 xterm 旁边),也许作为一个附加组件?

实际上 kterm 根据其菜单提供 Tek4014 仿真。您可能指的是 KDE konsole,它不是。据报道,TeraTerm(Windows 应用程序)也支持该功能。

回到重点:没有有用的方法可以判断给定终端是否支持给定功能。一些终端 return 状态信息,告诉它是什么类型的终端,以及它可能具有的可选功能(基于来自 DEC 和类似终端的设备响应)。泰克终端没有这样的状态query/response(参考XTerm Control Sequences)。

在任何情况下依赖状态响应并不能提供太多保证,因为一些开发人员硬编码响应以匹配 xterm。

由于终端不会告诉你,唯一的验证方法就是实际检查。有人可能会构建一个可以执行屏幕转储并验证终端是否响应序列的程序,但仍然存在一个陷阱,即 vt100(或类似)和 tek4014 之间的切换可能不会使用 xterm 中使用的相同转义序列来完成。毕竟,那个转义序列不在任何硬件终端的标准指令中。

发送设备属性序列将导致终端回复一个神秘的字符串。像 vim 这样的程序使用它来探测他们正在处理的 xterm 的版本,但我不知道具体的文档来解释结果。也许阅读来源?

参见:

亲自尝试一下:

 printf "\E[c\n" ; sleep 1 ; echo

我的非 xterm xterm 兼容终端返回“\E[?1;2c”。

如果您有权访问运行终端的 X11 显示屏,则可以执行以下操作。输出 "enter Tektronix mode" 转义序列 "\E[?38h" 并等待新的 window 打开。 WM_CLIENT_LEADER 属性 应该是原终端的ID window, WM_CLASS 属性 应该是"tektronix"(我只有检查实际的 xterm 应用程序)。

如果您需要从您的文本模式应用程序执行此操作,您可以尝试检查切换到 Tek window 是否确实有所作为。例如,

echo -en '\n\E[?38h' && echo -en 12345678 && echo -en '\E[=10=]3' && \
    echo -en '\e[6n' && sleep 1 && echo -en '\n'

打印换行符,切换到 Tek window,在那里打印一些字符,returns 返回到 VT window,并请求光标位置报告。由于所有打印都是在 Tek 模式下进行的,因此光标应保留在第 1 列。但是,如果终端不支持 Tek 模式,则字符将打印在 main window 中,并且该列将 >1 .