gpt4 book ai didi

linux - 指定的 X 服务器连接无效

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:55 26 4
gpt4 key购买 nike

我在 Ubuntu 中运行 IDEA:sudo ./idea.sh
我使用 LWJGL 库编写了一个应用程序。当我运行该项目时,发现一个错误窗口:

Exception in thread "main" java.lang.IllegalStateException: Invalid X server connection specified.
at org.lwjgl.system.linux.opengl.LinuxGLContext.createFromCurrent(LinuxGLContext.java:68)
at org.lwjgl.system.linux.opengl.LinuxGLContext.createFromCurrent(LinuxGLContext.java:63)
at org.lwjgl.opengl.GLContext.createFromCurrent(GLContext.java:41)
at core.Core.createWindow(Core.java:160)
at core.Core.main(Core.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Core.java,创建窗口:

if (glfwInit() != GL_TRUE) System.out.println("#0: Failed to create window");
window = glfwCreateWindow(Settings.getWidth(), Settings.getHeight(), "Look", GL_NONE, GL_NONE);
if (window == GL_NONE) System.out.println("#1: Failed to create window");
glfwMakeContextCurrent(window);
glfwShowWindow(window);

ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window,
(GLFWvidmode.width(vidmode) - Settings.getWidth()) / 2,
(GLFWvidmode.height(vidmode) - Settings.getHeight()) / 2);
GLContext.createFromCurrent(); // String №160
glfwSwapInterval(1);

最佳答案

首先要做的事情是:为什么要尝试以 super 用户权限运行图形应用程序?这通常是一个坏主意。

<小时/>

X11 实现了各种身份验证机制,以防止不属于登录 session 一部分的用户访问 X 服务器。这不是通过 Unix 文件权限实现的,而是通过协议(protocol)身份验证实现的。因此,即使您是 root,您也无法与 X 服务器通信,除非跳过一些麻烦。特别是每个客户端都需要访问 Xauthority cookie。这些默认存储在 ${HOME}/.Xauthority 中,但可以定义为使用 XAUTHORITY 环境变量从不同位置获取。

因此,要通过 sudo 传递该信息,您需要将 XAUTHORITY 设置为指向登录 session 用户的 ~/.Xauthority,然后使用环境保护选项调用 sudo。

export XAUTHORITY="${HOME}/.Xauthority"
sudo -E ./idea.sh

或者您可以在 sudo 之后设置 XAUTHORITY 环境。另一个更生硬的选择是简单地在身份验证中打一个洞,允许所有本地运行的客户端访问 X 服务器。然而,这是一个坏主意,因为这样您系统上的每个用户都可以运行键盘记录器或以其他方式扰乱您的 session (例如阻止屏幕锁定器工作)。您可以使用 xhost +si:localuser 打这个洞,但您确实不应该这样做。

关于linux - 指定的 X 服务器连接无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com