VNCを利用したデスクトップのリモート操作環境の構築

この記事では、VNCを利用したデスクトップのリモート操作環境を構築します。 あたかも接続先のPCの前に座って作業しているような感覚で操作できる環境を目指します。

なお、セキュリティの確保のためにSSHによるポート転送の機能を使います。 SSHの設定がまだであれば、前の記事を参照してSSHの導入を実施してください。

この記事で実施する作業の概要

この記事で実施する作業の概要は以下の通りです。

VNCサーバ / VNCビューアのインストール

まず最初にVNCサーバとVNCビューアをインストールします。 VNCは、

  1. VNC サーバ(他のPCからの接続を受け入れるための機能)
  2. VNC ビューア(他のPCへ接続するための機能)

に分かれますので、それぞれインストールを行います。

各PCにインストールするVNC規格のソフトウェアは以下の通りです。

PC VNCサーバ VNCビューア
Linux PC TightVNC Server gvncviewer
Windows PC UltraVNC

VNCサーバの設定

続いて、接続パスワードの設定やスタートアップスクリプトの修正、解像度の設定などの作業を行います。

接続パスワードの目的は、無許可のユーザ(VNCビューア)からの接続を防ぐためです。

解像度の設定は、接続元と接続先の解像度の違いを吸収するために設定します。 解像度が一番低いPC(1366x768のノートPCなど)に合わせることで、Full HD(1920x1080)のモニタが接続されたPCのデスクトップ画面でも、はみ出したり縮小表示させることなく表示させることができます。

ファイアウォールのポート開放

VNCは5900番ポート または 5901番ポートで通信を行います。 ファイアウォールの設定を変更し、5900番ポートと5901番ポートの通信を許可します。

VNC接続テスト(SSHポート転送はまだ利用しない)

VNC接続のテストを行います。 ただし、SSHによるポート転送の機能はまだ使いません

そのため、暗号化されていない状態の接続パスワードがネットワーク上を流れていきます、困ったことに。

SSHポート転送を利用したVNC接続テスト

SSHのポート転送を有効にした状態でVNC接続を行います。 通信内容が暗号化されるため安全性は高くなります。

SSHポート転送されていないVNC接続の禁止

SSHのポート転送を利用していないVNC接続を禁止します。 つまり、SSHポート転送の強制です

構築作業

では構築作業を始めましょう。 VNCで安全にリモートのデスクトップを操作できる環境を構築します。

VNCサーバ / VNCビューアのインストール

最初の作業はVNCサーバとVNCビューアのインストールです。 各PCにインストールするVNC規格のソフトウェアは以下になります。

PC VNCサーバ VNCビューア
Linux PC TightVNC Server gvncviewer
Windows PC UltraVNC

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

では、TightVNC Serverとgvncviewerをインストールしましょう。 端末を開き、キーボードから sudo apt install tightvncserver gvncviewer と入力してEnterキーを押してください。


sudo apt install tightvncserver gvncviewer

 
  
sudo コマンドであるためパスワードの入力を求められることがあります。 その場合には(あなたの)パスワードを入力してください。

以下のように続行するかどうかの確認が求められます。

taro@hawk:~$ sudo apt install tightvncserver gvncviewer
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libgtk-vnc-2.0-0 libgvnc-1.0-0 tightvncpasswd
提案パッケージ:
  tightvnc-java
以下のパッケージが新たにインストールされます:
  gvncviewer libgtk-vnc-2.0-0 libgvnc-1.0-0 tightvncpasswd tightvncserver
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 1 個。
814 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,397 kB のディスク容量が消費されます。
続行しますか? [Y/n]

続行しますので y と入力してEnterキーを押します。 以下のようにインストールが続行されます。

続行しますか? [Y/n] y

      .
      .
      .
   (省略)
      .
      .
      .

update-alternatives: /usr/bin/vncserver (vncserver) を提供するために自動モードで
 /usr/bin/tightvncserver を使います
update-alternatives: /usr/bin/Xvnc (Xvnc) を提供するために自動モードで /usr/bin/
Xtightvnc を使います
update-alternatives: /usr/bin/vncpasswd (vncpasswd) を提供するために自動モードで
 /usr/bin/tightvncpasswd を使います
doc-base (0.11.1) のトリガを処理しています ...
doc-base ファイルを 1 個追加 を処理中...
libc-bin (2.35-0ubuntu3.11) のトリガを処理しています ...
man-db (2.10.2-1) のトリガを処理しています ...
taro@hawk:~$

これで作業は完了です。

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerでも同様にTightVNC Serverとgvncviewerをインストールします。 作業手順はhawkと変わらないため、実行結果のみを掲載します。

taro@tiger:~
$ sudo apt install tightvncserver gvncviewer
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libqt5positioning5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5quickwidgets5
  libqt5webchannel5 libqt5webengine-data libqt5webenginecore5 libqt5webenginewidgets5 lsscsi
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libgtk-vnc-2.0-0 libgvnc-1.0-0 tightvncpasswd
提案パッケージ:
  tightvnc-java
