什么是 DISPLAY=:0?

Tim*_*Tim 31 shell x11 environment-variables command display

什么是DISPLAY=:0,它是什么意思?

这不是命令,是吗?(gnome-panel是一个命令。)

DISPLAY=:0 gnome-panel
Run Code Online (Sandbox Code Playgroud)

tep*_*pic 33

它是一个仅传递给该程序的环境变量,而不是整个 shell。当您在与命令相同的行上设置变量时,就会发生这种情况。

X11 程序需要知道在哪里显示窗口,因为它是一个客户端/服务器系统,您可以在远程机器上显示。这只是意味着使用本地机器上的第一个显示器。

这通常是在登录到桌面环境时自动设置的。例如,打开图形终端并键入echo $DISPLAY

  • @MarkPlotnick - 它比这更细粒度。当为除 shell 函数或特殊内置函数以外的任何命令添加变量声明的前缀时,该声明不应影响父 shell 对规范变量的定义,但是当为这些 POSIX 状态中的任何一个执行此操作时,变量声明应保持不变。因此,POSIXLY,`one=$1 shift` 应该同时定义当前shell 变量`$one` 的值与当前shell 的第一个位置相同,同时删除所述位置。顺便说一下,`bash` 默认打破规范。 (5认同)
  • @Tim 所有符合 POSIX 的 shell 都允许这样做。这意味着只为那个命令设置和导出环境变量,但不影响之后的 shell 变量的值(如果它已经有一个值)。 (3认同)

Gil*_*il' 30

DISPLAY=:0 gnome-panel是一个 shell 命令,它运行外部命令gnome-panel并将环境变量DISPLAY设置为:0. shell 语法仅在指定命令的持续时间内设置环境变量。它大致相当于.VARIABLE=VALUE COMMANDVARIABLE(export VARIABLE=VALUE; exec COMMAND)

环境变量DISPLAY告诉 GUI 程序如何与 GUI 通信。一个 Unix 系统可以运行多个X 服务器,即多个显示器。这些显示可以是物理显示(一个或多个监视器),或远程显示(通过网络转发,例如通过 SSH),或虚拟显示,例如Xvfb等。指定显示的基本语法是;如果省略该部分,则显示为本地显示。HOST:NUMBERHOST

显示器从 0:0开始编号,第一个启动的本地显示器也是如此。在典型设置中,这是计算机显示器上显示的内容。

像所有环境变量一样,DISPLAY从父进程继承到子进程。例如,当您登录到 GUI 会话时,登录管理器或会话启动器会进行DISPLAY适当的设置,并且会话中的所有程序都会继承该变量。当您打开带有 X 转发的 SSH 连接时,SSH 会将DISPLAY环境变量设置为转发的连接,以便您在远程机器上运行的程序显示在本地机器上。如果没有转发的 X 连接(因为 SSH 被配置为不这样做,或者因为没有本地 X 服务器),SSH 不会设置DISPLAY.

DISPLAY显式设置会导致程序显示在通常不会出现的位置。例如,DISPLAY=:0 gnome-panel在 SSH 连接中运行会在远程机器的本地显示器上启动一个 Gnome 面板(假设有一个并且用户有权访问它)。显式设置DISPLAY=:0通常是一种从本地会话外部访问机器本地显示的方法,例如通过远程访问或从 cron 作业。