【问题标题】:How can I specify a display?如何指定显示器?
【发布时间】:2010-10-21 12:41:08
【问题描述】:

当我通过 SSH 运行一些程序时,例如 firefox &,我得到一个错误

Error: no display specified 

我想打开许多显示,仍然显示每个程序的stdout

初始问题:如何指定显示器以获得多显示器的节目?

Pablo Santa Cruz 为我提供了以下代码作为解决方案。 没看懂。

$ export DISPLAY=yourmachine.yourdomain.com:0.0

$ firefox &

命令中的yourmachineyourdomain.com是什么?

【问题讨论】:

    标签: x11


    【解决方案1】:

    X 的工作方式与任何网络程序的工作方式相同。您有一个运行在特定机器上的某种描述的服务器(在本例中为 X 显示服务器),并且您有 X 客户端(如 firefox)尝试连接到该服务器以显示其信息。

    通常(在“家庭”机器上),客户端和服务器在同一个机器上运行,并且只有一台服务器,但 X 足够强大,不需要发生这种情况。它从一开始就内置了服务器/客户端分离。

    这使您可以做一些奇妙的事情,例如在地球的中途登录您的盒子(以文本模式),告诉它显示服务器是您当前所在的盒子,瞧,窗户突然启动出现在本地。

    为了让客户端与用户交互,它需要知道如何找到服务器。有很多方法可以做到这一点。许多客户端允许使用-display--display选项来指定它:

    xeyes -display paxbox1.paxco.com:0.0
    

    如果没有明确给出显示,许多人将使用DISPLAY 环境变量。您可以像设置任何其他变量一样设置此变量:

    DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY # in .profile
    export DISPLAY=paxbox1.paxco.com:0.0 # in your shell
    DISPLAY=paxbox1.paxco.com:0.0 firefox & # for that command (shell permitting)
    

    DISPLAY 变量的第一部分只是显示服务器机器的地址。它遵循与任何其他 IP 地址相同的规则;它可以是可解析的 DNS 名称(包括localhost)或特定的 IP 地址(例如 192.168.10.55)。

    第二部分是 X 特定的。它给出了要使用的 X“显示”(X 服务器)编号和屏幕编号。第一个(显示编号)通常是指一组包含一个或多个屏幕但只有一个键盘和鼠标的设备(即一个输入流)。屏幕编号通常给出该组中的特定屏幕。

    一个例子是:

    +----------------------------------------+
    |paxbox1.paxco.com|                      |
    +-----------------+                      |
    |                                        |
    |  +----------+----+  +----------+----+  |
    |  |Display :0|    |  |Display :1|    |  |
    |  +----------+    |  +----------+    |  |
    |  |               |  |               |  |
    |  | +-----------+ |  |               |  |
    |  | |Screen :0.0| |  |               |  |
    |  | +-----------+ |  |               |  |
    |  | +-----------+ |  |               |  |
    |  | |Screen :0.1| |  |               |  |
    |  | +-----------+ |  |               |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | |Screen :0.2| |  | |Screen :1.0| |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | |Screen :0.3| |  | |Screen :1.1| |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | | Keyboard  | |  | |  Keyboard | |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  | |   Mouse   | |  | |   Mouse   | |  |
    |  | +-----------+ |  | +-----------+ |  |
    |  +---------------+  +---------------+  |
    |                                        |
    +----------------------------------------+
    

    这里有一台机器 (paxbox1.paxco.com) 和两台显示服务器。第一个有四个屏幕,第二个有两个。那么可能性是:

    DISPLAY=paxbox1.paxco.com:0.0
    DISPLAY=paxbox1.paxco.com:0.1
    DISPLAY=paxbox1.paxco.com:0.2
    DISPLAY=paxbox1.paxco.com:0.3
    DISPLAY=paxbox1.paxco.com:1.0
    DISPLAY=paxbox1.paxco.com:1.1
    

    取决于您希望实际窗口出现的位置以及您要使用的输入设备。

    【讨论】:

    • 为什么你需要在你的个人资料中添加这个DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY --- 这个代码DISPLAY=paxbox1.paxco.com:0.0 firefox & 的目的是为了在 Firefox 中看到很多显示吗?跨度>
    • (1) DISPLAY 需要设置在某处。如果对您来说总是一样,请在您的个人资料中进行。 (2) 这为单个 firefox 命令设置了 DISPLAY only
    • @begueradj,是的,如果您正在运行的机器没有 gui,那么在 macine 上运行 gui 应用程序是正常的,尽管通常不是您想要控制它的远程设备.
    • 我们用来对付没有正确保护他们的 X 显示服务器的同事的一个技巧是使用他们的 IP 地址在他们的屏幕上打开xeyes(一双眼睛会看向他们的鼠标光标),或者更好的是xroach,它会在屏幕上产生过多的蟑螂,当你发现它们时它们会迅速在窗户后面跑来跑去:-)
    • 对于其他来这里寻找“监视器”、“屏幕”、“显示器”等术语的澄清的人,维基百科文章的这一部分很有用:en.wikipedia.org/wiki/X_Window_System#Nomenclature
    【解决方案2】:
    $ export DISPLAY=yourmachine.yourdomain.com:0.0
    $ firefox &
    

    【讨论】:

    • 只是添加一个注释,如果您有第二台显示器等,您可以将:0.0 更改为“:0.1”。
    • 同样,如果您有多个 X 会话正在运行,您可以使用 :1.0、:2.0 等在特定会话上启动应用程序。
    【解决方案3】:

    当您通过 SSH 连接到另一台机器时,您可以在 SSH 中启用 X-Forwarding,以便 X 窗口通过 SSH 隧道加密转发回您的机器。您可以通过将 -X 附加到 ssh 命令行或在 SSH 配置文件中设置 ForwardX11 yes 来启用 X 转发。

    要检查 X-Forwarding 是否设置成功(服务器可能不允许),只需尝试 echo $DISPLAY 是否输出类似 localhost:10.0 的内容。

    【讨论】:

    • 我会推荐使用这个解决方案,因为它更简单。
    【解决方案4】:

    通过

    登录到您的服务器
    ssh -X root@yourIP
    

    编辑 /etc/ssh/sshd_config 文件,并将这一行添加到其中。

    X11UseLocalhost no
    

    重启 sshd。对于 CentOS (check your distribution)

    /sbin/service sshd restart
    

    检查您的显示器

    echo $DISPLAY
    

    你应该看到这个

    yourIP:10.0
    

    享受

    firefox
    

    for more info

    【讨论】:

    • 你能解释一下为什么X11UseLocalhost no这行吗?
    • 感谢您的解决方案!非常适合我。 Ubuntu 18.04
    • @LéoLéopoldHertz준영 如果没有此选项,X11 可能会重定向到主机或您 - 客户端。您可以按照更复杂的说明将 X 服务器指向客户端或使用此设置来明确。
    【解决方案5】:

    试试

    export DISPLAY=localhost:0.0
    

    【讨论】:

    • export DISPLAY=:0.0
    • @sreenath 如果我的本地机器是服务器(没有 GUI),而我的远程机器是我想在其上启动 firefox 的 Ubuntu 桌面怎么办?
    • @user3702267 你有没有办法按照你的要求去做?
    【解决方案6】:

    通过 SSH 连接时,请不要尝试手动设置 $DISPLAY。
    如果您通过SSH -X 连接并且$DISPLAY 保持为空,这通常意味着无法建立加密通道。

    您很可能缺少xauthxorg-x11-xauth 包。尝试使用以下命令将其安装在远程计算机上:

    sudo apt-get install xauth
    

    sudo apt-get install xorg-x11-xauth
    

    结束后重新启动您的 SSH 连接。不要忘记使用SSH -X,以便将 X Window 输出转发到您的本地计算机。

    现在再次尝试echo $DISPLAY,看看$DISPLAY 是否已被SSH 恶魔自动设置。它应该向您显示带有 IP 地址和端口的行。

    【讨论】:

    • 知道为什么/var/lib/dpkg/lock-frontend 不可用吗?
    【解决方案7】:

    我遇到了类似的问题,所以也许这个答案会对某人有所帮助。

    Error: no display specified 错误的原因是 Firefox 正在启动,但远程主机上没有运行 X 服务器 (GUI)。您可以使用 X11 转发在远程主机上运行 Firefox,但在本地主机上显示它。在 Mac OS X 上,您需要下载 XQuartz 才能使用 X11 转发。没有它,您将不会设置$DISPLAY 变量,因此如果您尝试使用echo $DISPLAY,它将是空白的。

    【讨论】:

      【解决方案8】:

      尝试安装 xorg-x11-xauth 软件包。

      【讨论】:

      • 它必须安装在远程或本地机器上?
      • 它必须安装在您要连接的机器上,而不是安装在您要查看 X11-Gui 的机器上。
      【解决方案9】:

      我今天遇到了类似的问题。所以,这里有一个简单的解决方案: 在对机器进行 SSH 时,只需添加 Ctrl - Y

      ssh user@ip_address -Y
      

      登录后,输入firefox &。 你很高兴。

      【讨论】:

      • -Y 的目的是什么?为什么有 CTRL 和 Y?
      • 这里是否需要ssh -X,如此处所述stackoverflow.com/a/47014623/54964
      • -Y 或 -X 都可以根据我的经验工作。这工作正常,直到我 ssh'd 到我在本地登录的机器。我认为这会导致“错误:未指定显示”,因为 X 服务器客户端不明确。
      【解决方案10】:

      即使我在 CentOS 6.8 中也面临同样的问题。

      yum reinstall xorg*
      

      结束当前会话并在 mobiXterm 等工具中打开另一个会话。确保会话在工具中启用了 X11 转发。

      【讨论】:

      • 能否请您添加安装后执行的命令。欢迎提供示例!
      【解决方案11】:

      我通过vnc对X11了解的比较多。 要指定显示以获得多显示程序, 导出 DISPLAY=IP:DisplayNum.ScreenNum

      例如,

      vncserver :2
      vncserver -list
      echo '$DISPLAY'=$DISPLAY 
      export DISPLAY=:2  # export DISPLAY=IP:DisplayNum or export DISPLAY=:DisplayNum for localhost; So that can vnc connect and see the vnc desktop :2 if $DISPLAY is not :2.
      echo '$DISPLAY'=$DISPLAY
      

      【讨论】:

      • 你能扩展更多吗?目前尚不清楚这如何回答 OP 的问题。
      • 要指定显示以获得多显示程序,请导出 DISPLAY=IP:DisplayNum.ScreenNum
      【解决方案12】:

      我在输入 firefox 之前使用的是 xming 服务器,使用以下命令 导出显示=0:0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 2020-12-27
        • 2020-08-10
        • 1970-01-01
        • 2011-05-20
        相关资源
        最近更新 更多