以下のパッケージが新たにインストールされます:
  gvncviewer libgtk-vnc-2.0-0 libgvnc-1.0-0 tightvncpasswd tightvncserver
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 53 個。
989 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,573 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

      .
      .
      .
   (省略)
      .
      .
      .

update-alternatives: /usr/bin/vncpasswd (vncpasswd) を提供するために自動モードで /usr/bin/tightvncpa
sswd を使います
libgtk-vnc-2.0-0:amd64 (1.3.1-1) を設定しています ...
gvncviewer (1.3.1-1) を設定しています ...
tightvncserver (1:1.3.10-7) を設定しています ...
update-alternatives: /usr/bin/vncserver (vncserver) を提供するために自動モードで /usr/bin/tightvncse
rver を使います
update-alternatives: /usr/bin/Xvnc (Xvnc) を提供するために自動モードで /usr/bin/Xtightvnc を使います
libc-bin (2.36-9+deb12u13) のトリガを処理しています ...
man-db (2.11.2-2) のトリガを処理しています ...
taro@tiger:~
$

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。
  
SSH接続に利用するユーザでの作業です。 管理者ユーザでログインし直す必要はありません。 ただし、標準ユーザの場合は管理者ユーザのパスワードの入力が求められます。

UltraVNCは公式サイトからダウンロードするよりも窓の杜からのダウンロードがオススメです。

  
公式サイトは嫌になるほどわかりにくです。

ダウンロードが完了したらインストーラを起動してください。

1. インストール中の言語の選択
1. インストール中の言語の選択

上図のようにインストール中の言語を選択します。 日本語は用意されていませんので何もせず[OK]ボタンを押します。

2. 使用許諾条件の確認
2. 使用許諾条件の確認

上図のようにソフトウェアの使用許諾条件が表示されます。 内容を確認し、同意する場合は、"I accept the agreement"を選択し、[Next]ボタンを押して次の画面に進みます。

承諾できない場合は、[Cancel]ボタンを押してインストールを中断してください。

3. 継続の確認
3. 継続の確認

上図のようにソフトウェアの更新に関する情報が表示されます。 内容を確認し、[Next]ボタンを押して次の画面に進みます。

4. インストール先の指定
4. インストール先の指定

上図のようにソフトウェアのインストール先を指定し、[Next]ボタンを押して次の画面に進みます。

  
初期値のままで問題ありません。
5. 機能の選択
5. 機能の選択

上図のようにインストールする機能を選択することができます。 "UltraVNC Repeater" のチェックを外し、[Next]ボタンを押して次の画面に進みます。

6. スタートメニューのフォルダ名
6. スタートメニューのフォルダ名

上図のようにスタートメニューのフォルダ名を指定することができます。 必要であれば変更し、[Next]ボタンを押して次の画面に進みます。

  
初期値のままで問題ありません。
7. 追加の機能
7. 追加の機能

上図のように追加の機能を選択することができます。 "Register UltraVNC Server as a system service" と "Start or restart UltraVNC service" にチェックを入れ、[Next]ボタンを押して次の画面に進みます。

  
UltraVNCのサービス(VNCサーバ)が起動時に自動的に開始されるようになります。
8. 最終確認
8. 最終確認

上図のようにインストール前の最終確認が行われます。 表示されているインストールの詳細を確認し、問題がなければ[Install]ボタンを押してインストールを開始します。

9. 進捗
9. 進捗

上図のようにインストールが開始され進捗が表示されます。 インストールが終了すると自動的に次の画面へ進みます。

10. 情報の確認
10. 情報の確認

上図のようにインストールが完了すると情報が表示されます。 このソフトウェアの機能や同梱ファイルの一覧、バージョン履歴やヒントなどが表示されています。 内容を確認し、[Next]ボタンを押して次の画面に進みましょう。

11. 完了
11. 完了

上図のようにインストール作業が完了したことが表示されます。 [Finish]ボタンを押して終了しましょう。

これで、UltraVNCのインストールは完了です。


ではここで、UltraVNCのサービス(VNCサーバ)が起動していることを確認しておきましょう。

12. タスクトレイの上向き矢印をクリック
12. タスクトレイの上向き矢印をクリック

上図のようにタスクトレイの通知領域の上向き矢印をクリックします。

13. UltraVNCのサービス(VNCサーバ)が起動している
13. UltraVNCのサービス(VNCサーバ)が起動している

上図のようにUltraVNCのサービス(VNCサーバ)が起動していることがわかります。

VNCサーバの設定

続いて、接続パスワードの設定やスタートアップスクリプトの修正および解像度の設定を行います。

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

TightVNC Serverでは、接続パスワードは初回起動時に設定することができます。 キーボードから vncserver :1 と入力してEnterキーを押してください。


vncserver :1

 
  
