读取屏幕会话中特定位置的字符

读取屏幕会话中特定位置的字符

是否可以读取屏幕上的字符(准确地说:在屏幕会话中,来自带有 ncurses 界面的旧软件)?

不幸的是,我们在屏幕会话中运行的软件的(非常简单的)API 不允许访问一些仅“在屏幕上”显示的重要状态消息。

所以,问题是:我们可以访问屏幕会话的“字符缓冲区”从外面? 例如某事 => getChars(x=5, y=30, length=5; screen-pid=12345)?

答案1

一般而言,屏幕缓冲区是终端仿真器的属性(不是 'tty' 本身的一部分)。有些终端仿真器允许从外部访问其屏幕缓冲区,有些则不允许。

GNU Screen 使用命令支持此:hardcopy功能(尽管在我的快速测试中,它完全地破坏了所有非 ASCII 文本(这些文本应该是 UTF-8)。用于screen -X从外部调用它:

screen -X hardcopy /tmp/foo

tmux 中的等效功能(使用capture-panesave-buffer)似乎效果更好:

tmux capture-pane -t <id> \; save-buffer /tmp/foo \; delete-buffer

(为了完整性:Linux 虚拟控制台也允许这样做,使用窥视


有时你可能会发现使用终端仿真库编写自定义“主机”程序更有用(例如) – 创建一个 pty,运行附加到它的软件,然后使用 libvterm 将 ncurses“绘图”序列直接处理到您自己的缓冲区中。

相关内容