出现:Can‘t connect to X11 window server using “:0.0“ as the value of the DISPLAY variable的解决方案

文章目录

  • 1、问题描述
  • 2、原因分析
  • 3、解决方案
  • 总结

1、问题描述

在虚拟机中,使用以下命令:

java -jar -Djava.awt.headless=false 运行jar包的全路径

想启动一个基于Swing的图形化界面程序时,系统提示以下报错信息:“main” java.awt.AWTError: Can’t connect to X11 window server using “:0.0” as the value of the DISPLAY variable.
出现:Can‘t connect to X11 window server using “:0.0“ as the value of the DISPLAY variable的解决方案_第1张图片


2、原因分析

在虚拟机中运行基于Swing的图形化程序时,如果没有正确配置 DISPLAY 环境变量,就会出现上述的错误。主要是因为:

系统没有正确设置 DISPLAY 变量,Java 无法连接到图形化界面的 X11 窗口服务器。


3、解决方案

X11 会话通过一个包含安全令牌的文件来验证身份,这个文件通常位于 ~/.Xauthority。

当登录到系统中时,X11 会话会自动启动并创建一个包含安全令牌的文件,这个令牌用于验证当前用户对 X11 窗口服务器的访问权限。

xauth list $DISPLAY 命令将会输出当前 X11 会话中可用的所有安全令牌。通过查看输出结果,您可以确认当前会话是否具有访问 X11 窗口服务器的权限。

xauth list $DISPLAY

在这里插入图片描述
上述输出的内容即为认证令牌,它的的格式通常为:

主机名/unix:显示号 MIT-MAGIC-COOKIE-1 安全令牌
  • 主机名:指当前计算机的主机名;
  • /unix:显示号:指用于显示图形界面的 X11 显示端口的名称;
  • MIT-MAGIC-COOKIE-1:指认证令牌所使用的加密协议;
  • 安全令牌:指认证令牌的值。

在获得认证令牌后,我们需要使用:

xauth add 认证令牌

将命令输出的认证令牌添加到root用户,例如:

xauth add localhost/unix:1  MIT-MAGIC-COOKIE-1  3c1af028797fa05b6596c92a6f81de0a
xauth add localhost/unix:2  MIT-MAGIC-COOKIE-1  cdcb5df4f98dfeae6fe971df41109304

在这里插入图片描述
最后,再设置 DISPLAY 环境变量,指定要在本地主机上显示图形界面的 X11 显示号:1。

export DISPLAY=localhost:1
source /etc/profile

在这里插入图片描述

再次运行jar文件,程序可以运行。
出现:Can‘t connect to X11 window server using “:0.0“ as the value of the DISPLAY variable的解决方案_第2张图片


总结

  1. 首先需要执行: xauth list $DISPLAY 所有安全令牌;
  2. 将命令输出的认证令牌添加到root用户;
  3. 设置 DISPLAY 变量。

你可能感兴趣的:(Swing,java,swing)