:1 はディスプレイ番号です。
  
:0 が物理的なディスプレイ(あなたの目の前にあるディスプレイ)で、:1 がVNCサーバによって新たに作成される仮想的なディスプレイです。

以下のように接続パスワードの入力が求められますので、任意のパスワードを入力してください(確認のため2回の入力が必要です)。

taro@hawk:~$ vncserver :1

You will require a password to access your desktops.

Password:
Verify:

続いて、以下のように閲覧専用の接続パスワードを入力するかどうかを聞かれます。 ここでは n を入力します。

Would you like to enter a view-only password (y/n)? n
  
閲覧専用の接続パスワードで接続した場合には、デスクトップ画面を見ることはできますが操作を行うことはできません。

VNCサーバの起動が完了し、以下のようにシェルに制御が戻ってきます。 なお、VNCサーバは裏で動作しています。

New 'X' desktop is hawk:1

Creating default startup script /home/taro/.vnc/xstartup
Starting applications specified in /home/taro/.vnc/xstartup
Log file is /home/taro/.vnc/hawk:1.log

taro@hawk:~$

では、せっかく起動したVNCサーバですが、ここで終了させます。 スタートアップスクリプトや解像度の設定を行うためです。

キーボードから vncserver -kill :1 と入力してEnterキーを押してください。


vncserver -kill :1

 
  
-kill オプションで起動中のVNCサーバを終了させることができます。

以下のように起動中のVNCサーバが終了します。

taro@hawk:~$ vncserver -kill :1
Killing Xtightvnc process ID 2669
taro@hawk:~$

次に行うのはスタートアップスクリプトの修正です。 スタートアップスクリプトとは、VNCサーバが起動した直後に行われる一連の処理のことです。

このスタートアップスクリプトを修正し、X Window Systemにログインした時と同様の処理が行われるようにする必要があるのです。

  
スタートアップスクリプトは $HOME/.vnc/xstartup というファイルです。

スタートアップスクリプトの修正にはテキストエディタを利用します。 ここではnanoエディタで修正してみましょう。

  
nanoエディタはWindowsのメモ帳のような感覚で操作できるテキストエディタです。 カーソルキーでカーソルを移動させることができます。

キーボードから nano $HOME/.vnc/xstartup と入力してEnterキーを押してください。


nano $HOME/.vnc/xstartup

 

以下のようにnanoエディタでスタートアップスクリプトを開きます。

taro@hawk:~$ nano $HOME/.vnc/xstartup

nanoエディタが起動したら、スタートアップスクリプトを次のように修正します。 9行目の先頭に # を追加し、10行目から新たな行を3行追加します。

$HOME/.vnc/xstartup
  1. #!/bin/sh

  2. xrdb "$HOME/.Xresources"
  3. xsetroot -solid grey
  4. #x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
  5. #x-window-manager &
  6. # Fix to make GNOME work
  7. export XKL_XMODMAP_DISABLE=1
  8. #/etc/X11/Xsession
  9. unset SESSION_MANAGER
  10. unset DBUS_SESSION_BUS_ADDRESS
  11. mate-session &
  
インストールしたLinux MintがMATE Edition ではなく Xfce Edition の場合は、mate-session & ではなく xfce4-session & と記述します。

ではここで、nanoエディタの簡単な使い方を説明しておきます。 スタートアップスクリプトの修正を終え、後は保存するだけの状態だとします

1. CTRL + Xを押す
1. CTRL + Xを押す

上図のように画面下部にはヘルプが表示されています。 ヘルプを見ればわかる通り、終了はCTRL + Xです。 キーボードからCTRL+Xキーを押してください。

2. y を押す
2. y を押す

上図のように保存するかどうかを聞かれますので y を入力します。

3. Enterキーを押す
3. Enterキーを押す

上図のように書き込むファイル名を変更可能な状態になります。 ファイル名を変更してはいけませんので、そのままEnterキーを押してください。

これでスタートアップスクリプトの修正は完了です。


最後に行うのが解像度の設定です。 今回は解像度を 1024x768 に設定します。

解像度の設定は $HOME/.vncrc に記述します。 今回もnanoエディタを使いましょう。 キーボードから nano $HOME/.vncrc と入力してEnterキーを押してください。


nano $HOME/.vncrc

 

以下のようにnanoエディタで $HOME/.vncrc ファイルを編集します。

taro@hawk:~$ nano $HOME/.vncrc

nanoエディタが起動したら次のように記述します。

$HOME/.vnc/xstartup
  1. $geometry = "1024x768"

修正したら保存しましょう。

VNCサーバの設定作業はこれで完了です。

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerでも同様の作業を行います。 作業手順はhawkとほぼ変わらないため、実行結果のみを掲載します。

taro@tiger:~
$ 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

New 'X' desktop is tiger:1

Creating default startup script /home/taro/.vnc/xstartup
Starting applications specified in /home/taro/.vnc/xstartup
Log file is /home/taro/.vnc/tiger:1.log

