可以使用什么方法在控制台(无 X windows)中显示图像?
例如,我可以使用curses/ncurses将控制台划分为不同的窗格,但在某些情况下我想在其中一个窗格中显示图像。必须切换到 X,并承担所有的负担和开销只是为了显示一张图像,这似乎完全是多余的。我不需要窗口系统或鼠标处理。我只需要把图像放在屏幕上。
我对 X Windows 的问题是它是一个“窗口”系统,而我更喜欢基于框架的方法(无重叠),如诅咒。 (我认为整个“窗口”范式由施乐帕克研究中心发明将“窗户”想象成桌子上相互叠放的纸片的类比是愚蠢的。)
理论上这应该是可能的,因为据我了解,游戏机实际上不再是真正的游戏机了。它们是模拟控制台,实际上是通过具有逐像素控制的全屏分辨率实现的。问题是如何扩展该模拟器以支持控制台上光栅图像的有限显示?
一种可能的解决方案(尽管特定于 Linux)是Linux 帧缓冲区功能 (fbdev)。是否有可能让它与 ncurses 很好地配合?
答案1
“模拟控制台”是特定于系统的,正如您参考fbdev
.此外,它们通常集成到内核中,因此尝试直接修改它们将需要修改内核,这肯定比忍受 X 更加“矫枉过正”。
你可以直接使用fbdev,或者像Thomas Dickey建议的那样基于SDL编写一些东西,但正如他所说,所有必要的工作都没有完成,所代表的工作量不应被低估。
但虽然大多数常见桌面环境是相当重量级的,X 本身却不是(以任何遥远的现代标准来看)。如果您有一个主要基于文本的应用程序,但您需要时不时地发布图像,请考虑使用 X没有桌面环境。如何?使用startx
或自定义脚本来启动 X 服务器和xterm
(或您选择的终端仿真器)全屏,没有窗口管理器(或找到替代的超轻量级 WM 之一)。如果需要,可以隐藏鼠标光标。然后,从文本模式程序中,您可以在屏幕上的指定位置启动和停止轻量级图像显示 X 客户端,并在程序控制下删除它们。您可以调整大小xterm
或只是适应文本屏幕的一部分将被遮挡的事实。当然,这个主题有无数种变化,但你明白了。
我曾经在 RAM 低于 4Mb(不是 Gb)的 Unix 机器上使用 X,所以 X 没有必要臃肿。一个有益的副作用是,您可以获得平台可移植性(您可以使用 X 服务器瞄准任何目标)和远程运行的能力。
答案2
答案3
严格来说不是 ncurses,但是术语是一个内置图像支持的终端仿真器。如果您使用 fbdev 后端构建 EFL,它将在没有 X 的情况下运行。请注意,fbdev 在 Linux 内核中被视为已弃用,因此不会为其生成新的驱动程序。要使用 fbdev 后端运行术语:
ELM_ENGINE=fb terminology
根据您的发行版,EFL 可能会或可能不会构建 fbdev 支持。检查./configure
运行的是--enable-fb
答案4
你可以试试libaa。 ASCII Art 相当不错,但即使是大屏幕也可能需要缩放才能看到任何细节。显示应用程序称为aview,但只能读取p?m 系列格式,例如.pnm。快速运行 Imagemagick 的转换实用程序就可以解决这个问题。有关详细信息,请参阅以下内容,一些发行版带有 libaa 和实用程序。有一个画廊可以演示 libaa 的功能。