玩转X

玩转X

下面的分析是在Ubuntu环境下进行的。

X分为Server和Client,我们可以通过X :1 vt9来启动一个X Server,然后DISPLAY=:1 gedit你会发现gedit这个client应用会出现在vt9上(通过Ctrl+alt+F9)来切换,当然你可以通过DISPLAY=:1 gnome-session在vt9上启动一个gnome-session,这样就相当于你在本地打开了两个桌面会话,其实这也可以通过startx -- :1 vt9这一个命令搞定。
如果出现了“X: user not authorized to run the X server, aborting.”这种错误,解决的方法是:修改/etc/X11/Xwrapper.config中的控制项:allowed_users=anybody。
如果期望在vt9上为另外一个用户打开一个X,需要先sudo login user2(使用su user2是不行的),然后再startx -- :1 vt9;或者先ssh user2@localhost,然后再startx -- :1 vt9,总之可以用w命令看一下,如果看不到user2就不行。

很多时候我们ssh到服务器,可以通过ssh -C -X server_ip来连接服务器,这样可以执行服务器上的任何窗口应用了。但这么做之前请确保:设置服务器端配置文件/etc/ssh/sshd_config中包含"X11Forwarding yes";客户端配置文件/etc/ssh/ssh_config包含"ForwardX11 yes"。这种情况下,从客户端ssh到服务器端后, 服务端会自动设置DISPLAY环境变量, 允许在服务器端执行的图形程序将图形显示在客户端上. 在服务器上查看环境变量显示如下:
DISPLAY=localhost:10.0
在服务器上用netstat -lnpt可以看到有程序监听了6010端口
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     4827/1
其实就是在服务器上启动了一个XServer,侦听6010端口,所以在服务器上运行窗口应用时(就是XClient)可以在在XServer上显示,而ssh server会进行X11Forwarding,这样窗口就通过ssh隧道来到了客户端,如果不希望在客户端当前vt上显示的话,可以在例如vt9上开一个X,然后执行DISPLAY=:1 ssh -C -X Server_ip

可以设置DISPLAY=host:NumA.NumB,现在的系统启动X时都不再侦听端口,所以一般都是在本地玩X,如果服务器的X启动时打开了端口,那么可以直接把客户端的XClient放到服务器上,关于DISPLAY的详细说明,大家可以参考:http://hi.baidu.com/twltnjbntobehiq/item/af145efbaa022a13d7ff8c88

下面再说说常用的一款软件vnc,一般我们用vncserver在服务器上启动一个daemon进程侦听端口,在客户机上用vncviewer来连接服务器上的vncserver,从而开启一个远程X桌面,最新的vnc(5.0.3)为例,在服务器上安装vncserver,别用/etc/vnc/下面的脚本启动vncserver,也别用vncserver-x11启动usermode的vncserver,这个server会让vncviewer看到和server完全一样的桌面,而且会同步控制server,用vncserver命令来启动,在5.0.3中这种模式被称作virtual模式,vncviewer连接这种vncserver后,相当于新开启一个X桌面投放到vncviewer上了,启动vncserver时可以通过添加-geometry和-depth来控制vncviewer看到的窗口大小和色深,这两个参数其实是Xvnc的参数,可以通过Xvnc --help来看到更多的参数。

再补充一点,如果X完全挂掉了,需要手动启动X,那么用sudo start gdm

你可能感兴趣的:(玩转X)