taro@tiger:~
$ vncserver -kill :1
Killing Xtightvnc process ID 4665
taro@tiger:~
$ nano $HOME/.vnc/xstartup
taro@tiger:~
$ nano $HOME/.vncrc

スタートアップスクリプトの内容は以下の通りです。 mate-session & ではなく xfce4-session & と記述します。

$HOME/.vnc/xstartup
  1. #!/bin/sh

  2. xrdb "$HOME/.Xresources"
  3. xsetroot -solid grey
  4. #x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
  5. #x-window-manager &
  6. # Fix to make GNOME work
  7. export XKL_XMODMAP_DISABLE=1
  8. #/etc/X11/Xsession
  9. unset SESSION_MANAGER
  10. unset DBUS_SESSION_BUS_ADDRESS
  11. xfce4-session &

$HOME/.vncrc ファイルの内容は以下の通り hawk と同じです。

$HOME/.vnc/xstartup
  1. $geometry = "1024x768"

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。

UltraVNCで必要な作業は、接続パスワードの設定のみです。 なお、閲覧専用の接続パスワードは設定しません

  
SSH接続に利用するユーザでの作業です。 管理者ユーザでログインし直す必要はありません。 ただし、標準ユーザの場合は管理者ユーザのパスワードの入力が求められます。
1. UltraVNC Server settingsを開く
1. UltraVNC Server settingsを開く

上図のようにスタートメニューをクリックし、キーボードから "ultravnc" と入力します。 一覧に表示された "UltraVNC Server settings" をクリックします。

2. UltraVNC Server - Settings - 画面が開く
2. UltraVNC Server - Settings - 画面が開く

上図のようにUltraVNC Server - Settings - 画面が開きます。 "Authentication" の "VNC Password" の右にある [CHANG]ボタンを押します。

3. UltraVNC Server - Change Password
3. UltraVNC Server - Change Password

上図のようにUltraVNC Server - Change Password 画面が開きます。 Enter a new password / Confirm the new password に接続パスワードを入力し、[SAVE]ボタンを押します。

4. [OK]ボタンを押して画面を閉じる
4. [OK]ボタンを押して画面を閉じる

上図のようにUltraVNC Server - Settings - 画面に戻ります。 [OK]ボタンを押して画面を閉じましょう。

wolfでのVNCサーバの設定作業はこれで完了です。

ファイアウォールのポート開放

続いての作業はファイアウォールのポートの開放です。 VNCは5900番ポート または 5901番ポートで通信を行いますので、それぞれ開放します。

なお、VNCではディスプレイ番号 + 5900 のポートが利用されます。 つまり、ディスプレイ番号が 0(ゼロ) なら5900番ポートが、1 なら5901番ポートが使われます。

  
UltraVNCのディスプレイ番号は 0(ゼロ) になります。 よって、Windows PCでは5900番ポートが使われます。
  
Linux PCのVNCサーバでは "vncserver :1" のように ディスプレイ番号は 1 から使われますのでポートも5901番ポートから使われます。

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

では、ポートを開放しましょう。 Linux PCですので5901番ポートを開放します。

  
"vncserver :2" のように ディスプレイ番号 2 も使うなら 5902番ポートの開放も必要です。

キーボードから sudo ufw allow in from any to any port 5901 と入力してEnterキーを押してください。


sudo ufw allow in from any to any port 5901

 

以下のように5901番ポートを開放します。

taro@hawk:~$ sudo ufw allow in from any to any port 5901
ルールを追加しました
ルールを追加しました (v6)
taro@hawk:~$

これで5901番ポートの開放作業は完了です。

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerでも同様の作業を行います。 作業手順はhawkと変わらないため、実行結果のみを掲載します。

taro@tiger:~
$ sudo ufw allow in from any to any port 5901
Rule added
Rule added (v6)
taro@tiger:~
$

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。

UltraVNCのインストーラが、インストール時にポートの開放作業も行ってくれています。 よって、実施する作業は何もありません。

VNC接続テスト(SSHポート転送はまだ利用しない)

さあ、待ちに待ったVNC接続のテストです。 なお、SSHのポート転送の機能はまだ使いません。 よって、暗号化されていない接続パスワードがネットワーク上を流れてしまいます

家庭内LANならいいですが、社内LANではこの作業は実施しないでください。 もちろん、外出先からのインターネット経由での接続なども絶対に行ってはいけません

家庭内LANでない場合は、後述の "SSHポート転送を利用したVNC接続テスト" まで読み飛ばしてください。

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

それでは、hawkからtigerへVNC接続してみましょう。 なお、tiger側ではVNCサーバは起動していない状態です

だからといって、tigerまで出向いてVNCサーバを起動するのでは意味がありません。 hawkからtigerへSSH接続し、そこでVNCサーバを起動しましょう

キーボードから ssh tiger.local と入力してEnterキーを押してください。


