新トップページへ | Tip

VNCを使う

LastUpdate : 08/05/24

 サーバにLinux(CentOS5.1 64bit)、クライアントにWindowの環境にて、設定を行った際のメモです。

インストール
インストールとか
使ってみる
SSHポートフォワーディングによる接続+gnomeを使うように指定
xinetdにvncserverを起動してもらうように設定する
起動後、vncサーバが自動的に起動するようにする

インストールとか

 CentOS5.1にて、通常、あえてvncserverの選択をキャンセルしなければ、インストールされている様子です。

もし無い場合は、yum install vnc-server とすればインストールされる。

SSHポートフォワーディングによる接続+gnomeを使うように指定

 ポートフォワーディングを利用して、Windowsクライアントマシンから、CentOSのVNCサーバにアクセスするには、Windows側ではポートフォワーディングを行ってくれるツールが必要です。
私は、普段、リモートホストにアクセスする際、TeraTermを使っています。で、最近のは、TTSSHが同胞(?)されたものが配布されているようです(VectorでDLしたら、普通にはいってた。)
 で、こいつの、機能でポートフォワーディングしてもらいます。

vncserverの起動・終了は、自動的に起動するように設定をしていない場合、コマンドラインから行います。
基本的なコマンドは以下のとおりです。

vncserver -geometry 1024x764 -depth 24
vncserverを起動し、待ち受け状態にします。geometryの後ろに、画面の解像度を指定します。depthは色深度を指定します(上記のオプションは例です)。
vncserver -kill :1
killの後ろの「 :1」だとか「 :2」だとかで、どのvncを終了させるか指定します(番号名はディスプレイナンバー。デフォルトでは5901なら1、5902なら2って感じ)

(1)ファイヤーウォールの設定

サーバーにて、ファイヤウォールを設定してある場合、SSH通信に使うポートをオープンにする必要があります。

(2)vncserverをクライアントの接続を待ち受けるようする。

サーバーにて、コンソールでvncserverと打ち込むと、初回起動時の場合、パスワードを聞かれます。これはクライアントが接続する際、認証に使用されますので、てきとーに適当に入力します。
そして、しばらくまつと、コンソールに制御が帰ってきます。
 これで、接続待ちの状態になっています。デフォルトでは、待ち受けポートは5901です(これで、接続サーバが2個になると2個目は5902と使い、3個目は5903・・・となっていくらしい)。
 gnomeを使うには(デフォルトではtwmが立ち上がる)自分のホームディレクトリ内の「 ./vnc/xstartup 」ファイルを編集します。
たぶん、最後の行に
twm &
になっています(だから、twmが立ち上がる)。これをgnomeにするには(無論gnomeがインストールされていなければだめです)
#twm &
exec gnome-session &
と、twmをコメントアウトして、gnomeが立ち上がるように変更します(不要ならば、コメントアウト箇所は削除してもOKかと)。
設定を変更したならば、vncserverを再起動します(たぶんvncserverを立ち上げなおさないとだめじゃないかと)。

(3)ポートフォワーディングの設定

●クライアント側の設定

 TeraTermでは、メニューの「設定」 → 「SSH転送」 のところから、設定を行います。
するとこんな画面がでてくるので・・・
「追加」ボタンを押下し、以下のよーに入力し、設定を追加します。ローカルのポートのポート番号は特に意味がありません。50000でもなんでも好きな数字を入力します(ただし、vncのクライアントにて、送り先のポート番号と同じにすること)。また、リモート側ホストは、5901とすること(VNCサーバの待ちうけポート番号をいれる)
そして、1枚目の「SSHポート転送」画面にて、「OK」ボタンを押下します。
この画面にて、「リモートサーバのポート」のほうで行う方法もあるらしーのですが、私はやったことないので、割愛させていただきます。
これで、ポートフォワーディングの設定は終了です。
これで、準備は完了です。Teratermは起動したままにしておいてください。

(4)接続してみる

クライアントから接続してみます。
私は、realVNCというソフトをいつも使っています。realVNCはサーバになる機能もあるらしいですが、クライアントとしてしか使ったこと無いです。

VNCViewerを起動し、Serverに「 localhost:1 」を指定し、パスワードを入力します(サーバにて、vncserverを起動した際に、入力したパスワードを入力)。

※Serverの入力エディットボックスの入力フォーマットについて
 基本的に ホストアドレス:1 (ホストのアドレス、コロン、1) と入力します(この場合、ポート番号は5901が使用される)。
