究竟是什么让图形应用程序可以从终端环境运行?就 X11 而言,您必须做什么才能使应用程序可从 tty 运行?
为什么像 tty 这样的程序omxplayer
,minecraft
或者gedit
不能从 tty 运行,但是例如“愤怒的醉酒小矮人”(一个 python 游戏)或 retroarch 模拟器可以?
当然这些只是例子,我不想让你解释为什么这些具体运行或不运行。但我怀疑有一些共同点。如果可以,请详细说明,但也欢迎提供正确文献/文章的链接。谢谢。
- 编辑 -
好的,有一些误解。澄清一下:假设 Xorg 在 tty7 中运行,并且我们试图在没有运行 Xorg 实例的不同终端(比如说 tty1)中执行图形程序。
实际上,您(或者更准确地说,您运行的 GUI 应用程序)需要的通常是两件事。
X11
服务器xhost
DISPLAY
环境变量。实际的工作示例是我的老答案之一,其中 dad-OP 要求从终端(假设
ssh
)向通过 GUI 登录的孩子显示消息。对于一些使用 DBUS 的桌面环境,您可能还需要为 DBUS 会话提供环境变量。这种类型的建议经常出现在有关从
/etc/rc.local
.终端能否显示图形应用取决于两个因素,终端能力和图形应用设计。
在古代,终端是通过串行线连接到计算机的真实设备,大多数终端,尤其是实际在纸上打印文本的终端,也就是电传打字机,只能显示文本。
已经有某种图形“应用程序”能够打印类似的东西:
然后是基于 CRT 的终端,例如 DEC VT100,它实现了大多数当前终端仿真器都遵循的标准。这些终端本质上是文本,虽然支持一些图形字符,但它们无法显示(高分辨率)图形。80 列 25 行显示器也可以视为低分辨率 2000 像素设备 (80x25),但串行线速度阻碍了这种方法非常有用。
曾经也有终端能够原生显示图形,例如:
如今,大多数运行在 Unix 和 Linux 上的图形应用程序都基于较低级别的 X11 协议。此协议要求在控制屏幕的计算机上运行 X11 兼容服务器。该服务器正在控制底层控制台或所有实现中的一个虚拟终端,因此在一定程度上,所有图形应用程序都从终端环境(通常是 tty7)运行,但当然该终端很快就会失去其原始功能随着 X11 的控制。
大多数类 Unix/Unix 操作系统使用的控制台为图形应用程序提供了一些支持。在 Linux 上,此支持可通过linux 帧缓冲区(fbdev - /dev/fb0) 获得。例如,它用于在启动时显示 Linux 企鹅 Tux。
过去有一些应用程序直接使用该设备,例如 doom,但现在,大多数图形应用程序使用 X11,这也是对 fbdev 的依赖。一些非常通用的应用程序,如vlc 和 mplayer能够直接使用 Linux 帧缓冲区。
还有一些库实现了图形层,将图形设备呈现给应用程序,但实际上显示在文本控制台上,这与 60 年代在电传打字机上和 80 年代在连接到 BBS 的 PC 上所做的没什么不同。一个众所周知的是libcaca,您甚至可以使用它在带有 mplayer 的终端上观看电影......
最后,一些终端模拟器也支持图形。一个值得注意的是古老的 xterm,它提供了一个 Tektronix 4014 仿真器窗口,能够使用 gnuplot 和其他应用程序/库显示矢量图形:
图形应用程序不在终端中运行。它们在 X 服务器中运行。这个 X 服务器不需要连接到 tty,尽管它通常是。
因此不是应用程序连接到 tty,而是只有 X 服务器。您只能在 tty 上启动 X 服务器,而不能在应用程序上启动。
不过,IIRC 你可以让 X 服务器运行单个应用程序。但我不能提供这方面的细节。