SUSE Linux で VNC 接続をする

XEN のように仮想化システムで Windows のような GUI インストールしか受け付けない場合、リモートでX操作を行うわけですが、なかなか良い方法がありません。直接コンソールを使うと X がハングアップしたりすることもあるわけで、出来ればリモートから操作したいところです。

Windows から、Linux の GUI を操作するには xming や NXfree などがあります。お気に入りは xming なのですが、時折不安定な挙動します。 NXfree も便利なのですが、サーバーリソースを使いまくるようなので、重くて使いづらい。

そこでVNC を使って接続してみました。 SUSE Linux (SLES11)で vncを使うには vncserver を起動します。ここでは端末番号1を指定します。ポートは 5901 で接続できます。
sles11 # vncserver :1

You will require a password to access your desktops.
※初めて起動するとパスワードを設定する必要があります。
Password:*********
Verify:********
Would you like to enter a view-only password (y/n)? n
※ここでは Viewer-only ではないので No

New 'X' desktop is sles11:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/dns3:1.log
※この間に VNC Viewer を使ってVNCアクセスを行います。
:
:
:
※終了するには -kill オプションでポートを閉じます。
sles11 # vncserver -kill :1
Killing Xvnc process ID 8194f
sles11 #


-:1が使えない場合-

vncserver :1 で 5901 ポートが開けない場合があります。これは 仮想環境で :1 デバイスが仮想マシンによって使われているもののようです。
ps aux | grep root | grep vnc* コマンドで調べてみます。

mydom0:/etc/init.d # ps aux | grep root | grep vnc*
root 1369 5.9 0.1 104720 600 ? SLl Dec05 266:58 /usr/lib/xen/bin/qemu-dm -d 6 -domain-name mywindowsxp -videoram 4 -k ja -vnc 127.0.0.1:0 -vncunused -vcpus 1 -vcpu_avail 0x1 -boot c -soundhw sb16 -localtime -serial pty -acpi -usb -usbdevice tablet -watchdog-action reset -net none -M xenfv
root 4344 0.0 0.0 85032 376 ? Sl Nov30 7:12 /usr/lib/xen/bin/qemu-dm -d 2 -serial pty -domain-name mydomu-linux1 -videoram 4 -k ja -vnc 127.0.0.1:0 -vncunused -M xenpv
root 6320 0.0 0.0 85028 400 ? Sl Nov30 6:37 /usr/lib/xen/bin/qemu-dm -d 3 -serial pty -domain-name mydomu-linux2 -videoram 4 -k ja -vnc 127.0.0.1:0 -vncunused -M xenpv
root 6517 7.0 0.1 97864 592 ? SLl Nov30 830:42 /usr/lib/xen/bin/qemu-dm -d 4 -domain-name mywindows7 -videoram 4 -k ja -vnc 127.0.0.1:0 -vncunused -vcpus 2 -vcpu_avail 0x3 -boot c -soundhw sb16 -localtime -serial pty -acpi -usb -usbdevice tablet -watchdog-action reset -net nic,vlan=1,macaddr=00:16:3e:5b:17:2f,model=rtl8139,bridge=br0 -net tap,vlan=1,ifname=tap4.0,bridge=br0 -M xenfv
root 20332 5.2 0.6 106036 3200 ? SLl 14:35 0:30 /usr/lib/xen/bin/qemu-dm -d 8 -domain-name mydomu-linux3 -videoram 4 -k ja -vnc 127.0.0.1:0 -vncunused -vcpus 1 -vcpu_avail 0x1 -boot c -serial pty -acpi -usb -usbdevice mouse -watchdog-action reset -net none -M xenfv
root 25230 0.0 0.1 5704 800 pts/0 S+ 14:45 0:00 grep vnc*


sles11:~/.vnc # vncserver :1
A VNC server is already running as :1
sles11:~/.vnc # vncserver -kill :1

Can't find file /root/.vnc/sles11:1.pid
You'll have to kill the Xvnc process manually
A VNC server is already running as :1
sles11:~/.vnc # vncserver -kill :1
Can't find file /root/.vnc/sles11:1.pid
You'll have to kill the Xvnc process manually 拒否された
仮想マシンで使われていない端末番号を利用します。
sles11:~/.vnc # vncserver :3 代わりに3を使用
A VNC server is already running as :3
sles11:~/.vnc # vncserver -kill :3 <--- 使えるようだ。
Killing Xvnc process ID 12106
sles11:~/.vnc # vncserver :3
New 'X' desktop is sles11:3
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/sles11:3.log
sles11:~/.vnc #


ポート 590x 番代は VNC で使うポートです。ターミナルNo.1 を使う場合は Port:5901 No.3 を使う場合は 5903 になります。
VNCで使えるポートを確認します
ポートスキャンツールで、VNCが利用できるポートを確認します。

SUSE Linux で VNC 接続をする_a0056607_14341928.jpg


ここでは 5903 ポートが利用できるようになっています。

-RealVNC-

RealVNCで実際に接続してみます。

vncserver を起動している 「IPアドレス:ポート番号」を指定して、 vncserver を実行した時のパスワードをセットします。
SUSE Linux で VNC 接続をする_a0056607_14383349.jpg


-UltraVNC-

UltraVNCビューワ を使って接続してみます。

SUSE Linux で VNC 接続をする_a0056607_14413671.jpg


RealVNC では画面のキャプチャが取れませんでした。 UltraVNCビューワでキャプチャを取るとこのような感じになります。
SUSE Linux で VNC 接続をする_a0056607_14455524.jpg


-セキュリティ-

SSH通信は使われないので、大きなネットワークやインターネット環境ではお勧めしません。
こちらの記事に Tera Term の SSH 通信を使って、VNCのSSHポートフォワードを行う方法が詳しく説明されています。とても詳しいのでご紹介します。



簡単に言うと Teraterm の localhost:1 (5901)ポートを SSH の 22 番ポートに返送して、接続先の VNC ポート(5903)に接続するわけですね。
SUSE Linux で VNC 接続をする_a0056607_3255880.jpg



ターミナルを開くと VNC パスワードだけで root のセッションが開くので、これもセキュリティ上あまり好ましいものではないので、vncserver は必要な時だけ起動して、作業が終わったら vncserver -kill :port-no を実行してください。

vnc パスワードは

/root/.vnc/passwd にあります。このファイルを削除するか

# vncpasswd

で定期的にパスワード更新を行ってください。

-まとめ-

SUSE(SLES11) ではデフォルトが gnome デスクトップなので gnome デスクトップを使いたい場合は、 home/.vnc/xstartup シェルの twm の記述をgnome-sessionに書き換えるだけです。

vncserver -kill をして vncserver を起動しなおします。

sles11:~/.vnc # cat xstartup
#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & gnome-session &
sles11:~/.vnc #

SUSE Linux で VNC 接続をする_a0056607_12141517.jpg



個人的には xming + Putty があれば手軽で十分だと思うのですが不安定な場合は VNC 接続の方法も知っておくべきテクニックです。画面のハードコピーをとるのであれば、 UltraVNC の方が便利でした。


-keyword-

SUSE Linux SLES 11 Windows remote リモート VNC 接続

islandcenter.jp

by islandcenter | 2012-10-22 14:25 | SUSE | Comments(0)