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

use*_*504 6 display aws

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

Could not open display `(null').
Run Code Online (Sandbox Code Playgroud)

错误。为什么是这样?具体来说,我试图从头开始运行(我通过 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)'.
Run Code Online (Sandbox Code Playgroud)

ter*_*don 10

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

Could not open display $DISPLAY
Run Code Online (Sandbox Code Playgroud)

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

  1. 如果您在使用类似登录到远程计算机ssh,您将需要导出$DISPLAY您的本地机器,并告诉远程计算机显示GUI程序存在。这可以通过-X-Y选项来完成ssh

    ssh -Y root@10.251.56.90
    
    Run Code Online (Sandbox Code Playgroud)

    如中所述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.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果这是您的本地机器,则需要安装图形环境。如果已经安装了一个,假设默认的 Ubuntu 设置,您可以使用以下命令启动它:

    sudo service lightdm start
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您有一个正在运行的图形环境,但无论出于何种原因,$DISPLAY设置为null,您可以重新定义它。详细信息将取决于您的实际情况,但在大多数情况下,您将需要(再次假设您在本地计算机上)是

    export DISPLAY=:0.0
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

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

    xhost +si:localuser:terdon
    
    Run Code Online (Sandbox Code Playgroud)

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

    xhost +
    
    Run Code Online (Sandbox Code Playgroud)

    并撤销权限:

    xhost -
    
    Run Code Online (Sandbox Code Playgroud)