“无法打开显示`(null)’”错误。 我怎样才能解决这个问题?

我正在尝试运行一个appliaction,但是当我运行它时,我得到一个

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)'. 

这样的错误意味着您正在运行需要图形显示的程序而且找不到它。 GUI程序连接到$DISPLAY环境变量定义的$DISPLAY 。 错误的一般格式是

 Could not open display $DISPLAY 

因为,在您的情况下,错误说(null) ,这意味着没有设置$DISPLAY 。 因此,您需要:

  1. 如果使用ssh东西ssh远程计算机,则需要导出本地计算机的$DISPLAY并告诉远程计算机在那里显示GUI程序。 这可以使用ssh-X-Y选项完成:

     ssh -Y root@10.251.56.90 

    正如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 + F1 ),则可能只需要返回到图形环境。 这取决于您的GUI运行的虚拟控制台,但在大多数情况下,Ubuntu将为7,因此您可以使用Alt + F7返回它。

    如果这不会让您回到桌面,只需循环浏览所有ttys Alt + 向左箭头Alt + 向右箭头,直到找到合适的箭头

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

     xhost +si:localuser:terdon 

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

     xhost + 

    并撤销权限:

     xhost -