2011年4月20日 星期三

VNC & GDM

so, you have no graphics card, but you still want GUI management / X Windows......

Perhaps you do have a graphics card but want the convenience of using VNC to reach your Fedora machine?

There are some great turotials on getting the basics of VNC set up, but it always logs you right into the machine as a specific user...I want to choose my user....VNC + GDM is the answer



VNC + GDM will allow you to fir a vnc viewr at you linux box and have the GDM appear. This information contained below is a collection of personal knowledge and information collected from other postings on some other boards (note: go back and reference some of the contributors).

This mini-tutorial will not cover off security...so if you are doing this..make sure it is on your own network, behind a firewall etc. etc. etc....I hope to come back and add the security pieces in later...just don't have too much time today.

On with the show......

How it will work
===========
GDM will be running in the background (with no X-Server in this config). When we start a VNC session, VNC will contact the GDM to display the "Greeter"...then we log in as we normally do with GDM locally.

Configure GDM
==========
Sorry to you KDM/XDM folks out there...I will add in KDM ata a later date...it isn't too much different.

GDM presents the graphical greeter. To allow VNC to contact the GDM we must turn on XDMCP (Security concious peeps should set their firewall to only allow LOCAL connections for XDMCP - i.e. from the localhost - because VNC is running on the same linux device) - there is another option here to change the XServer that GDM can run to be VNC but I have not explored this option...perhaps later, but for now we'll do it with XDMCP:
1. Turn on XDMCP

edit /etc/X11/gdm/gdm.conf
[daemon]
RemoteGreeter=/usr/libexec/gdmgreeter

[security]
AllowRemoteRoot=true

[xdmcp]
Enable=1

[greeter]
Browser=true

2. (optional) Turn off XWindows (VNC runs it's own XWindows)

edit /etc/X11/gdm/gdm.conf
find the [servers] section
Change
0=Standard
to
#0=Standard
如果不關掉的話,在通過命令行啟動VNC服務的時候會衝突。
通過xinetd啟動不影響。

Configure VNC
==========
We will have VNC run from xinetd. We will create 2 "services". One for 800x600 and the other for 1024x768...if you want others, you can extrapolate yourself....800x600 will be available via :0 and 1024x768 as :1 (don't worry yet if you do not understand what I mean by :0 and :1)

1. Create /etc/services

edit /etc/services
add the following 2 lines:
vnc800 5900/tcp # VNC & GDM
vnc1024 5901/tcp # VNC & GDM


2. create xinetd services

create etc/xinetd.d/vnc800
service vnc800
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -geometry 800x600 -depth 24 -once -fp unix/:7100 -securitytypes=none
}

in ubuntu
service vnc1024
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = nobody
        server = /usr/bin/Xvnc
        server_args = -inetd -query localhost -geometry 1600x900 -depth 16 -once -fp /usr/share/fonts/X11/misc
}


3. -securitytypes=none means VNC will not ask you to authenticate...we want GDM to do that part...
如果是tightVNC的話,用-gc選項
-broadcast 會查找周圍的XDMCP服務器;-query localhost 只用本機的XDCMP服務器。


4. create xinetd services

create etc/xinetd.d/vnc1024
service vnc1024
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -geometry 1024x768 -depth 24 -once -fp unix/:7100 -securitytypes=none
}


TEST IT
=====

1. stop any X Windows
init 3

2. Log into console (text mode)
3. Turn off "vncserver"...we don't want VNC to run except for xinetd
chkconfig --level 2345 vncserver off
4. start GDM
init 5
5. start vncviewer
I tested my connection from Win XP...
for 800x600 -> vncviewer localhost:0
for 1024x768 -> vncviewer localhost:1

上面前4步主要是用來啟動XDCMP服務器。
如果是修改xinetd,則通過/etc/rc.d/init.d/xinetd restart來生效

SUMMARY
=======
You should now be able to run a headless (no kbd/mouse/video) linux box with a GUI and GDM greeter....

I know this mini-tutorial is a little thin at the moment, but I only had a few mins to type it up..I will clean it up I promise...if anyone likes it...I could try and write a mini-howto.....anyway...good luck..

注意:
如果這樣做沒有效果的話,
1)通過命令行查看VNC是否有效
Xvnc -query localhost -geometry 1024x768 -depth 16 -once -fp unix/:7100 -SecurityTypes=None
這時候,再用vncviewer來連接。
2)查看xinetd是否生效。
修改文件/etc/sysconfig/xinetd

EXTRAOPTIONS=""
改為
EXTRAOPTIONS="-filelog /var/adm/xinetd.log"

建立文件夾"/var/adm".
重啟xinetd服務,並查看/var/adm/xinetd.log輸出,確定原因。




1. 設定 XDMCP
vi /etc/gdm/custom.conf

[daemon]
RemoteGreeter=/usr/libexec/gdmgreeter

[security]

[xdmcp]
Enable=1

# DisallowTCP=true
[gui]

[greeter]
Browser=true

[chooser]

[debug]

[servers]

2. vi /etc/services

add
vnc1024 5901/tcp # VNC & GDM

3. 安裝 xinetd
yum install xinetd

4. add /etc/xinetd.d/vnc1024
service vnc1024
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -geometry 1600x900 -depth 24 -once -fp unix/:7100 -securitytypes=none
}

5. 啟動 xinetd
chkconfig xinetd on
service xinetd restart

6. 重新啟動系統 or 重新啟動 X window
reboot

or

init 3
init 5

沒有留言: