我正在尝试运行一个应用程序,但是当我运行它时,我得到一个
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未设置。因此,您需要:
如果您在使用类似登录到远程计算机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)如果这是您的本地机器,则需要安装图形环境。如果已经安装了一个,假设默认的 Ubuntu 设置,您可以使用以下命令启动它:
sudo service lightdm start
Run Code Online (Sandbox Code Playgroud)如果您有一个正在运行的图形环境,但无论出于何种原因,$DISPLAY设置为null,您可以重新定义它。详细信息将取决于您的实际情况,但在大多数情况下,您将需要(再次假设您在本地计算机上)是
export DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)
然后您可以正常运行您的 GUI 程序。
如果您确实有一个 X 服务器正在运行,但已切换到 tty(例如通过按Ctrl+ Alt+ F1),您可能只需要返回到您的图形环境。这取决于您的 GUI 正在运行哪个虚拟控制台,但在大多数情况下,在 Ubuntu 上将为 7,因此您可以使用Alt+返回它F7。
如果这不能让您回到桌面,只需循环浏览所有 tty Alt+Left Arrow或Alt+,Right Arrow直到找到正确的。
另一个常见问题是您以普通用户身份启动了 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)