SoftLayerにVNCで接続する (Connecting to SoftLayer using VNC)

# はじめに _Introduction_

SoftLayerのLinux Guest OSのデスクトップ画面のグラフィックスを高速に転送して、クライアントPCで操作するのに最適なVNCをセットアップしてみたいと思います。
Linuxのデスクトップ画面をPCから操作するには、PC版のX-Windowサーバを使用する方法もあります。例えば、XmingなどのフリーソフトウェアをPCにセットアップすれば、デスクトップ画面を表示することが可能です。しかし、この方法はX-Windowの描画コマンドをすべて伝送するため、動画などのグラフィックスを表示するには適していません。
VNCは画面の変化点だけを伝送するため、帯域の細いWAN経由でも早い描画を可能にしています。
VNCにはいろいろな派生がありますが、ここではVirtualGLプロジェクトでも推奨している高速なTurboVNCを使用します。
_I would like to transfer the graphics of the desktop screen of SoftLayer Linux Guest OS at high speed and set up the best VNC to operate on the client PC.
There is also a way to use the PC version of the X-Window server to operate the Linux desktop screen from the PC. For example, by setting up free software such as Xming on the PC, it is possible to display the desktop screen. However, since this method transmits all X - Window drawing commands, it is not suitable for displaying graphics such as moving images.
Since VNC transmits only the change point of the screen, it enables fast drawing even through a narrowband WAN.
There are various derivations in VNC, but here we use the high speed Turbo VNC recommended in the VirtualGL project._

# RedHat 6.3にTurboVNCサーバをセットアップする _Set up TurboVNC server on RedHat 6.3_

## TurboVNCのダウンロード _Download TurboVNC_

TurboVNCのインストールイメージは以下のサイトからダウンロードできます。
_The installation image of TurboVNC can be downloaded from the following site._

`https://sourceforge.net/projects/turbovnc/files/`


```
# wget https://jaist.dl.sourceforge.net/project/turbovnc/2.1.1/turbovnc-2.1.1.x86_64.rpm
```

## TurboVNCのインストール _Install TourboVNC_

次のコマンドを実行してTurboVNCをインストールします。
_Execute the following command to install TourboVNC._

```
# rpm -U turbovnc-2.1.1.x86_64.rpm
```


## VNC設定ファイルの編集 _Edit VNC setting file_

エディタで下記のファイルを編集し、VNCで接続するユーザとその属性をセットアップします。
_Edit the following VNC setting file and set user and attributions to use VNC._

```
# vi /etc/sysconfig/tvncservers
```

下記の内容を入力して保存します。
"vncuser"は一般権限のアカウントであればなんでも結構です。VNC接続の際に使用します。
下記の意味は、ディスプレイ番号１はroot、ディスプレイ番号２はvncuserで接続することを意味しています。画面のサイズも指定しています。
_Enter the following contents and save.
"vncuser" can be used as long as it is an account with general authority. It is used for VNC connection.
For the meaning below, it means that display number 1 is root and display number 2 is connected with vncuser. The screen size is also specified._

```
VNCSERVERS="1:root 2:vncuser"
VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 1024x768"
```

## VNCパスワードの設定 _Set VNC password_

VNCで接続するユーザ毎にVNCパスワードを設定します。
まずrootユーザのVNCパスワードを設定します。
_Set the VNC password for each user connected with VNC.
First, set the VNC password of the root user._

```
# /opt/TurboVNC/bin/vncpasswd
```

同じパスワードを2回入力します。
Viewオンリーかどうか聞かれるので「n」を入力します。
_Enter the same password twice.
Enter "n" as it will ask if it is View only._


vncuserユーザにスイッチします。
_Switch to vncuser user._

```
# su - vncuser
```

vncuserユーザーにもVNCパスワードを設定します。
_Set VNC password to vncuser user._

```
$ /opt/TurboVNC/bin/vncpasswd
```

VNCサーバを起動します。
_Start VNC server._

```
# /etc/init.d/tvncserver start
```

失敗する場合は、`/var/log/messages`を参照してください。
_If it fails, see `/var/log/messages`._

# VNCサーバの稼働状況確認 _Check the operation status of the VNC server_

rootユーザで確認します。
_Check with root user._

```
# /opt/TurboVNC/bin/vncserver -list

TurboVNC server sessions:

X DISPLAY #     PROCESS ID
:1              4511
```

次にvncuserユーザでも確認します。
_Next, check with the vncuser user._

```
# su - caepoc
$ /opt/TurboVNC/bin/vncserver -list

TurboVNC server sessions:

X DISPLAY #     PROCESS ID
:2              4556
```


# Windows 10にTurboVNC Viewerをセットアップする _Set up TurboVNC Viewer on Windows 10_

## Windows版TurboVNCのダウンロード _Download TourboVNC for Windows_

以下のサイトからダウンロードします。
_Download from the following site._
https://sourceforge.net/projects/turbovnc/files/

今回用いたのは以下のバージョンです。（64ビット版）
_This time, we used the following version. (64 bit version)_
https://jaist.dl.sourceforge.net/project/turbovnc/2.1.1/TurboVNC64-2.1.1.exe


## インストール _Install_
TurboVNC64-2.1.1.exeを実行し、デフォルトパラメータでインストールします（特に変更するオプションはありません）。
_Run TurboVNC64-2.1.1.exe and install with default parameters (there is no option to change in particular)._

