$DISPLAY 环境变量是什么?

Cha*_*G K 102 xorg environment-variables

我是 shell 脚本的新手。我不明白$DISPLAY环境变量是什么。

我有 Ubuntu 13.10,我使用/bin/bashshell。我有两个显示器。

问题:

  1. 命令echo $DISPLAY将打印:0.0在我的机器上(在两个显示器上)。这是什么意思?

  2. 在哪些情况下$DISPLAY变量将为空白或 NULL?

  3. 有没有这方面的文章或教程?

May*_*hux 119

X 窗口系统中的魔法词是 DISPLAY。显示包括(简化):

  • 键盘,
  • 一个鼠标
  • 和一个屏幕。

显示由称为 X 服务器的服务器程序管理。服务器为连接到它的其他程序提供显示功能。

远程服务器通过 DISPLAY 环境变量的定义知道它必须将 X 网络流量重定向到哪里,该变量通常指向位于本地计算机上的 X 显示服务器。

显示环境变量的值为:

hostname:D.S
Run Code Online (Sandbox Code Playgroud)

在哪里:

主机名是运行 X 服务器的计算机的名称。省略的主机名表示本地主机。

D 是序列号(通常为 0)。如果有多个显示器连接到一台计算机,则可能会有所不同。

S 是屏幕编号。一个显示器实际上可以有多个屏幕。通常,虽然默认值为 0,但只有一个屏幕。

值示例

localhost:4
google.com:0
:0.0
Run Code Online (Sandbox Code Playgroud)

hostname:D.S表示主机主机名的显示器 D 上的屏幕 S;此显示器的 X 服务器正在侦听 TCP 端口 6000+D。

host/unix:D.S表示主机主机显示器D上的屏幕S;此显示器的 X 服务器正在侦听 UNIX 域套接字 /tmp/.X11-unix/XD(因此它只能从主机访问)。

:D.S 等效于 host/unix:DS,其中 host 是本地主机名。

:0.0 表示我们正在谈论连接到本地主机中第一个显示器的第一个屏幕

在这里阅读更多信息:support.objectplanet.com这里:superuser.com这里:docstore.mik.ua

从 X(7) 手册页:

从用户的角度来看,每个 X 服务器都有一个如下形式的显示名称:

主机名:显示编号.屏幕编号

应用程序使用此信息来确定它应该如何连接到服务器以及它应该默认使用哪个屏幕(在具有多个显示器的显示器上):

主机名 主机名指定显示器物理连接到的机器的名称。如果未给出主机名,则将使用与同一台机器上的服务器进行通信的最有效方式。displaynumber 短语“display”通常用于指代共享公共键盘和指针(鼠标、平板电脑等)的监视器集合。大多数工作站往往只有一个键盘,因此只有一个显示器。然而,更大的多用户系统通常有多个显示器,因此可以有多个人同时进行图形工作。为避免混淆,当启动该显示器的 X 服务器时,机器上的每个显示器都被分配一个显示器编号(从 0 开始)。显示编号必须始终在显示名称中给出。screennumber 某些显示器在两个或多个显示器之间共享一个键盘和指针。由于每个监视器都有自己的一组窗口,因此在启动该显示器的 X 服务器时,每个屏幕都被分配了一个屏幕编号(从 0 开始)。如果未给出屏幕编号,则将使用屏幕 0。

  • @Maythux 有时,屏幕编号在为 0 时似乎被省略。我的 GNOME 为“$DISPLAY”给出“:0”。 (3认同)

tri*_*eee 25

现有的答案未能解决更广泛的问题。

如果您没有使用图形环境(即您在没有窗口等的情况下登录系统控制台;或者您通过 SSH 或类似方式从纯文本终端远程登录,例如从运行 PuTTY 的 Windows 计算机)然后不涉及 GUI,DISPLAY通常不会设置。您与计算机进行通信的唯一方式是命令行(尽管如果您知道如何操作,可能有一些方法可以转入 GUI 会话)。

