Linux 终端应用中的基于像素的图形

7
我正在开发一个C++应用程序,它将在一个无头服务器上运行并跟踪一些统计数据。该应用程序将在屏幕会话中的终端中运行,以便我可以通过SSH登录并检查这些统计数据。
现在,我想做的是显示各种数据的图形。为此,我当然需要像素级访问,这在ncurses或S-Lang中是不可能的。我了解到DirectFB(以及它的C++包装器DFB++++DFB),但似乎找不到确凿的证据表明它是否可能在终端内部绘制图形。
DirectFB是正确的选择吗?它能在屏幕会话中正常工作而不创建额外的窗口吗?如果不能,那么有没有任何库可以实现我想要的功能? 编辑: 理想情况下,我当然希望使用具有某种小部件支持的库,这样我就不必创建大量类来模拟文本字段/滚动条/...

1
为什么你不在网络转发中使用X?是因为性能原因吗? - akappa
@akappa 如果我从远程服务器断开连接,稍后从其他地方登录,这个方法还能行吗?窗口会被正确转发吗?即使这样可以工作,我仍然不想在桌面上添加额外的窗口,因为应用程序正在终端内运行,我希望它留在那里。 - AVH
4
@Darhuuk说,与访问底层硬件的库相关联的应用程序(例如DirectFB或SDL)很可能无法在SSH终端上工作:)。我建议首先尝试基于X + screen的东西。 - akappa
@akappa 很好的观点,但这也是我提问的原因 :)。 - AVH
据我所见,您可以使用类似ncurses的东西(它只在VT100或更好的终端上绘制),或者基于X转发的东西来处理完整的图形。您想绘制哪种类型的图形?纯终端的绘图能力相对较差... - akappa
显示剩余3条评论
1个回答

7
你可以添加一个web界面,你可以使用WtOnion使你的应用程序成为HTTP服务器(或者你也可以使它成为FastCgi应用程序),并使用SVG(可能需要Javascript和Ajax技巧)来显示矢量图形(或生成基于像素的PNG、JPEG或GIF图像;有几个库可供选择)。
我认为DirectFB不支持SSH,并且我相信它正在变得过时(例如GTK3不再支持它)。
你还可以生成Gnu Plot图形(通过生成适当的命令),但那不是非常交互式的。
我认为通过ssh制作图形没有意义,除非你只想要ASCII艺术(我认为这不是你的需求的正确方式)。

是的,这是最自然和最可行的方法。 - akappa
这两个框架看起来确实非常不错,特别是 Wt。而且我已经在服务器上运行了 nginx,所以可以使用它来代理应用程序。 - AVH
你的CGI生成统计图表可能只是一个简单的shell脚本,调用gnuplot。我会先按照这些方向进行一些尝试。 - Alexandre C.
@AlexandreC。嗯,理想情况下,我希望多个图表每秒更新约4次(虽然它们可以重叠),这可能有点浪费,不是吗?不过,我猜过早优化也是不好的:)。 - AVH
@Darhuuk:我说的是你可以在15分钟内黑进去的东西。 - Alexandre C.
基于网络的应用速度太慢,而且需要依赖于网络和浏览器。建议在Linux上尝试使用OpenGL。 - DU Jiaen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接