VNC 的缺点在于,RFB 身份验证基于密码,而不需要用户名。因此,每个用户必须启动一个独立的 VNC 服务器会话,并通过指定正确的端口号连接到 VNC 实例。详见
《使用 VNC 实现多用户登录 》。
通过XDMCP服务器来认证,可以使用系统帐号密码来登陆vnc,因此可以使用ldap集中管理,并且可以使用同一端口建立多个用户连接,各自使用不同的桌面。
各个桌面管理器都有自己的XDMCP,KDE使用kdm,GNOME使用gdm。顺便说一下,/etc/sysconfig/desktop中切换的不是桌面管理器,而是认证界面,即gdm还是kdm。而具体是哪个桌面可以在登陆界面再次选择,而且认证通过进入到桌面之后,gdm或kdm依然在运行,监听UDP端口177。desktop文件需要自己手工创建,内容如下
-
DESKTOP="GNOME"
-
DISPLAYMANAGER="GNOME"
需要先启动
XDMCP,因此inittab中需要设置启动级别为5。
gdm设置XDMCP在/etc/gdm/custom.conf,
注意,不能写成Enable=true,也不能写成enable。
kdm设置文件在/etc/kde/kdm/kdmrc
设置好之后,从启X,查看UDP端口177是否在监听。
下面设置vnc,要想使用XDMCP,需要xinetd中转,创建/etc/xinetd.d/vnc
-
service vnc
-
{
-
disable = no
-
socket_type = stream
-
protocol = tcp
-
instances = 1
-
wait = no
-
user = nobody
-
server = /usr/bin/Xvnc
-
server_args = -desktop myvnc -inetd -query localhost -once -SecurityTypes None -IdleTimeout 60
-
type = UNLISTED
-
port = 5900
-
}
其中,query后面的localhost是指XDMCP服务器的地址,SecurityTypes None是指vnc不需要认证,否则的话,vnc需要认证一次,XDMCP再认证一次。
当wait值为no,xinetd则认为此服务是多线程,表现就是:每当有新客户端连接过来就启动一个Xvnc进程,一个客户端对应一个Xvnc进程,因此vnc中关于shared的设置在xinetd模式下没有实际意义。
当wait值为yes,
xinetd则认为此服务是单线程,一个Xvnc进程服务所有的客户端。表现就是:第一次连接需要认证,但断开再连接或者再建立新连接就不需要认证,即可以同时建立多个连接,而服务端只有一个Xvnc进程。如果使用-NeverShared参数,则同时只能服务一个客户端连接,而且后来的连接会直接踢掉前面的连接(很不合理)。
如果每个服务器只允许一个vnc客户端连接,则需要instances值为1,这样,对同一个端口,xinetd值启动一个Xvnc进程,同时
设置为nowait模式,第二个客户端连接时,由于无法启动第二个Xvnc而导致连接失败。
如果允许多个客户端连接,但每个端口只允许一个连接,则创建多个服务,如vnc1、vnc2,每个服务设置不同的端口。
vnc通过XDMCP认证,还有一个好处,就是可以查看当前是否有用户通过vnc登陆。正常使用vnc登陆,w命令不会显示。此种登陆在w命令中有特定显示,tty为空,运行命令是“pam: gdm-password”。而本地图形界面登陆的,tty是tty1,运行命令是Xorg。
阅读(2271) | 评论(0) | 转发(0) |