什么是$ DISPLAY环境变量?


74

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

我有Ubuntu 13.10,并且使用/bin/bashShell。我有两个监视器。

问题:

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

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

  3. 是否有任何文章或教程?


今天echo $DISPLAY是印刷:0NOT:0.0
Chandrayya GK

:检查这将在空白或错误的情况下帮助askubuntu.com/questions/432610/...
Maythux

Answers:


86

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

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

显示由服务器程序(称为X服务器)管理。该服务器向与之连接的其他程序提供显示功能。

远程服务器通过DISPLAY环境变量的定义(通常指向本地计算机上的X Display服务器)知道必须重定向X网络流量的位置。

显示环境变量的值为:

hostname:D.S

哪里:

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

D是序列号(通常为0)。如果有多台显示器连接到一台计算机,则可以更改。

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

值示例

localhost:4
google.com:0
:0.0

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表示我们正在谈论的是附加到您本地主机中第一个显示器的第一个屏幕

在这里这里这里阅读更多。

在X(7)手册页中:

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

主机名:displaynumber.screennumber

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

主机名主机名指定显示器实际连接到的计算机的名称。如果未提供主机名,将使用与同一台计算机上的服务器进行通信的最有效方法。displaynumber短语“ display”通常用于表示共享公用键盘和指针(鼠标,平板电脑等)的监视器的集合。大多数工作站往往只有一个键盘,因此只有一个显示器。但是,较大的多用户系统通常具有多个显示器,因此一个以上的人可以一次完成图形工作。为避免混淆,启动用于该显示器的X服务器时,会为该机器上的每个显示器分配一个显示器编号(从0开始)。显示编号必须始终以显示名称给出。屏幕编号某些显示器在两个或更多显示器之间共享一个键盘和指针。由于每个监视器都有其自己的窗口集,因此当启动用于该显示器的X服务器时,将为每个屏幕分配一个屏幕号(从0开始)。如果没有给出画面号,将使用画面0。


$ DISPLAY为空或空白时。
Chandrayya GK 2014年

通常,除非您的显示器出现问题,否则这不会发生。通常,重新启动显示器管理器可以解决该问题。但这不是默认操作。
Maythux 2014年


@ChandrayyaGK例如,当我不使用任何桌面环境(如GNOME或KDE),而是直接使用TTY(如/dev/tty1)登录时,出现空白$DISPLAY
富兰克林·于

@Maythux有时画面号似乎是0.我的GNOME给出什么时候可以省略:0$DISPLAY
富兰克林·于

10

现有的答案无法解决更广泛的问题。

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

如果您使用图形界面(在Ubuntu上,通常使用GDM greeter)或使用图形终端(例如从运行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映射到内存区域即可。


Mir确实与Unity一起被抛弃了。长期以来,默认的是lightdm而不是gdm,但是也许您的答案的那一部分已经像Unity登顶之前一样再次变得正确了!我使用MATE,因此无法轻松检查...
Zanna

我从控制台(没有Windows)运行Linux,这解释了所有内容。实际上有意义:p
Jean-Francois T.

3

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

可变-显示

值示例:

:0.0
localhost:10.0
terminal01:0.0

它是做什么用的?

此变量用于指示图形应用程序在哪里显示实际的图形用户界面,该值包括3个部分:主机名,后跟冒号(:),显示号后跟点(。),以及屏幕数。

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

尽管屏幕号用于在同一X服务器管理的多个物理屏幕之间进行选择,但如今很少将其设置为除“ 0”以外的任何值。如今,几乎不需要手动设置“ DISPLAY”环境变量的值,因为可以在需要时由许多应用程序(例如“ GDM”和“ SSH”)自动智能地调整它。


3

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

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

在这种情况下,$ DISPLAY将为空白还是NULL?

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

是否有任何文章或教程?

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.