“无法打开显示‘(null)’”错误。我该如何修复此问题?

“无法打开显示‘(null)’”错误。我该如何修复此问题?

我正在尝试运行一个应用程序,但是当我运行它时我得到了一个

Could not open display `(null').

错误。为什么会这样?具体来说,我试图运行 Scratch(我通过 aws 安装):

root@ip-10-251-56-90:/usr/bin# ./scratch
Executing: /usr/lib/squeak/4.4.7-2357/squeakvm -encoding UTF-8 -vm-display-x11 -xshm -plugins /usr/lib/scratch/plugins/:/usr/lib/squeak/4.4.7-2357/ -vm-sound-ALSA /usr/share/scratch/Scratch.image
Could not open display `(null)'.

答案1

此类错误意味着您正在运行一个需要图形显示的程序,但找不到图形显示。GUI 程序连接到$DISPLAY环境变量定义的显示。错误的一般格式为

Could not open display $DISPLAY

因为,在你的情况下,错误显示(null),这意味着$DISPLAY未设置。因此,你需要:

  1. 如果你使用类似的东西登录到远程机器ssh,你需要导出$DISPLAY你的当地的机器并告诉远程计算机在那里显示 GUI 程序。这可以使用-X-Y选项来完成ssh

    ssh -Y [email protected]
    

    详见man ssh

     -Y  Enables trusted X11 forwarding.  Trusted X11 forwardings are not
         subjected to the X11 SECURITY extension controls.
     -X  Enables X11 forwarding.  This can also be specified on a per-host
         basis in a configuration file.
    
  2. 如果这是你的本地机器,你需要安装图形环境如果已经安装,假设使用默认的 Ubuntu 设置,您可以使用以下命令启动它:

    sudo service lightdm start
    
  3. 如果您正在运行图形环境,但出于某种原因,$DISPLAY设置为null,则可以重新定义它。细节将取决于您的实际情况,但在大多数情况下,您需要的是(再次假设您在本地计算机上)

    export DISPLAY=:0.0
    

    然后您就可以正常运行您的 GUI 程序。

  4. 如果您确实有一个正在运行的 X 服务器,但已切换到 tty(例如,通过按Ctrl+ Alt+ ),则可能只需返回到图形环境。这取决于您的 GUI 正在运行哪个虚拟控制台,但在大多数情况下,Ubuntu 上的虚拟控制台将是 7,因此您可以使用+F1返回到它。AltF7

    如果这不能使您返回到桌面,只需循环浏览所有 tty Alt+Left ArrowAlt+Right Arrow直到找到正确的 tty。

  5. 另一个常见问题是,您以普通用户身份启动了 X 会话,现在正尝试以root其他用户身份连接到该会话。要启用此功能,您需要指定此用户有权访问您的图形桌面。例如:

    xhost +si:localuser:terdon
    

    这将允许本地用户terdon连接到正在运行的 X 服务器。该命令需要由 X 会话的所有者运行。或者,要允许任何人连接:

    xhost +
    

    撤销权限:

    xhost -
    

相关内容