ssh tiger.local

 

以下のようにtigerへSSH接続でログインします。

taro@hawk:~$ ssh tiger.local
Linux tiger 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have no mail.
taro@tiger:~
$

では、VNCサーバを起動しましょう。

キーボードから vncserver :1 と入力してEnterキーを押してください。


vncserver :1

 

以下のようにVNCサーバが起動し、シェルに制御が戻ってきます。

taro@tiger:~
$ vncserver :1

New 'X' desktop is tiger:1

Starting applications specified in /home/taro/.vnc/xstartup
Log file is /home/taro/.vnc/tiger:1.log

taro@tiger:~
$

なお、SSH接続を切断(つまりtigerからログアウト)してもVNCサーバは終了せずに動作し続けてくれます。 よって、ログアウトしてもいいのですが、今回はtigerへログインしたままにしておきます。

では、tigerへVNC接続しましょう。 新たに端末を開き、キーボードから gvncviewer tiger.local:1 と入力してEnterキーを押してください。


gvncviewer tiger.local:1

 
  
:1 がディスプレイ番号です。

以下のようにtigerへVNC接続します。

taro@hawk:~$ gvncviewer tiger.local:1
Connected to server
Got credential request for 1 credential(s)

ここで接続パスワードの入力が求められます。

1. 接続パスワードの入力
1. 接続パスワードの入力

上図のように "Authenticaiton required" というダイアログが表示されますので、設定しておいた接続パスワードを入力します。

  
接続先のVNCサーバの初回起動時に設定した接続パスワードです。
2. 接続先のデスクトップが表示される
2. 接続先のデスクトップが表示される

上図のように接続先のデスクトップが表示されます。 やりました、VNC接続に成功しました。

ウィンドウそのものが表示されない場合は、おそらく接続パスワードが間違っています

灰色だけの画面が表示されてマウスカーソルだけが動く状態なら、接続先のスタートアップスクリプトに記述ミスがあります

  
スタートアップスクリプトは $HOME/.vnc/xstartup というファイルです。

なお、ここで注目すべきことがあります。 VNCビューア上でデスクトップを色々操作しても、tigerの画面には何の動きもありません。

つまり、誰か別の人間がtigerの前に座ってデスクトップを操作していても、その操作とは干渉しないということです。

tigerに物理的につながっているディスプレイはディスプレイ番号が 0(ゼロ) で、VNC接続しているディスプレイ番号は 1 であるためです。

  
:0 が物理的なディスプレイで、:1 以降がVNCサーバによって新たに作成される仮想的なディスプレイです。

本題に戻りましょう。 VNC接続を切断します。

3. VNCビューアを終了する
3. VNCビューアを終了する

上図のようにVNCビューアを閉じます。

では、tigerで起動中のVNCサーバを終了しましょう。 もう不要ですから。 tigerへSSH接続している端末のキーボードから vncserver -kill :1 と入力してEnterキーを押してください。


vncserver -kill :1

 

以下のようにtigerのVNCサーバが終了します。

taro@tiger:~
$ vncserver -kill :1
Killing Xtightvnc process ID 6221
taro@tiger:~
$

さらに以下のようにSSH接続も切断(tigerからログアウト)します。

taro@tiger:~
$ exit
ログアウト
Connection to tiger.local closed.
taro@hawk:~$

hawkからtigerへのVNC接続、つまりLinux PC同士のVNC接続のテストはこれで完了です。


続いては、hawkからwolfへのVNC接続のテストです。 つまり、Linux PCからWindows PCへのVNC接続です。

キーボードから gvncviewer wolf.local と入力してEnterキーを押してください。


gvncviewer wolf.local

 
  
前述のようにUltraVNCのディスプレイ番号は 0(ゼロ) になります。 ディスプレイ番号が 0(ゼロ)の場合は :0 は省略可能することができます。
  
接続先のディスプレイ番号が 0(ゼロ) ということは物理的なディスプレイを操作している、ということです。 つまり、VNCビューア上でマウスを動かすと、物理的なディスプレイ上でもマウスが動いてしまいます。 そのため、別の人間がwolfの前に座ってデスクトップを操作するというような使い方はできません。

以下のようにwolfへVNC接続します。

taro@hawk:~$ gvncviewer wolf.local
Connected to server
Got credential request for 1 credential(s)

ここで接続パスワードの入力が求められます。

4. 接続パスワードの入力
4. 接続パスワードの入力

上図のように "Authenticaiton required" というダイアログが表示されますので、設定しておいた接続パスワードを入力します。

5. 接続先のデスクトップが表示される
5. 接続先のデスクトップが表示される

上図のように接続先のデスクトップが表示されます。 やりました、WindowsへのVNC接続にも成功しました。

  
筆者のWindows PC(Windows 11)では、この時点では接続できませんでした(Authentication failed 'authentication rejected')。 Windowsを再起動することでVNC接続できるようになりました。
  