ポート番号の指定を行いたい場合は ホストアドレス::5941 (ホストアドレス、コロンコロン、5951) という形式で入力を行えばOKらしいよ?。

すると、うまい具合に、デスクトップ画面が表示されるはずです。

xinetdにvncserverを起動してもらうように設定する

 xinetd経由で起動させるためまずは設定ファイルを作成します。
/etc/xinetd.d/ の中に、vncserver_xga というファイルを作成します(ファイル名前は自由)

普通のデーモン(?)みたいな感じで動くvncserverは5901などを使うため、かぶらないように5951などを使うこととします。

(1)/etc/servicesファイルの書き換え

プログラムが使用するポート番号を設定します。/etc/servicesファイルに、以下の文字を追加しました(場所はどこでもいいです。一番最後など)。

vncserver_xga 5951/tcp # VNC server (add 08/05/24)

/etc/servicesファイルを保存します。

(2)xinetdにプログラムの登録

/etc/xinetd.d/vncserver_xga
service vncserver_xga
{
        disable = no
        socket_type = stream
        protocol = tcp
        #port = 5951
        wait = no
        user = nobody
        server = /usr/bin/Xvnc
        server_args = -inetd -query localhost -once -geometry 1024x768 -depth 24 --PasswordFile=/etc/vnc_passwd
}

などとします。

(3)パスワードファイルの作成

(2)にて、PasswordFileとして /etc/vnc_passwd ファイルにするよー、と指定したため、vnc_passwdファイルを作成します(ファイル名前は任意)。

[root@wasce_server ~]# vncpasswd /etc/vnc_passwd
Password:
Verify:

vncpasswdというコマンドに、保存先ファイル名を指定し、パスワードを入力します。
これで、/etc/vnc_passwdファイルが作成されます。
このパーミッションが700になっている点に注意してください。xinetdで起動するプログラムのユーザ権限で、パスワードファイルが読めないといけないため、パーミッションをてきとーに変更します。

chmod 755 /etc/vnc_passwd

<セキュリティーに問題がある場合、vncの実行ユーザ・パスワードファイルのパーミッションなど、うまい具合に調整してください。>

(4)xinetdの再起動

service xinetd restart

などとして、xinetdを再起動します。

(5)gdmの設定ファイルの変更&起動

 gdmの設定ファイルを修正します。CentOS5.1では、/etc/gdm/custom.confです。

/etc/gdm/custom.conf ファイルの中に、

[xdmcp]

となっているところがあるとおもいます。この部分を以下のように加筆します。

[xdmcp]
Enable=true

Enable=trueと1行追加するだけです。

 gdmが立ち上がっていない様子ならば(ps aux |grep gdmなどとして何も無かったら)、コマンドラインから、普通にgdmと打ち込むだけで起動する様子です。

[root@wasce_server ~]# gdm
[root@wasce_server ~]# 

(これが立ち上がってないと、真っ黒な画面しか表示されません。)

ちなみに、gdmのpidが以下のコマンドで表示できます。

[root@wasce_server ~]# cat /var/run/gdm.pid

複数gdmが立ち上がっていたりしますが、このpidでkillすれば全部消えます。

(5)クライアントから接続する

 これで、普通に接続すれば、ログイン画面が表示されるはずです。
vncでパスワードを入力し、ログイン画面で、IDとパスワードを入力と、やや面倒ですが^^;

ちなみに、rootでのログインが禁止されていますので、通常ユーザのみログイン可能です。
rootでログイン可能にする方法は・・・あるのかどーか知りませんが、機会があったら^^;

起動後、vncサーバが自動的に起動するようにする

 vncserverが自動的に立ち上がるように設定できます。xinetdで起動させるか、こちらの方法をとるか、どちらかでよいと思います。
chkconfig --level 3 vncserver on
以下の設定ファイル編集後、自動起動するように設定しておきます。

まず、設定ファイルの変更を行います。
変更対処のファイルは「 /etc/sysconfig/vncservers 」です。

/etc/sysconfig/vncservers
# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html.

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

デフォルトではこんな感じになっていると思います。
これから記述する、設定は、下2行のところのテンプレートにのっとって、以下の2行を下に追加します。

VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1024x764 -depth 24 -nolisten tcp -nohttpd"

を、最後の行に、追加します(内容は、設定や、接続するユーザによって違います。上記はただの例です)。