查看系统内置的xsession
$ ls /usr/share/xsessions/
gnome-classic.desktop gnome-fallback.desktop ubuntu-2d.desktop xsession.desktop
gnome.desktop gnome-shell.desktop ubuntu.desktop xterm.desktop
修改默认登陆的Xsession
$ sudo vim /etc/lightdm/lightdm.conf
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu #修改为如上的xsession即可
……
注意,Ubuntu 14.04的配置文件位于/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
切换X管理程序
以下命令需要远程操作,因为停止X管理程序会导致黑屏
$ sudo apt-get install gdm
$ sudo dpkg-reconfigure gdm #切换显示管理器(将lightdm换为gdm)
$ sudo /etc/init.d/lightdm stop #注意此时会黑屏
$ ps -ef | grep Xorg #找到Xorg的进程,并kill之
$ sudo /etc/init.d/gdm start #然后就会发现桌面恢复了
启用XDMCP登陆
根据Ubuntu的官方WIKI介绍,Ubuntu12.04以后的版本,默认使用lightdm作为X Server程序
$ sudo cat /etc/lightdm/lightdm.conf #确保有如下两行
……
[XDMCPServer]
enabled=true
……
$ sudo restart lightdm #重启服务就可以使用XDMCP了
对于Ubuntu 10.04以前的版本,由于默认使用GDM作为X管理程序,需要做如下设置
$ sudo vim /etc/gdm/custom.conf #手动建立此文件,输入如下内容
[daemon]
RemoteGreeter=/usr/lib/gdm/gdmlogin
[xdmcp]
Enable=true
DisplaysPerHost=1
Port=177
$ sudo service gdm restart #重启服务就可以使用XDMCP了
更多GDM的配置参数可以参考GNOME官方的这篇文章。
XDMCP初探
$ sudo netstat -anup | grep :177 #监听UDP177端口
udp6 0 0 :::177 :::* 12472/gdm-binary
$ sudo netstat -anp | grep 6000 #连接建立以后使用TCP协议监听客户端的6000端口
tcp 0 0 192.168.137.129:42359 192.168.137.1:6000 ESTABLISHED 12655/pulseaudio
tcp 0 0 192.168.137.129:42337 192.168.137.1:6000 ESTABLISHED 13530/unity-2d-shel
tcp 0 0 192.168.137.129:42345 192.168.137.1:6000 ESTABLISHED 13539/bluetooth-app
tcp 0 0 192.168.137.129:42331 192.168.137.1:6000 ESTABLISHED 13452/gnome-session
tcp 0 0 192.168.137.129:42342 192.168.137.1:6000 ESTABLISHED 13542/bamfdaemon
tcp 0 0 192.168.137.129:42365 192.168.137.1:6000 ESTABLISHED 13770/telepathy-ind
tcp 0 0 192.168.137.129:42347 192.168.137.1:6000 ESTABLISHED 13540/nm-applet
tcp 0 0 192.168.137.129:42333 192.168.137.1:6000 ESTABLISHED 13511/gnome-setting
tcp 0 0 192.168.137.129:42330 192.168.137.1:6000 ESTABLISHED 13499/dbus-launch
tcp 0 0 192.168.137.129:42361 192.168.137.1:6000 ESTABLISHED 13714/gdu-notificat
tcp 0 0 192.168.137.129:42343 192.168.137.1:6000 ESTABLISHED 13537/polkit-gnome-
tcp 0 0 192.168.137.129:42368 192.168.137.1:6000 ESTABLISHED 13868/update-notifi
tcp 0 0 192.168.137.129:42348 192.168.137.1:6000 ESTABLISHED 13529/unity-2d-pane
XDMCP常见错误处理
当我们在Windows系统中使用Xmanager去连接一个Linux系统时,Windows是服务端,而Linux才是客户端,客户端(Linux)的UDP 177端口用于向服务端发起XDMCP连接,而服务端(Windows)上的TCP 6000-6100 端口则用于向远程客户端传递X。
由于这种特殊的性质,当XDMCP无法连接时,常见的处理方式为:
第一步,检查Linux上的UDP 177端口是否有程序在监听;
第二步,则是检查服务端(Windows)方面的日志,见下图:
打开日志后,会看到本地的错误日志。目前已知的可能出现的错误有:
1,XDMCP fatal error: Session declined Maximum number of open sessions from your host reached
原因及解决办法:
这是由于Xmanager是经过router来连接host的,session超出了host允许的最大值,
修改/etc/gdm/custom.conf,在[xdmcp]下面添加一行DisplaysPerHost=5
2,Xdmcp: Timed out, state 8. Retransmissions: N
原因及解决办法:
可能是客户端本地的防火墙阻止了连接。当我们在Windows系统中使用Xmanager去连接一个Linux系统时,Windows是服务端,而Linux才是客户端,客户端(Linux)的UDP 177端口用于向服务端发起XDMCP连接,而服务端(Windows)上的TCP 6000-6100 端口则用于向远程客户端传递X。因此,需要检查以下内容:
(1),客户端IP和服务端IP可以双向PING通(如果客户端和服务端处于不同的子网,而又没有添加正确的路由表的情况下,极有可能可以单向PING通,但不能双向PING通)
(2),Windows的IP是否为本地连接的IP?(我就遇到一回,Xmanager的日志中显示Windows系统的IP并不是我本地连接的IP,而是VMware生成的虚拟网卡的IP,无语。)
(3),防火墙(网关)是否会阻止UDP协议的连接?是否会阻止6000-6100端口的连接?
后记:
============================
2015.03.09
系统用户较多,在登陆界面,用户列表显示不全,想了很多办法,最后决定禁用用户列表(要求输入用户名)来解决:
sudo gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type Boolean --set /apps/gdm/simple-greeter/disable_user_list True
2015.03.23
检查Ubuntu系统是否打开了3D加速:
glxinfo | grep rendering
/usr/lib/nux/unity_support_test -p