VNC接続できない場合はPCを再起動してみてください。

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerからのVNC接続テストは行いません。 今はまだSSHのポート転送の機能を使わないテストであるためです。

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。

wolfからのVNC接続テストは行いません。 今はまだSSHのポート転送の機能を使わないテストであるためです。

  

SSHポート転送を利用したVNC接続テスト

待望の本格的なVNC接続のテストです。 SSHのポート転送の機能を利用し、暗号化された経路でVNC接続を行います。

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

まずは、tigerへSSH接続する必要があります。 キーボードから ssh tiger.local -L 5901:tiger.local:5901 と入力してEnterキーを押してください。


ssh tiger.local -L 5901:tiger.local:5901

 
  
新たに -L 5901:tiger.local:5901 という記述が増えています。 意味は以下の通りです。
-L ポート転送する
5901
※左側
接続元のPCでのポート番号
tiger.local ポート転送先
5901
※右側
接続先のPCでのポート番号
つまり、自PC(hawk)の5901番ポートへの通信を、tigerの5901番ポートへ転送する、という意味になります。 もちろん、通信内容は暗号化されます。
  
接続先がWindowsの場合は ssh wolf.local -L 5901:wolf.local:5900 とします。 UltraVNCのディスプレイ番号は 0(ゼロ) であるためです。
  
接続先がWindowsの場合は ssh wolf.local -L 5901:192.168.0.110:5900 のようにポート転送先をIPアドレスで指定する必要があるかもしれません。

以下のようにポート転送を有効にしつつtigerへSSH接続します。

taro@hawk:~$ ssh tiger.local -L 5901:tiger.local:5901
Linux tiger 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have no mail.
taro@tiger:~
$

では、続けてVNCサーバを起動しましょう。 キーボードから vncserver :1 と入力してEnterキーを押してください。


vncserver :1

 

以下のようにVNCサーバが起動し、シェルに制御が戻ってきます。

taro@tiger:~
$ vncserver :1

New 'X' desktop is tiger:1

Starting applications specified in /home/taro/.vnc/xstartup
Log file is /home/taro/.vnc/tiger:1.log

taro@tiger:~
$

では、tigerへVNC接続しましょう。 新たに端末を開き、キーボードから gvncviewer 127.0.0.1:1 と入力してEnterキーを押してください。


gvncviewer 127.0.0.1:1

 
  
127.0.0.1 は自分自身を指し示すIPアドレスです。 よって 127.0.0.1:1 は自PCのディスプレイ番号 1 のことです。 つまり、自PC(hawk)の5901番ポートを指します。
  
自PC(hawk)の5901番ポートへの通信はtigerの5901番ポートへ転送されます。 よって、tigerへVNC接続されることになります。

以下のように127.0.0.1:1にVNC接続します。

taro@hawk:~$ gvncviewer 127.0.0.1:1
Connected to server
Got credential request for 1 credential(s)

ここで接続パスワードの入力が求められます。

1. 接続パスワードの入力
1. 接続パスワードの入力

上図のように "Authenticaiton required" というダイアログが表示されますので、設定しておいた接続パスワードを入力します。

  
接続先のVNCサーバの初回起動時に設定した接続パスワードです。
2. 接続先のデスクトップが表示される
2. 接続先のデスクトップが表示される

上図のように接続先のデスクトップが表示されます。 やりました、127.0.0.1:1 に接続したにも関わらずtigerへのVNC接続に成功しました。

つまり、ポート転送が有効な状態だということです。 VNCの弱点であるパスワードが平文で流れてしまう、という問題を克服することができました


hawkからtigerへのSSHポート転送を使用したVNC接続のテストはこれで完了です。 tigerで起動中のVNCサーバを終了させましょう。

tigerへSSH接続している端末のキーボードから vncserver -kill :1 と入力してEnterキーを押してください。


vncserver -kill :1

 

以下のようにtigerのVNCサーバが終了します。

taro@tiger:~
$ vncserver -kill :1
Killing Xtightvnc process ID 7013
taro@tiger:~
$

さらに以下のようにSSH接続も切断(tigerからログアウト)します。

taro@tiger:~
$ exit
ログアウト
Connection to tiger.local closed.
taro@hawk:~$

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerからのVNC接続テストについては省略します。 興味がある方は接続テストを行ってみてください。

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。

wolfからのVNC接続テストについては省略します。 興味がある方は接続テストを行ってみてください。

なお、UltraVNCのVNCビューアの使用方法は以下の通りです

1. UltraVNC Viewerを開く
1. UltraVNC Viewerを開く

上図のようにスタートメニューをクリックし、キーボードから "vncview" と入力します。 一覧に表示された "UltraVNC Viewer" をクリックします。

2. リモートへの接続
2. リモートへの接続

上図のようにUltraVNC Viewerが開きます。 server[:port]に "127.0.0.1:1" と入力し、[Connect]ボタンを押して接続します。

