LinuxServer VNCについて その2


LinuxServer VNCについて その2


今回はVNCを xinetd 経由で起動できるようにしてみる

xinetdについて

セッション要求があると /etc/services から対応するサービスを起動するプログラム
セッションが終了するとサービスも停止するので
無駄なくリソースを使用できる。

また他にもアクセス制御などの機能を持っている。

以前は inetd + TCP Wrapper で行っていたが、
Xinetd は両方の機能を併せ持ちかつさらに強化されている。
(TCP Wrapperは /etc/hosts.allow や /etc/hosts.deny ファイルによってTCPセッションのアクセス制御をするプログラム)

vncserverを xinetd 経由で起動させる

参考サイト

http://hp.vector.co.jp/authors/VA022911/tec/centos/vnc2.htm

xinetdのインストール

xinetdのインストールは下記でできる。

[root@centos01 ~]# yum install xinetd

VNCが使うポートを以下のファイルに登録する。

サービス名は /etc/xinetd.d/xvncserverファイルに合わせる。
下記ではポートを2つ用意する事でVNCクライアントから接続した際に解像度を2種類用意している

[root@centos01 ~]# vi /etc/services
xvnc1            5901/tcp                        # VNC Server 2013/03/11 add
xvnc1            5901/udp                        # VNC Server 2013/03/11 add
xvnc2            5902/tcp                        # VNC Server 2013/03/11 add
xvnc2            5902/udp                        # VNC Server 2013/03/11 add

xinetdの設定

以下のようにファイルを編集する必要がある。

[root@centos01 ~]# vi /etc/xinetd.d/xvncserver
service xvnc1
{
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/bin/Xvnc
        server_args     = -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes none
        log_on_failure  += USERID
        disable         = no
}

service xvnc2
{
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/bin/Xvnc
        server_args     = -inetd -query localhost -once -geometry 1200x800 -depth 16 -SecurityTypes none
        log_on_failure  += USERID
        disable         = no
}


※上記で -SecurityTypes none にしているので VNCクライアントから接続する際にパスワードは聞かれない。

xinetdを再起動

以下のコマンドで xinetd を再起動する。
[root@centos01 ~]# /etc/init.d/xinetd restart


ファイアーウォールでvncserverのポートが空いていることを確認する。
空いていなかったら以下のコマンドでポートを開ける
[root@centos01 ~]# #vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p tcp -m tcp –dport 5901 -j ACCEPT

※一番下のREJECT行の上に、5901と5902番ポートを許可します。
※この /etc/sysconfig/iptables ファイルを読み込んで iptables は起動する際に設定を適用する。
このファイルが無いという事は起動しても何もFW設定がされない(起動していないのと一緒)ということ。


またデフォルトのランレベルを 5 にしておくこと

XDMCPの設定

この時点でVNCクライアントから接続するとアクセスはできるが真っ黒の画面のまま何も表示されない。
GDMではデフォルトでXDMCPプロトコルが流れないのが原因のようだ

そのため以下のファイルを編集する

[root@centos01 ~]# vi /etc/gdm/custom.conf
[daemon]

[security]
DisallowTCP=false
AllowRemoteRoot=true

[xdmcp]
Enable=true

[gui]

[greeter]
IncludeAll=false

[chooser]

[debug]


※ここで AllowRemoteRoot=true という記述を入れないと rootユーザでログインできないので注意する。

上記の設定を反映させるためにgdmの再起動(終了させると勝手に立ち上がってくる)

[root@centos01 ~]# kill -HUP `cat /var/run/gdm.pid`

プロセスを調べてみるとサービスが起動しているのがわかる。
この起動ユーザは /etc/xinetd.d/xvncserver ファイルで指定した nobody になっていることがわかる

[root@centos01 ~]# ps aux | grep vnc
nobody    2372  0.0  1.4  14548  7516 ?        Ss   21:56   0:00 Xvnc -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes none
root      2620  0.0  0.1   5104   792 pts/1    S+   22:14   0:00 grep vnc

VNCクライアントのセッションを終了するとプロセスが無くなっている(サービスが停止している)

[root@centos01 ~]# ps aux | grep vnc
root      2858  0.0  0.1   5100   784 pts/1    S+   22:17   0:00 grep vnc

ログイン画面が気に入らなければ以下のファイルに設定を追記すれば通常のGDMの画面になる。

[root@centos01 ~]# vi /etc/gdm/custom.conf
[daemon]
GtkModulesList=
AddGtkModules=false
RemoteGreeter=/usr/libexec/gdmgreeter


※上記のファイルの編集をした場合
[root@centos01 ~]# kill -HUP `cat /var/run/gdm.pid`
で再起動する必要がある


今回は xinetd 経由でVNCを起動できるようにした。

  • このエントリーをはてなブックマークに追加

PAGE TOP