## VNC Viewerの起動 _Start VNC Viewer_

TurboVNC Viewerを起動します。
_Start TourboVNC Viewer._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/67a8c017-f716-4939-86aa-cdf56454f890.png)

VNC Server欄に接続先のホスト名またはIPアドレスと、ディスプレイ番号をコロン記号（：）で区切って入力します。
_In the VNC Server field, enter the host name or IP address of the connection destination and the display number separated by a colon (:)._

Connectボタンを押します。
_Press connect button._

下記のようなエラーメッセージが出る場合は、サーバー側でtcpdumpを取るなどして現象を解析します。
_If the following error message appears, analyze the phenomenon by taking tcpdump on the server side._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/ab217430-0193-0d67-13a9-f66548ddef09.png)

筆者が確認したところ、VNCサーバはVNC接続要求を受け付けると、クライアントのIPアドレスにICMPを投げるようです。
_As I confirmed, VNC server seems to throw ICMP to client IP address when accepting VNC connection request._

しかし、SoftLayerの仮想マシンからSSL VPN Clientに対してPingが通りません。VPNの設定の問題なのか、SoftLayerの途中経路の問題なのか確認する時間がありませんでしたので、代替策としてSSH Tunnelを使うことにしました。（Windows FirewallはすべてDisableにしてもうまくいきませんでした）
_However, Ping does not pass from the SoftLayer virtual machine to the SSL VPN Client. Since I did not have time to check whether it was a VPN configuration problem or a SoftLayer midway path problem, I decided to use SSH Tunnel as an alternative. (Disabling all Windows Firewall did not work)_

## SSH Tunnelのセットアップ _Setup SSH Tunnel_

ここではPuTTYを使ってSSH Tunnelを設定します。
_Here we will configure SSH Tunnel using PuTTY._

１．PuTTYを起動します。 _Start PuTTY_

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/0833135a-0ecd-67b9-5abb-39b78c18f301.png)

２．メニューからConnection→Dataを開きます。_Open Connection → Data from the menu._
Auto-login欄にvncuserと入力します。
_Enter vncuser in the Auto-login field._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/670edb39-a829-cede-70eb-baab5cf7a1e1.png)

３．メニューからConnection→SSH→Tunnelsを開きます。 _Open Connection → SSH → Tunnels menu._
Source Portに`1234`を入力します。この番号はクライアント側のポート番号なので未使用であれば何番でも構いません。
DestinationにVNCサーバのIPアドレスとポート番号をコロン記号（：）でつないで指定します。
_Enter `1234` in Source Port. This number is a port number on the client side so you can use whatever number it is unused.
Specify the Destination by connecting the VNC server's IP address and port number with a colon (:)._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/6c8e3c28-098b-7f73-ceaa-a50ad292b6c6.png)

４．Addボタンを押します。_Press Add button_

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/4274b8a6-1934-d719-4c1c-5eab95da54fd.png)

５．メニューからSessionを開き、設定を保存します。 _Open Session menu and save settings_

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/52a56dac-7a26-e058-d1ae-6f663e751f9d.png)

６．OpenをクリックしてSSH Tunnelを張ります。 _Crick Open and establish SSH Tunnel_

## VNC Viewerの起動 _Start VNC Viewer_

VNC Server欄には「localhost:1234」と入力し、Connectボタンを押します。
_In the VNC Server field, enter "localhost: 1234" and press the Connect button._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/d9bf2f0b-b3e3-74f6-7beb-e2b39f5e5804.png)

デスクトップ画面の表示に成功しました。
_The desktop screen was successfully displayed._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/504ff355-504d-49f1-2da0-5045e22411a1.png)

#トラブルシューティング _Trouble shooting_

## 入力できない _Can't enter anything_

デスクトップ画面は表示されるものの、一切入力もマウス操作もできない場合、VNC ViewerがView Onlyモードで稼働している可能性があります。
VNC ViewerのOptionボタンをおしてConnectionタブのView Onlyにチェックが付いていたらチェックを外してください。
_Although the desktop screen is displayed but the input and the mouse operation can not be performed at all, there is a possibility that the VNC Viewer is running in View Only mode.
If the Option button of the VNC Viewer is on and the View Only box on the Connection tab is checked, uncheck it._

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/a22986e0-45cf-dda5-86b3-9fece600feba.png)

## 画面が真っ黒 _Black screen_

デスクトップ画面が真っ黒のまま何も表示されない場合は、VNCサーバのログを確認してください。
_If the desktop screen is black and nothing is displayed, VNC
Please check the server log._

```
$ cat ~/.vnc/<hostname>:<display number>.log
```

.Xauthorityが書き込み不可でエラーになっているケースがありました。そのような場合は.Xauthorityを削除して、VNCサービスを再起動します。
_There were cases where .Xauthority was writable and an error occurred. In that case delete .Xauthority and restart the VNC service._

## VNCサーバの再起動方法 _How to reboot VNC server_

以下のコマンドでVNCサーバを再起動できます。
_You can restart the VNC server with the following command._

```
# /etc/init.d/tvncserver restart
```

なお、VNCサーバを再起動する際は、SSH Tunnel用のセッションをクローズしてください。
_When restarting the VNC server, close the session for SSH tunnel._