SSHポート転送されていないVNC接続の禁止

いよいよ最後の作業、SSHポート転送を利用していないVNC接続の禁止です。 つまり、SSHポート転送の強制です

具体的にはファイアウォールの機能を使います。 自PC以外からのVNC接続要求を全て破棄します。

なお、Windows PCではポート番号ではなくUltraVNCのVNCサーバへの通信かどうかで判断させます

hawkでの作業

  
hawkは Linux PC(その1) のことです。 Linux Mint を想定しています。

まずは、すでに存在している "5901番ポートの許可ルール" を削除する必要があります。

削除するにはルールの番号を知る必要があります。 キーボードから sudo ufw status numbered と入力してEnterキーを押してください。


sudo ufw status numbered

 

以下のようにファイアウォールのルールの一覧が番号付きで表示されます。

taro@hawk:~$ sudo ufw status numbered
状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 5901                       ALLOW IN    Anywhere
[ 3] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 4] 5901 (v6)                  ALLOW IN    Anywhere (v6)

taro@hawk:~$

削除は1件ずつ行います。 5901番ポートに関する最初のルールの番号は 2 であることがわかります。

では、番号 2 のルールを削除しましょう。 キーボードから sudo ufw delete 2 と入力してEnterキーを押してください。


sudo ufw delete 2

 

以下のように本当に削除するかどうかの確認が求められます。

taro@hawk:~$ sudo ufw delete 2
削除:
 allow 5901
操作を続けますか (y|n)?

y と入力してEnterキーを押します。 以下のようにルールが削除されます。

操作を続けますか (y|n)? y
ルールを削除しました
taro@hawk:~$

以下のように再度ファイアウォールのルールの一覧を確認します。

taro@hawk:~$ sudo ufw status numbered
状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 3] 5901 (v6)                  ALLOW IN    Anywhere (v6)

taro@hawk:~$

続いてはルール番号 3 を削除すればいいことがわかりました。 以下のようにファイアウォールの番号 3 のルールを削除します。

taro@hawk:~$ sudo ufw delete 3
削除:
 allow 5901
操作を続けますか (y|n)? y
ルールを削除しました (v6)
taro@hawk:~$

以下のようにファイアウォールのルールの一覧を確認します。

taro@hawk:~$ sudo ufw status numbered
状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)

taro@hawk:~$

5901番ポートに関するルールは全て削除されていることがわかりました。

では、新たなルールを追加します。 5901番ポートへのパケットは自PCからである場合のみ許可する、というルールです。 キーボードから sudo ufw allow in from 127.0.0.1 to any port 5901 と入力してEnterキーを押してください。


sudo ufw allow in from 127.0.0.1 to any port 5901

 

以下のようにルールが追加されます。

taro@hawk:~$ sudo ufw allow in from 127.0.0.1 to any port 5901
ルールを追加しました
taro@hawk:~$

作業はこれで完了です。

tigerでの作業

  
tigerは Linux PC(その2) のことです。 MX Linux を想定しています。

tigerでも同様の作業を行います。 作業手順はhawkと変わらないため、実行結果のみを掲載します。

taro@tiger:~
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 5901                       ALLOW IN    Anywhere
[ 3] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 4] 5901 (v6)                  ALLOW IN    Anywhere (v6)

taro@tiger:~
$ sudo ufw delete 2
Deleting:
 allow 5901
Proceed with operation (y|n)? y
Rule deleted
taro@tiger:~
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 3] 5901 (v6)                  ALLOW IN    Anywhere (v6)

taro@tiger:~
$ sudo ufw delete 3
Deleting:
 allow 5901
Proceed with operation (y|n)? y
Rule deleted (v6)
taro@tiger:~
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)

taro@tiger:~
$ sudo ufw allow in from 127.0.0.1 to any port 5901
Rule added
taro@tiger:~

wolfでの作業

  
wolfは Windows PC のことです。 Windows 11 を想定しています。

wolfでも同様の作業を行います。 なお、ポート番号ではなくUltraVNCのVNCサーバへの通信かどうかで判断させます。

  
SSH接続に利用するユーザでの作業です。 管理者ユーザでログインし直す必要はありません。
1. コントロールパネルを開く
1. コントロールパネルを開く

上図のようにスタートメニューをクリックし、キーボードから "control" と入力します。 一覧に表示された "コントロールパネル" をクリックし、コントロールパネルを開きます。

2. Windows Defender ファイアウォールを開く
2. Windows Defender ファイアウォールを開く

上図のようにコントロールパネルが開きます。 表示方法を "小さいアイコン" に切り替え、一覧から "Windows Defender ファイアウォール" を実行します。

3. 詳細設定をクリック
3. 詳細設定をクリック

上図のように "Windows Defender ファイアウォール" が開きます。 左にある "詳細設定" をクリックしてください。

  
標準ユーザの場合は管理者ユーザのパスワードの入力が求められます。
4. 受信の規則をクリック
4. 受信の規則をクリック

