You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSH执行PyQt文件遇X11认证错误求助

解决SSH运行PyQt GUI时的X11认证失败问题

我碰到过不少远程运行PyQt GUI时的X11转发坑,咱们一步步来排查你这个X11 connection rejected because of wrong authentication和QXcbConnection的报错:

一、先再核对核心配置(别嫌麻烦,细节容易漏)

虽然你说已经检查过X11转发,但有些小细节可能没注意到:

  • 客户端(本地机器):连接时一定要用-Y参数(信任X11转发,比-X的严格认证更兼容),命令改成:
    ssh -Y username@你的远程主机地址
    
  • 服务器端(远程机器):打开/etc/ssh/sshd_config,确认这几项配置是开启状态:
    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost yes
    
    改完重启sshd服务:
    # Systemd系统(Ubuntu 16.04+/CentOS 7+)
    sudo systemctl restart sshd
    # 旧版SysV系统
    sudo service ssh restart
    

二、手动修复X11认证令牌(最常见的解决办法)

这个报错90%是本地的X11认证令牌没正确传递到远程,试试手动同步:

  1. 在本地终端(还没SSH登录时),运行xauth list,会输出类似这样的内容:
    localhost/unix:0  MIT-MAGIC-COOKIE-1  8a9b0c1d2e3f4g5h6i7j8k9l0m1n2o3p
    
  2. SSH登录远程机器后,执行xauth add加上刚才本地的记录,注意把unix:0改成你报错里的unix:10(对应localhost:10.0的Display编号):
    xauth add localhost/unix:10  MIT-MAGIC-COOKIE-1  8a9b0c1d2e3f4g5h6i7j8k9l0m1n2o3p
    
  3. 嫌手动输麻烦?可以用这条命令直接一键传递认证信息:
    xauth extract - $DISPLAY | ssh username@你的远程主机地址 xauth merge -
    

三、检查环境变量和依赖

登录远程后,先确认几个关键项:

  • 运行echo $DISPLAY,输出应该是localhost:10.0(和你报错里的一致),如果是空的手动设置:
    export DISPLAY=localhost:10.0
    
  • 确保远程机器装了PyQt需要的X11依赖,比如Debian/Ubuntu系:
    sudo apt install xauth libxcb-xinerama0
    
    CentOS/RHEL系:
    sudo yum install xauth libxcb-xinerama
    

四、排查权限和安全策略干扰

  • 检查远程机器上/tmp/.X11-unix目录的权限,确保你的用户有读权限:
    ls -ld /tmp/.X11-unix
    
  • 如果是CentOS/RHEL系统,试试临时关闭SELinux测试(如果能运行再去配置规则):
    sudo setenforce 0
    
  • Ubuntu系的AppArmor也可能拦截,临时关闭试试:
    sudo systemctl stop apparmor
    

五、用 verbose 日志找问题

如果以上都不行,开启SSH的详细日志,看X11转发的具体报错点:

ssh -vY username@你的远程主机地址

日志里会输出X11认证的每一步,比如是不是服务器拒绝了令牌,或者客户端没正确发送认证信息,根据日志再针对性解决。

内容的提问来源于stack exchange,提问作者chin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:01:34