X11 转发:X11 连接因身份验证错误而被拒绝。错误:无法打开显示:localhost:10.0

X11 转发:X11 连接因身份验证错误而被拒绝。错误:无法打开显示:localhost:10.0

我读过很多类似的问题,但很多都过时了,而且似乎没什么用。我有一台家用电脑<remotehome>和一台笔记本电脑<locallaptop>,都在运行Ubuntu 22.04

我不在家,我可以<remotehome>使用 psw 或私钥通过 ssh 进入两者。

sudo ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa -X -p 2022 remoteuser@<remotehome>

(由于我家路由器上的端口转发,端口为 2022,不知道是否相关)

一旦进入远程主机,xdg-open或者firefox命令给我:

X11 connection rejected because of wrong authentication.
Error: cannot open display: localhost:10.0

xlogo在远程终端上运行实际上会在我的本地桌面上打开一个窗口。

有用信息:

df -H

在远程终端上,有足够的空间。

ls -l ~/.Xauthority

输出:

-rw------- 1 remoteuser remoteuser 69 mar 22 15:23 /home/remoteuser/.Xauthority

X11 转发已启用<remotehome>

X11Forwarding yes

/etc/ssh/sshd_config

在客户端上 X11 转发已启用。

Host *
ForwardX11 yes

/etc/ssh/ssh_config

xhost命令从远程终端和本地终端提供相同的输出:

access control enabled, only authorized clients can connect
SI:localuser:<my-username-in-local-laptop>

我的本地桌面上的 $XAUTHORITY 变量是:

/run/user/1000/.mutter-Xwaylandauth.PLS211

我已经尝试过提出的解决方案这里这里这里。似乎什么都没起作用。任何帮助调试此问题的帮助都将不胜感激。

答案1

您不需要使用sudossh它完全能够以普通用户的身份转发 X11 连接,不需要 root 权限。

您的本地笔记本电脑上是否也运行着 Firefox?

默认情况下,Firefox 使用 X11 窗口属性来检测同一 GUI 会话是否已包含正在运行的 Firefox 实例,如果已包含,则尝试向其发送命令以打开作为参数给出的 URL(如果没有 URL,则发送命令以打开新窗口),而不是启动整个新会话。SSH 转发使远程桌面上的 Firefox“认为”笔记本电脑上的 Firefox 位于同一主机上,但由于事实并非如此,Firefox 向现有实例发送命令的尝试将失败。

如果您的目标就是在主桌面上远程启动 Firefox 的第二个实例,则需要告诉它不要尝试使用此远程控制功能。例如:

firefox --no-remote https://www.google.com

请注意,像 Firefox 这样的现代 Web 浏览器在设计时就假设其进程在包含显示的同一主机上运行 - 如果不是这样,您将看到远程 Firefox 的窗口更新非常比以前慢得多。部分原因是 X11 服务器和 Firefox 进程之间增加了网络通信,从而导致延迟,另一部分原因是 Firefox 通常使用本地 GPU 的加速功能,而当渲染到位于不同计算机的显示器时,这些功能不可用。

与远程运行 Web 浏览器相比,使用 SSH 的动态端口转发功能可能会更好:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa -D 8080 -p 2022 remoteuser@<remotehome>

然后在笔记本电脑上配置 Web 浏览器以使用 SOCKS 代理localhost,端口为 8080:

Firefox 代理设置对话框

(记住原始代理设置,您稍后会需要它们。)

现在,笔记本电脑上的 Firefox 将连接 SSH 客户端创建的侦听套接字,并且通过它建立的所有连接都将转发到sshdSSH 连接的远程端。由于sshd了解 SOCKS 协议,Firefox 现在可以要求远程端sshd连接到任何服务。

瞧,您可以像在远程桌面上一样进行浏览,但您的 Web 浏览器完全在本地运行,因此窗口更新快速而高效!

当您结束 SSH 连接时,SSH 客户端可能会出现挂起状态,直到您关闭浏览器,因为它可能仍在为浏览器和远程之间提供一些 SOCKS 转发的 TCP 连接sshd

关闭 SSH 连接后,请记住将浏览器的代理设置恢复为原始值,否则您可能根本无法浏览。

相关内容