上図のように "セキュリティが強化された Windows Defender ファイアウォール" が開きますので、左にある "受信の規則" を選択します。

5. 名前で並び替える
5. 名前で並び替える

上図のように受信の規則が表示されます。 見出しの "名前" をクリックして名前順で並び替えましょう。

6. winvnc.exeを開く
6. winvnc.exeを開く

上図のように一覧から "winvnc.exe" をダブルクリックします。 2行ありますが、まずは上の行からダブルクリックしましょう。

7. 詳細設定タブに切り替える
7. 詳細設定タブに切り替える

上図のように "winvnc.exeのプロパティ" が表示されます。 詳細設定タブをクリックします。

8. プライベートのみを許可する
8. プライベートのみを許可する

上図のようにプライベートのみにチェックを入れて[OK]ボタンを押します。

9. もう一方の行もプライベートに変更する
9. もう一方の行もプライベートに変更する

上図のようにもう一方の "winvnc.exe" の行もプライベートに変更します。

これでファイアウォールのポート開放の作業は完了です...と言いたいところですがもう少し作業が残っています。 PCによっては受信の規則に "vnc 5800" / "vnc 5900" という規則が作成されていることがあります。

その場合にはそれらの規則もプライベートに変更する必要があります

10. vnc 5800 や vnc 5900 があればプライベートに変更する
10. vnc 5800 や vnc 5900 があればプライベートに変更する

上図のように "vnc 5800" や "vnc 5900" があるならこれらもプライベートに変更しておきます。

  

最終テスト

全ての作業が終わりました。 PCを再起動し、VNC接続のテストを実施してください。

SSHポート転送を利用していればVNC接続でき、SSHポート転送を利用していなければ接続できないことを確認します。 以下の、

  1. Linux PCからLinux PC
  2. Linux PCからWindows PC
  3. Windows PCからLinux PC

3通りの組み合わせでVNC接続してみましょう。

  

VNCに関する補足

VNCに関して説明できていないことがありますので、ここで補足しておきます。

Linux PCでもディスプレイ番号 0(ゼロ) でVNC接続できる

今回構築したSSH + VNCによるデスクトップのリモート操作環境ですが、接続先がLinux PCかWindows PCかで大きな違いがありました

接続先がLinux PCの場合はVNCビューアに表示されるデスクトップは仮想ディスプレイであり、物理的に接続されているディスプレイとは独立していました。 つまり、複数人で利用することができました

一方、Windows PCへの接続では、VNCビューアで操作すると物理的に接続されているディスプレイでもマウスが動いてしまいました。 つまり、VNCビューアから操作されるのは仮想ディスプレイではなく、物理ディスプレイなのです

どちらが便利でしょうか。 多くの場面で、仮想ディスプレイであるLinux PCのVNCサーバの方が便利だと思います。

ただし "Linux PCへの接続でも物理ディスプレイを遠隔操作したい" ということはあると思います。

  
例えば "動画編集ソフトウェアでの動画出力中に他のPCで作業しなくてはならなくなった" というような場面です。 席を移動した先のPCから元のPCの物理ディスプレイが見れれば動画出力の進捗がわかります。

Linux PCへのVNC接続でも物理ディスプレイを操作することはできます。 X11vncという物理ディスプレイ向けのVNCサーバがあります。

  
TigerVNCに含まれている x0vncserver というVNCサーバでも同じことができます。

なお、X11vncのインストールは、

sudo apt install x11vnc

と実行します。

X11vncのVNCサーバの起動方法は簡単で、

x11vnc

と実行するだけです。 ディスプレイ番号 0(ゼロ) で接続を待ちます。

なお、TightVNC ServerのVNCサーバのように裏でサービスのように動くことはありません。 シェルには制御は戻ってきませんので、終了させる場合はキーボードからCTRL+Cキーを押す必要があります。

また、x11vncはVNCビューアからの接続が切れると自動的に終了し、シェルに制御が返されます。 自動的に終了させたくない場合は、

x11vnc -forever

と実行します。 キーボードからCTRL+Cキーを押すまでは終了しません。 VNCビューアからの接続をいつまでも繰り返し受け続けます

SSHポート転送するなら

X11vncのVNCサーバのディスプレイ番号は 0(ゼロ) です。 つまり、5900番ポートで接続する必要があります。

よって、SSHポート転送しつつ接続するなら、

ssh tiger.local -L 5901:tiger.local:5900

のようにしてSSH接続しておく必要があります。 つまり、Windows PCへの接続手順と同じということになります。

SSHポート転送されていないVNC接続の禁止もしておこう

X11vncをインストールするなら、5900番ポートについてもSSHポート転送を強制するのがいいでしょう。 具体的には、

sudo ufw allow in from 127.0.0.1 to any port 5900

というルールをファイアウォールに追加することになるでしょうか。