主机:Fedora 36,6.0.18-200.fc36.x86_64,OpenSSH_8.8p1,X11Forwarding yes
客户端:Windows 10,MobaXterm 22.1
我打开与主机的第一个连接,x11-forwarding 起作用了。
host01/unix:22 MIT-MAGIC-COOKIE-1 5910df423cb206bccd40df7d23132345
host01/unix:21 MIT-MAGIC-COOKIE-1 d53c12b33486aa9174722df08219523c
host01/unix:20 MIT-MAGIC-COOKIE-1 a5ae8cc54800be76bf34eb0efcfef010
host01/unix:19 MIT-MAGIC-COOKIE-1 1ec5c2cc744b058e8a71dda241800271
host01/unix:11 MIT-MAGIC-COOKIE-1 5cefae987f7cb71b941107b99b15c630
host01/unix:12 MIT-MAGIC-COOKIE-1 bf78e1d7b33c7410cb266c548b9732a8
host01/unix:13 MIT-MAGIC-COOKIE-1 048d7933f3212d654fbc84e7f20579c2
host01/unix:14 MIT-MAGIC-COOKIE-1 d358f594c3e342e9bafa53bf2419751c
host01/unix:15 MIT-MAGIC-COOKIE-1 cdf77dfabbad8be764a5bba194525ffd
host01/unix:16 MIT-MAGIC-COOKIE-1 c610a4ed220523956fcedb4f6058c06e
host01/unix:17 MIT-MAGIC-COOKIE-1 10070d43b0a838bcb8605fe41cb75e49
host01/unix:18 MIT-MAGIC-COOKIE-1 18b41e95ffa21a4e2e9c11da03beea07
host01/unix:0 MIT-MAGIC-COOKIE-1 53d8bf1e11674497b602e4c39e0ed928
host01/unix:10 MIT-MAGIC-COOKIE-1 efa99cc0e407d8b23a479b9c7d502d94
现在,如果我在客户端上打开到主机的另一个连接,x11-forwarding 在第二个连接上不再起作用,但在第一个连接上也不起作用,cookie 会发生变化:
host01/unix:10 MIT-MAGIC-COOKIE-1 4b50ceb92269a17825ecd011208dbe81
其它饼干保持不变。
user@host01 ~ $ xterm
MoTTY X11 proxy: Authorisation not recognised
In case you are trying to start a graphical application with "sudo", read this article in order to avoid this issue:
https://blog.mobatek.net/post/how-to-keep-X11-display-after-su-or-sudo/
xterm: Xt error: Can't open display: localhost:10.0
这能修复吗?以前也出现过这种情况,但我不确定发生了什么变化,主机已启用自动更新(还不是 Fedora 37)。
如果我在文件上使用 chattr +i,则会打印以下内容:
/usr/bin/xauth: /home/user/.Xauthority not writable, changes will be ignored
/usr/bin/xauth: /home/user/.Xauthority not writable, changes ignored
答案1
嗨,我有一个非常相似的选项,并且已经将范围缩小了一点。系统已完全更新为最新版本或我使用的所有内容。内核 vmlinuz-6.0.18-200.fc36.x86_64 失败内核 vmlinuz-6.0.9-200.fc36.x86_64 运行正常。抱歉,我没有介于两者之间的任何内核。因此,完全相同的软件和配置适用于旧内核,但适用于新内核。
这一切都发生在我的本地网络上。我实际的问题是用户二连接到我的服务器并尝试远程显示。一切都很好。第二个用户(以及之后的所有用户)连接,当他们尝试显示时,根据程序的不同,会出现各种错误,但有一个屏幕由于身份验证错误,导致 X11 连接被拒绝。(如果是同一个用户,则用户二的输出会出现在用户一屏幕上。)显然,它试图写入错误的屏幕并失败了。由于错误在内核中,而不是在任何系统程序/文件中,我猜只有修复该代码才能使其再次正常工作。
目前我唯一的解决方案是在旧内核上启动。也许这对你也有效,至少你现在可以继续下去。
答案2
我已经自己“修复”了它,但这只是一种解决方法:
附加到您的.bashrc
:
if [[ -n $SSH_CONNECTION ]] ; then
xset -q > /dev/null 2>&1
ret=$?
if [[ $ret -eq 0 ]]; then
sudo /usr/bin/chattr +i /home/user/.Xauthority
fi
fi
这会使文件处于写保护状态。后续 SSH 连接将能够使用 x11 转发。但是,如果您关闭 ssh 客户端,这将不再起作用。因此:
systemd-timer 每分钟:
#!/bin/bash
conns=$(last -a | grep -i still |grep pts)
ret=$?
if [[ $ret -eq 1 ]]; then
echo "no ssh login found"
/usr/bin/chattr -i /home/user/.Xauthority
fi
这将每分钟运行一次,如果没有 ssh 用户登录,则会删除写保护。