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を起動できるようにした。