我在 VMWare 中运行 Ubuntu 服务器。我想将 X11 从 Ubuntu 客户机转发到 Mac 主机。
我已经安装XQuartz 2.7.9 (xorg-server 1.17.4)
在Mac主机上了。
Ubuntu 上的 SSH 转发已启用。
然后我在 iTerm 中尝试了以下操作:
%> echo $DISPLAY
/private/tmp/com.apple.launchd.mjxVyILVrR/org.macosforge.xquartz:0
%> ssh -X root@xxxx
# echo $DISPLAY
# gnome-terminal
Unable to init server: Could not connect: Connection refused
Failed to parse arguments: Cannot open display
$DISPLAY 为空,X11 转发不起作用。
有任何想法吗?
答案1
尝试跑ssh -Y root@xxxx
进去xterm
里面XQuartz 而不是 iTerm。那样有用吗?
答案2
在远程系统中打开 /etc/ssh/sshd_config 并设置 X11Forwarding yes 。然后重启ssh服务并重试
答案3
如果我错了请纠正我。您想要从 Mac 远程访问运行 Ubuntu 的计算机,当您“ssh”进入 Ubuntu 并尝试“echo $DISPLAY”时,您会得到一个空响应。以下解决方案可能不适用于您的情况,但如果您尝试的内容与我尝试过的类似,请尝试一下。
正如您已经发现的那样,必须首先找到 DISPLAY 变量。
所以在你的 Mac 中如果你以普通用户身份输入
echo $DISPLAY
那么你会得到类似下面的东西(就是你手上的情况)。不管怎样,你们都会在你们的系统中看到类似的东西。
/private/tmp/com.apple.launchd.0aQYNoXMFK/org.xquartz:0
然后尝试类似的东西
xeyes
现在您知道您的显示器正在工作
现在,如果您想尝试与root相同的操作(请不要跳到我身上,我知道你们中的一些人强烈反对root访问),但如果不起作用,那么在您的root提示符中执行以下操作
export DISPLAY=/private/tmp/com.apple.launchd.0aQYNoXMFK/org.xquartz:0
与您在普通用户帐户中找到的相同。然后将“/Users/normal user/.Xauthority”处的“.Xauthority”复制到“/var/root/”。 .Xauthority 文件已经存在,但这会覆盖它。
cp /Users/normal user/.Xauthority /var/root/
当然,导出可能会起作用,但执行上述操作并没有坏处。现在尝试以下操作。
echo $DISPLAY
你应该看到以下内容
/private/tmp/com.apple.launchd.0aQYNoXMFK/org.xquartz:0
如果您从普通用户提示符“ssh”进入 Ubuntu,那么您不需要执行 root 部分,但由于我使用 root 来“ssh”我的 Ubuntu 系统,所以我经常必须这样做。
然后当你通过 ssh 进入 Ubuntu 时输入
echo $DISPLAY
你会看到类似下面的内容
localhost:10.0
如果您已完成所有其他操作(例如转发等),则上述内容将起作用。
同样,如果您想在 Ubuntu 中使用 root 并且“echo $DISPLAY”没有产生任何响应,请尝试以下操作(假设您处于 root 提示符下)。
cp /home/user name/.Xauthority /root/.Xauthority
现在尝试
echo $DISPLAY
再次,你会看到类似下面的内容
localhost:10.0
为了好玩尝试一下
xeyes
它适用于我的情况。希望这对您有所帮助,并且能够解决像上面这样的问题,或者像我这样的问题,有人遇到过,并且像我一样在这个问题上花了几个小时,同时挠头并试图拔掉头发:-))。
答案4
在尝试了很多不同的选择之后,这对我有用:
在我的 Mac 上:
我首先启动 xQuartz。然后我进入终端并运行export DISPLAY=localhost:0
.
在我的远程 Linux PC 上:
我遇到了 Wayland 问题,所以我去了/etc/gdm/custom.conf
并取消注释该行WaylandEnable=false
。我也定了export XAUTHORITY=$HOME/.Xauthority
。最后,我设置了export QT_QPA_PLATFORM=xcb
一些图形库是 python 工作的原因。
设置完成后,您现在可以使用 ssh 进入远程服务器ssh -Y remoteserver@IP
,希望这应该可以工作。