您的位置:首页 > 产品设计 > UI/UE

在putty等远程命令行终端执行带有GUI图形界面的程序找不到$DISPLAY错误的解决办法,xserver相关

2012-10-30 16:46 381 查看
偶在使用普通用户安装weblogic的时候碰到的GUI不能弹出的问题:

一般在命令行执行需要界面的程序,一般都会报 display找不到,或者说你的¥DISPAY环境变量没置的错误。这时就要通过设置DISPLAY环境变量为一个存在的显示器,还有通过xhost/xauth来设置显示器的权项。(xhost是久的,一般推荐用xauth了吧,xauth的安全控制更好一些。)
情况1. 
[root@ ~]# /usr/lib/firefox-1.5.0.12/firefox
(firefox-bin:24779): Gtk-WARNING **: cannot open display:
--------------
解决办法,执行如下命令。
export DISPLAY=:0.0     设置默认的显示器
xhost +LOCAL:    开放 本地连接xserver的权限
情况2.
[root@~]# xhost +LOCAL:
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
xhost: unable to open display ":0.0"
------------------------
[root@ ~]# startx
xauth: creating new authority file /root/.serverauth.19320
Fatal server error:
Server is already active for display 0
If this server is no longer running, remove /tmp/.X0-lock
and start again.
Xlib: connection to ":0.0" refused by server
Xlib: Invalid MIT-MAGIC-COOKIE-1 key
giving up.
xinit: unable to connect to X server
xinit: No such process (errno 3): Server error.
-------------------------------------------------------------------------
解决办法一:偶用的这种方法
export DISPLAY=:0.0     设置默认的显示器
init 3           关闭 xserver ,要先init 3 了才能startx ,startx后权限自动会被写到/root/.Xauthority 文件里面去,这样xauth list 就能显示正确的cookie ,xhost +localhost:   也会正常工作。
startx          启动server
xauth list     检查 xserver的连接权限
xhost +localhost:    开放 本地连接xserver的权限
如果这都不能解决问题, 去学学上面几个命令吧 ,man init   ,man xauth 等,
解决方法二:
这个问题可能是这种情况,Xorg 这个xserver进程是被gdm 等启动的,但xserver启动后,他不会像使用startx来启动一样把MIT-MAGIC-COOKIE写到 /root/.Xauthority 里面去,所以root想启动带gui的程序时就会出现没有权限的错误,就是那个MIT-MAGIC-COOKIE-1没有存在或者是错误的。这样的话,可以自己根据ps命令查出来的Xorg进程的状态,因为虽然他没有自动配置 /root/.Xauthority 文件,但他是生成一个认证的文件放在/var/gdm/:0.Xauth里面的。我们可以用xauth list来查看这个文件得到正确的MIT-MAGIC-COOKIE-1,然后自己把它添加到 /root/.Xauthority 文件里面去。这样也能解决问题。
[root@ ~]# ps -ef |grep X
root     14796 14789 1 23:55 tty8     00:00:01 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt8
root     14834 14510 0 23:57 pts/1    00:00:00 grep X
-------------------------------------
[root@ ~]# xauth -f /var/gdm/:0.Xauth list
#ffff##:0 MIT-MAGIC-COOKIE-1 6755317d62ce89e598dad3da65b14167
这个文件里的是正确的key
---------------------
[root@ ~]# xauth list
XXXXX/unix:0 MIT-MAGIC-COOKIE-1 3a03381e5745b7aad7477825c30740b4
localhost.localdomain:0 MIT-MAGIC-COOKIE-1 3a03381e5745b7aad7477825c30740b4
这个是 /root/.Xauthority 里面 的错误key
------------
[root@ ~]# xauth remove XXXXX/unix:0
[root@ ~]# xauth remove localhost.localdomain:0
--------------------------
[root@ ~]# xauth add XXXXX/unix:0 . 6755317d62ce89e598dad3da65b14167
[root@~]# xauth add localhost.localdomain:0 . 6755317d62ce89e598dad3da65b14167
---------------------------
[root@ ~]# xauth list
XXXXX/unix:0 MIT-MAGIC-COOKIE-1 6755317d62ce89e598dad3da65b14167
localhost.localdomain:0 MIT-MAGIC-COOKIE-1 6755317d62ce89e598dad3da65b14167
删掉再自己添加进来之后,这里就是正确的key了。
注意 XXXXX/unix 表示 XXXXX这个host采用的事unix socket协议,只允许本地连接的那种.
localhost.localdomain:0这种中间没有/unix的才允许远程tcp连接的,参考下面的xerver配置说明。
如果有时用终端登录过去也要为本地的display配置以下,程序才能找到相应的DISPLAY.
推荐使用第二种方法吧,因为这样不需要用init3 init5 进行切换,也可以避免使用startx,不知道startx和init 5的配置是不是一样的。还是init 5 之后用 第二种办法自己修改 magic cookie来的好一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