指定的X服务器连接无效

时间:2015-07-10 18:28:47

标签: linux opengl lwjgl nvidia

我在Ubuntu中运行IDEA:my_web_page_queryset.annotate(clicks=Sum('count__count'))
我使用库LWJGL编写了一个应用程序。当我运行项目时,发现了一个错误窗口:

sudo ./idea.sh

Core.java,Creatind windows:

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)

1 个答案:

答案 0 :(得分:0)

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

X11实现了各种身份验证机制,以防止不属于登录会话的用户访问X服务器。这不是通过Unix文件权限实现的,而是通过协议身份验证实现的。所以,即使你是root用户,你也无法与X服务器交谈,也不会跳过几个箍。特别是每个客户都需要访问Xauthority cookie。它们默认存储在${HOME}/.Xauthority中,但可以使用XAUTHORITY环境变量定义为从其他位置获取。

因此,要通过sudo传递,您可以将XAUTHORITY设置为指向您的登录会话用户的~/.Xauthority,然后使用环境保留选项调用sudo。

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

或者您可以在sudo之后设置XAUTHORITY环境。另一个更直率的选择是简单地在认证中打一个洞,允许所有在本地运行的客户端访问X服务器。但是这是个坏主意,因为系统上的每个用户都可以运行一个键盘记录程序或以其他方式搞乱你的会话(例如阻止屏幕锁定器工作)。你可以用xhost +si:localuser打孔,但你真的不应该这样做。