manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ

18.VNCサーバー

2007年8月22日 2010年6月27日更新
VNC(Virtual Network Computing)を導入するとサーバーマシンをGUIで外部の別のコンピュータから操作できます。


(2010年6月27日 追加、修正)
設定を改良しましたので、内容を新しい設定方法に変更してあります。(但しinetdを使わない方法で。)
でもやるならinetdを使う方をお薦めします。
新しいサーバーでやったinetdを使ったベストと思われる設定はこちら。
→ inetdによるVNCサーバーの設定。

インストール
Synapticでvnc-serverをインストールします。
vnc-server-4.1.2-0vl3です。
あとxtermとtwmがインストールされていなかったらインストールしておきます。
(vnc-serverが使うからです。)

Windowsマシンの方にはすでにRealVNCが入っています。

設定
VNC通信を許可します。
LANだけから接続するならすでにすべてのポートを受け付ける設定をしたので必要ありません。
外部から繋ぎたければ、ポート番号は5900+DisplayNumber(x)となるので、/etc/services に vnc  590x/tcp を追加し、/etc/sysconfig/iptablesとip6tablesにtcp 590xを許可します。

/etc/sysconfig/vncserversにDisplayNumber:userと画面設定を書込みます。
ユーザはすでにサーバーに登録されてホームディレクトリがなくてはなりませんが、同じユーザでサーバー本体とVNC両方でデスクトップを使うとへんな干渉をするのでVNC専用のユーザを作ったほうがよさそうです。
VNCSERVERS="2:vncuser"
VNCSERVERARGS[2]="-geometry 1152x864(または1024x768など)"
このユーザでshにログインして
$vncpasswd
パスワードを2回打ち込み、登録完了です。
いったんvncserverを起動しますと登録したユーザのホームディレクトリに~/.vnc/xstartupというファイルができますのでこれを編集します。概ね日本語(言語)に関する部分、ディスプレーやデスクトップに関する部分の設定が必要で、自分の環境にあわせます。

~/.vnc/xstartup
#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

# 環境変数の設定、言語コードはEUC-JP、IMはSCIMの場合
# env で調べて日本語の取扱いにからんでいそうなの。
# 日本語がちゃんと扱えれば無理に設定する必要はないが(たぶん必要)。

export LANG="ja_JP.eucJP"
export XMODIFIERS="@im=SCIM"
export GTK_IM_MODULE="scim"
export QT_TM_MODULE="xim"

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
# 2項目無効化
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
# 日本語入力フロントエンド起動
scim -d &
# KDE起動、gnomeを起動するなら exec gnome-session
exec startkde

起動設定
サーバー起動時にvncserverも起動するよう設定しておきます。
#chkconfig vncserver on

ためし
vncserverを起動してみます。
#service vncserver start

WindowsのVNCビューワを起動し、IPアドレス:DisplayNumberを打ち込みます。
パスワードを聞いてくるので入力します。

VNCビューワの画面が開き、デスクトップが表示されます。
ただ、特殊なキーの押された情報が送信されないようで、[半角/全角]キーで日本語/英語入力の切替ができません。[Ctrl]+[Space]を使用します。

inetdを使わないこの方法ではVNCビューアからログアウトしてしまうとログイン画面には戻れませんので再びログインできません。その場合はいちいちサーバーを操作してvncserverを再起動しなくてはなりません。inetdではこのようなことはありません。
inetdを使うお薦めの方法はこちら → inetdによるVNCサーバーの設定。

...というわけで、ずいぶん長くかかってしまいましたがサーバーの構築はほぼこれで完了。