我正在尝试运行一个应用程序,但是当我运行它时我得到了一个
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
未设置。因此,你需要:
如果你使用类似的东西登录到远程机器
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.
如果这是你的本地机器,你需要安装图形环境如果已经安装,假设使用默认的 Ubuntu 设置,您可以使用以下命令启动它:
sudo service lightdm start
如果您正在运行图形环境,但出于某种原因,
$DISPLAY
设置为null
,则可以重新定义它。细节将取决于您的实际情况,但在大多数情况下,您需要的是(再次假设您在本地计算机上)export DISPLAY=:0.0
然后您就可以正常运行您的 GUI 程序。
如果您确实有一个正在运行的 X 服务器,但已切换到 tty(例如,通过按Ctrl+ Alt+ ),则可能只需返回到图形环境。这取决于您的 GUI 正在运行哪个虚拟控制台,但在大多数情况下,Ubuntu 上的虚拟控制台将是 7,因此您可以使用+F1返回到它。AltF7
如果这不能使您返回到桌面,只需循环浏览所有 tty Alt+Left Arrow或Alt+Right Arrow直到找到正确的 tty。
另一个常见问题是,您以普通用户身份启动了 X 会话,现在正尝试以
root
其他用户身份连接到该会话。要启用此功能,您需要指定此用户有权访问您的图形桌面。例如:xhost +si:localuser:terdon
这将允许本地用户
terdon
连接到正在运行的 X 服务器。该命令需要由 X 会话的所有者运行。或者,要允许任何人连接:xhost +
撤销权限:
xhost -