如果您使用图形界面(在 Ubuntu 上,通常使用 GDM 问候语)或使用图形终端(例如从运行 eXceed 或 mobaX 的 Windows 计算机,或像 VNC 客户端这样的远程桌面软件)登录控制台,则DISPLAY变量由管理图形会话的程序设置,以向图形客户端指示要连接的 I/O 设备。

传统上,Ubuntu 计算机上的 GUI 运行 X.org,这是一种 X11 实现,但最近,Canonical 推出了名为 Mir 的现代化替代品;甚至最近,我相信Mir 将被放弃,转而支持另一个名为 Wayland 的具有大致相似目标的项目。这些替换旨在降低完整 X11 堆栈的复杂性,我们不会在这里讨论——它们遵循相同的DISPLAY约定,毕竟这是我们在这里讨论的内容。

在 X11 上,主机部分DISPLAY可以是远程服务器,您可以将 Ubuntu 计算机用作“图形终端”来访问该远程服务器上的文件和程序(在这种情况下,您的计算机是为键盘提供服务的“服务器” 、鼠标和一个或多个显示设备,用于在远程...服务器上运行的“客户端”程序)。更常见的是,X11(或 Mir 或 Wayland)服务器和客户端程序(桌面管理器和各种图形客户端,如 Web 浏览器、电子邮件客户端、日历程序等)都在您的计算机上运行。这由值的“服务器”部分指示DISPLAY,在后一种情况下通常为空(这意味着默认值,localhost)。

X11 服务器可能运行一个或多个图形会话——例如,您的控制台登录和远程 VNC 会话可能同时运行。在这种情况下(如果它们由同一个 X11 服务器实例管理)在 X11 术语中您有多个“显示”。实际上,一个会话(一个登录事件和由此产生的桌面实例)是 X11 中的一个显示。

一种这样的显示器可以具有一个或多个屏幕。传统上,这意味着一台显示器,尽管原始架构有一些不幸的特征,例如无法将窗口从一个屏幕移动到另一个屏幕。像 Xinerama 和 Xrandr 这样的附加组件进一步使情况变得混乱,以至于一个屏幕经常以各种方式连接多台显示器。

如果您玩过多显示器系统,您可能已经发现您可以以各种方式排列显示器,最终得到一个矩形区域,您的显示器显示其中的某些部分,而其他部分不分配给任何显示器。这是 X11 创建的“屏幕”,如果你有多个显示卡,你可以有多个这样的屏幕,每个屏幕分配给一个或多个显示器(或者理论上,在没有显示器的情况下运行;Xvfb 利用这一点来允许您可以在没有任何监视器的情况下运行 X11,只需将 GUI 映射到内存区域以用于任何目的)。


小智 5

echo $DISPLAY 将在我的机器上(在两台显示器上)打印 :0.0。这意味着什么?

:0.0 表示显示编号0、屏幕编号0

在什么情况下 $DISPLAY 将为空或 NULL?

如果您的 $DISPLAY 出现错误并且这种情况通常不会发生

有这方面的文章或教程吗?

一些教程和资源可以在这里找到:


Pan*_*dya 5

https://help.ubuntu.com/community/EnvironmentVariables

变量-显示

值示例:

:0.0
localhost:10.0
terminal01:0.0
Run Code Online (Sandbox Code Playgroud)

它有什么用?

此变量用于指示图形应用程序在何处显示实际的图形用户界面,该值由 3 部分组成:主机名后跟冒号 (:)、显示编号后跟点 (.) 和屏幕数字。

主机名部分可用于将图形输出通过网络发送到远程机器。当输出用于在本地机器上运行的 X 服务器时,可以省略它。显示编号允许在同一台机器上运行的多个 X 服务器中进行选择(Ubuntu 使用多个 X 服务器来启用多个图形桌面会话)。

尽管屏幕编号用于在由同一 X 服务器管理的多个物理屏幕中进行选择,但现在很少将其设置为“0”以外的任何其他内容。现在很少需要手动设置“DISPLAY”环境变量的值,因为它可以在需要时由“GDM”和“SSH”等许多应用程序自动智能调整。