はい、承知いたしました。UbuntuにVNCサーバーをセットアップする初心者向けの詳細なガイド記事を約5000語で記述し、その内容を直接ここに表示します。
【初心者向け】Ubuntu VNCサーバーの簡単セットアップガイド
はじめに:VNCとは何か、そしてなぜ使うのか
コンピューターを遠隔から操作したい、という場面は意外と多くあります。自宅のデスクトップPCを外出先から操作したり、サーバーとして使っているPCの画面をGUIで確認したり、あるいは離れた場所にいる家族や友人のPCトラブルを解決したり。このようなときに非常に役立つのが「リモートデスクトップ」と呼ばれる技術です。
リモートデスクトップを実現する技術はいくつかありますが、中でも古くから利用されており、多くのプラットフォームで利用可能なのが「VNC(Virtual Network Computing)」です。VNCを使うと、ネットワーク経由で別のコンピューターの画面を自分のコンピューターに表示し、まるで目の前にあるかのようにマウスやキーボードを使って操作することができます。
この記事は、特にLinuxディストリビューションの中でも人気が高く、使いやすいUbuntuに焦点を当て、VNCサーバーをセットアップするための詳細な手順を、コンピューターの操作にまだ慣れていない初心者の方にも分かりやすく解説します。コマンドの意味から設定ファイルの内容まで、なぜその操作が必要なのかを丁寧に説明していきます。
この記事を読めば、以下のことができるようになります。
- VNCの基本的な仕組みを理解する。
- UbuntuにVNCサーバーソフトウェアをインストールする。
- VNC接続のためのパスワードを設定する。
- VNCセッションで使用するデスクトップ環境を設定する。
- サーバー起動時にVNCサーバーが自動的に立ち上がるように設定する。
- ファイアウォールを設定して安全性を高める。
- VNCクライアントソフトウェアを使ってUbuntuデスクトップに接続する。
- VNC接続をさらに安全にするためのSSHトンネルについて学ぶ。
- VNCセットアップでよく発生する問題のトラブルシューティング方法を知る。
さあ、UbuntuでのVNCサーバーセットアップを始めて、リモートデスクトップの便利さを体験しましょう。
VNCの基本概念を理解する
VNCは「クライアント・サーバーモデル」で動作します。これは、サービスを提供する側のプログラム(サーバー)と、そのサービスを利用する側のプログラム(クライアントまたはビューア)が連携して動作する仕組みです。
- VNCサーバー: 遠隔操作される側のコンピューター(今回のUbuntuマシン)で動作するプログラムです。このサーバーが、そのコンピューターの画面イメージを取得し、マウスやキーボードの入力を受け付けます。
- VNCクライアント(ビューア): 遠隔操作する側のコンピューター(Windows, macOS, スマートフォンなど)で動作するプログラムです。このクライアントが、サーバーから送られてくる画面イメージを表示し、ユーザーのマウスやキーボード操作をサーバーに送信します。
VNCプロトコルは、サーバーがクライアントに画面のピクセル情報を送り、クライアントがマウスやキーボードイベントをサーバーに送り返すというシンプルな仕組みに基づいています。このデータ転送を効率化するために、さまざまな圧縮技術やエンコーディング方式が使われます。
解像度とカラー深度
VNC接続では、リモートデスクトップの「解像度」と「カラー深度」を設定することが可能です。
- 解像度: リモートデスクトップの画面サイズです。(例: 1920×1080ピクセル)。解像度が高いほど、表示できる情報量は増えますが、転送するデータ量も増えるため、ネットワーク帯域幅をより多く消費し、パフォーマンスに影響を与える可能性があります。
- カラー深度: 画面の色数を表します。(例: 24ビットカラー, 16ビットカラー, 8ビットカラー)。カラー深度が高いほど、より豊かな色彩を表現できますが、これも転送データ量を増やします。一般的に、写真編集などでない限り、16ビットカラーや8ビットカラーでも十分な場合が多く、データ量を抑えることでスムーズな操作につながります。
これらの設定は、VNCサーバーを起動する際や、クライアントソフトウェア側で調整することができます。特にネットワーク帯域が限られている環境では、解像度やカラー深度を下げることで、操作感を改善できる場合があります。
UbuntuでのVNCサーバー選択肢
Ubuntuで利用できるVNCサーバーソフトウェアはいくつか種類があります。それぞれに特徴がありますが、初心者の方には設定が比較的簡単で、パフォーマンスも良いとされているものをお勧めします。
代表的なVNCサーバーソフトウェアには以下のようなものがあります。
- Vino: GNOMEデスクトップ環境に標準で含まれているVNCサーバーです。設定はGUIで行えて非常に簡単ですが、機能が限定的であったり、新しいバージョンのUbuntuで動作が不安定になる場合があります。また、通常は現在ログインしているユーザーのデスクトップセッションを共有する形になります。
- TightVNC: 広く利用されているVNCサーバーの一つです。圧縮率の高いエンコーディング方式に対応しており、比較的低帯域幅のネットワークでも快適に動作することを目的としています。
- TigerVNC: TightVNCから派生したプロジェクトで、パフォーマンスと機能性に優れています。特に新しいデスクトップ環境(GNOME 3など)との互換性が高いとされており、この記事ではこのTigerVNCをメインに解説します。TigerVNCは新しいデスクトップセッションを作成する形で動作するのが一般的です。
- x11vnc: 既存のXサーバーセッション(つまり、現在モニターに表示されているデスクトップ画面そのもの)を共有するのに特化したVNCサーバーです。サーバーマシンに実際にログインして操作している画面をリモートで見たい場合に便利ですが、設定が少し複雑になる場合があります。
この記事では、多くのユースケースに対応でき、比較的パフォーマンスも良いTigerVNCをインストール・設定する手順を詳しく説明します。
前提条件と準備
UbuntuにVNCサーバーをセットアップする前に、いくつかの準備が必要です。
-
Ubuntuがインストールされたコンピューター: これは言うまでもありませんが、VNCサーバーをインストールする対象のUbuntuマシンが必要です。この記事では、デスクトップ環境がインストールされているUbuntuを想定しています。サーバー版のUbuntuをお使いの場合は、VNCで接続したいデスクトップ環境(GNOME, XFCE, LXDEなど)を別途インストールする必要があります。GNOMEをインストールする場合の例は以下の通りです(注意:サーバー版にデスクトップ環境を入れると、それなりにリソースを消費します)。
“`bash
sudo apt update
sudo apt install ubuntu-desktopまたは lightweight な XFCE など
sudo apt install xubuntu-core
“`
デスクトップ環境をインストールした後は、一度再起動することをお勧めします。
-
インターネット接続: VNCサーバーソフトウェアをダウンロード・インストールするためにインターネット接続が必要です。
-
SSH接続(任意): もしVNCサーバーをセットアップするUbuntuマシンが手元にない場合、別のコンピューターからSSHで接続して作業を進める必要があります。SSHについてはこの記事では詳細を扱いませんが、基本的なSSHクライアント(Windowsの場合はPuTTYやWindows Subsystem for Linux (WSL)、macOSやLinuxの場合は標準のターミナルコマンド
ssh)の使い方は知っていると便利です。SSHサーバーがUbuntuマシンにインストールされていない場合は、以下でインストールできます。bash
sudo apt update
sudo apt install openssh-server -
VNCクライアントソフトウェア: VNCサーバーに接続するために、操作する側のコンピューターやスマートフォンにVNCクライアントソフトウェアが必要です。多くのOS向けに様々なVNCクライアントが無償で提供されています。例えば、RealVNC Viewer, TightVNC Viewer, TigerVNC Viewer, UltraVNC (Windowsのみ), Chicken of the VNC (macOSのみ) などがあります。ご自身の環境に合わせて、いずれかのVNCクライアントを準備しておきましょう。
- 管理者権限 (sudo): ソフトウェアのインストールやシステム設定の変更には管理者権限が必要です。通常、Ubuntuをインストールしたときに作成した最初のユーザーは
sudoコマンドを使って一時的に管理者権限を得ることができます。コマンドを実行する際にsudoを先頭につけることを覚えておきましょう。
これらの準備が整ったら、いよいよVNCサーバーのセットアップを開始します。
ステップ・バイ・ステップ TigerVNCサーバーセットアップ
ここでは、TigerVNCサーバーをUbuntuにインストールし、設定を行う手順を詳細に解説します。ターミナル(端末)アプリケーションを使用してコマンドを入力していきます。ターミナルはUbuntuのアプリケーションメニューから見つけることができます。
ステップ1: パッケージリストの更新
まず、Ubuntuのパッケージリストを最新の状態に更新します。これにより、これからインストールするソフトウェアの最新バージョンや、依存関係にあるパッケージの情報が取得されます。
ターミナルを開き、以下のコマンドを入力してEnterキーを押します。
bash
sudo apt update
sudo: このコマンドを管理者権限(root権限)で実行するためのコマンドです。システムに関わる重要な変更を行う場合に必要となります。apt: UbuntuやDebian系のLinuxディストリビューションで使われるパッケージ管理コマンドです。ソフトウェアのインストール、削除、更新などを行います。update: パッケージの情報源(リポジトリ)から、どのパッケージが利用可能で、どのようなバージョンがあるかの情報を取得し、ローカルのパッケージリストを更新します。これによって、次にインストールするパッケージが最新の状態であることを保証できます。
このコマンドを実行すると、パスワードを求められることがあります。これはあなたのユーザーアカウントのパスワードです。パスワードを入力しても画面には何も表示されませんが、入力は受け付けられていますので、そのままEnterキーを押してください。
コマンドの実行が完了すると、利用可能なパッケージのリストが更新されたことが表示されます。
ステップ2: TigerVNCサーバーのインストール
次に、TigerVNCサーバーと関連パッケージをインストールします。
以下のコマンドを入力してEnterキーを押します。
bash
sudo apt install tigervnc-standalone-server tigervnc-common -y
install:aptコマンドのサブコマンドで、指定したパッケージをシステムにインストールします。tigervnc-standalone-server: TigerVNCサーバー本体のパッケージ名です。tigervnc-common: TigerVNCサーバーとクライアントで共通して使用されるファイルやライブラリを含むパッケージです。サーバーをインストールする際には通常これも必要になります。-y: インストールの途中で「続行しますか? [Y/n]」のような確認メッセージが表示された場合に、自動的に「Yes」と答えてインストールを続行するためのオプションです。これにより、インストール処理を自動化できますが、インストールされるパッケージを確認したい場合はこのオプションをつけずに実行してください。
このコマンドを実行すると、必要なパッケージとその依存関係にあるパッケージがインターネットからダウンロードされ、システムにインストールされます。完了するまでしばらく時間がかかることがあります。
インストールが完了したというメッセージが表示されれば、TigerVNCサーバーのプログラムはシステムに導入されました。
ステップ3: VNCパスワードの設定
VNCサーバーに接続する際には、パスワードによる認証が必要です。セキュリティのため、このパスワードは推測されにくい強力なものに設定することが非常に重要です。
初めてVNCサーバーを起動するコマンドを実行すると、パスワード設定のプロンプトが表示されます。以下のコマンドを実行してください。
bash
vncserver
vncserver: TigerVNCサーバーを起動するためのコマンドです。初めて実行すると、VNCパスワードの設定を促されます。
コマンドを実行すると、以下のようなメッセージが表示されます。
“`
You will require a password to access your desktops.
Password:
“`
ここで、VNC接続に使用するパスワードを入力します。入力した文字は画面に表示されません。少なくとも6文字以上のパスワードを設定することをお勧めします。入力したらEnterキーを押します。
Verify:
確認のため、同じパスワードをもう一度入力します。入力したらEnterキーを押します。
次に、ビュー専用パスワードを設定するかどうか尋ねられます。
Would you like to enter a view-only password (y/n)?
- ビュー専用パスワード: これを設定すると、そのパスワードで接続したクライアントは画面を見ることはできますが、マウスやキーボードによる操作は一切できません。プレゼンテーションやデモンストレーションなど、他の人に見せるだけで操作はさせたくない場合に便利です。必要なければ
nと入力してEnterキーを押します。ここではnを選択して進めますが、必要であればyと入力してビュー専用パスワードを設定してください。
パスワード設定が完了すると、TigerVNCサーバーがデフォルト設定で起動し、以下のような情報が表示されます。
“`
New ‘X’ desktop is yourhost:1
Starting applications specified in /home/youruser/.vnc/xstartup
Log file is /home/youruser/.vnc/yourhost:1.log
“`
yourhost:1: これはVNCサーバーが起動したディスプレイ番号を示しています。:1はディスプレイ番号1を意味し、VNCプロトコルでは通常ポート番号5901を使用します。:2で起動した場合はポート番号5902、というように、ポート番号は5900 + ディスプレイ番号となります。この情報は、後ほどVNCクライアントから接続する際に必要になります。/home/youruser/.vnc/xstartup: これは、VNCセッションが開始されたときに実行される設定スクリプトのパスです。後ほどこのファイルを編集して、起動するデスクトップ環境などを設定します。/home/youruser/.vnc/yourhost:1.log: これは、VNCサーバーのログファイルです。サーバーの起動や動作に関する情報、エラーメッセージなどが記録されます。問題が発生した場合に確認すると役に立ちます。
これでVNCパスワードが設定され、VNCサーバーが一度起動しました。この最初の起動によって、ユーザーのホームディレクトリ (~) 以下に .vnc ディレクトリが作成され、パスワードファイル (passwd) や設定ファイル (xstartup) が生成されます。
この時点で起動したVNCサーバーは、デフォルト設定ではうまくデスクトップ環境が表示されない場合が多いです。そのため、一度サーバーを停止し、設定ファイルを編集してから再度起動する必要があります。
VNCサーバーを停止するには、以下のコマンドを使用します。先ほど起動したディスプレイ番号を指定します。
bash
vncserver -kill :1
-kill: 指定したディスプレイ番号のVNCサーバープロセスを終了させるオプションです。
サーバーが停止したことを確認します。
Killing Xtigervnc process ID 1234... success.
process ID 1234 の部分は、実際に表示されるPID(プロセスID)に置き換わります。
ステップ4: VNCセッションの設定 (xstartup ファイルの編集)
VNCサーバーが起動した際に、どのようなデスクトップ環境を表示するかは、ユーザーのホームディレクトリにある .vnc/xstartup ファイルによって制御されます。デフォルトの xstartup ファイルは、通常ウィンドウマネージャーなどを起動する最低限の設定しか書かれていないため、完全なデスクトップ環境(GNOME, XFCEなど)を表示するには編集が必要です。
xstartup ファイルはシェルスクリプトです。VNCサーバーはこのスクリプトを実行してVNCセッションを構築します。
xstartup ファイルをテキストエディタで開いて編集します。ここでは初心者にも使いやすい nano エディタを使用します。
bash
nano ~/.vnc/xstartup
nano: テキストファイルを編集するための簡単なコマンドラインエディタです。~/.vnc/xstartup: 編集するファイルへのパスです。~は現在のユーザーのホームディレクトリを表します。
ファイルを開くと、以下のような内容が表示されるかもしれません(バージョンや環境によって内容は多少異なります)。
“`bash
!/bin/sh
Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80×24+10+10 -ls &
twm &
“`
このデフォルトの内容では、xterm(端末エミュレーター)と twm(非常にシンプルなウィンドウマネージャー)しか起動しない設定になっています。これを、Ubuntu標準のデスクトップ環境(GNOMEなど)が起動するように書き換えます。
ファイルの内容をすべて削除し、以下の内容に置き換えてください。これは一般的なUbuntuデスクトップ環境(GNOME)を起動するための設定です。
“`bash
!/bin/sh
Start up the standard desktop environment
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/Xsession
“`
#!/bin/sh: このスクリプトが/bin/shというシェルで実行されることを指定する行です。スクリプトの先頭に必ず記述します。unset SESSION_MANAGER: 既存のセッションマネージャーに関する環境変数を解除します。これにより、新しいVNCセッションが独立したセッションとして開始されます。unset DBUS_SESSION_BUS_ADDRESS: 同様に、既存のDBusセッションに関する環境変数を解除します。これも独立したセッションのために重要です。exec /etc/X11/Xsession: これがデスクトップ環境を起動する最も重要なコマンドです。/etc/X11/Xsessionは、システムのデフォルトのXセッション(Ubuntuの場合は通常GNOMEデスクトップ)を開始するためのスクリプトです。execを使うことで、このスクリプトが実行された後にxstartupスクリプト自体は終了します。
注意: もしあなたが別のデスクトップ環境(例えばXFCEやLXDEなど)をインストールしている場合、exec の行を以下のように変更する必要があるかもしれません。
- XFCEの場合 (xubuntu-coreなどをインストールしている場合):
bash
exec startxfce4 - LXDEの場合 (lubuntu-coreなどをインストールしている場合):
bash
exec startlxde - MATEの場合 (ubuntu-mate-coreなどをインストールしている場合):
bash
exec mate-session
ほとんどの場合、exec /etc/X11/Xsession でうまくいくはずです。もしうまくいかない場合は、お使いのUbuntuバージョンやデスクトップ環境に合わせて適切なコマンドを調べる必要があります。
内容を書き換えたら、ファイルを保存してエディタを終了します。nano の場合、Ctrl + S で保存、Ctrl + X で終了です。終了時に保存するかどうか尋ねられたら Y と答えてEnterキーを押します。
次に、xstartup ファイルに実行権限を与えます。これにより、VNCサーバーがこのスクリプトを実行できるようになります。
bash
chmod +x ~/.vnc/xstartup
chmod: ファイルのパーミッション(権限)を変更するコマンドです。+x: ファイルに実行権限を追加します。
これでVNCセッションの設定は完了です。
ステップ5: VNCサーバーの再起動
xstartup ファイルの設定を反映させるために、一度停止したVNCサーバーを再度起動します。
bash
vncserver :1
:1: ディスプレイ番号を指定します。これはVNCクライアントから接続する際に使用する番号(またはそれに対応するポート番号5901)となります。もし複数のVNCセッションを同時に起動したい場合は、:2,:3のように異なるディスプレイ番号を指定して起動します。
サーバーが起動すると、再びログファイルのパスやディスプレイ番号などの情報が表示されます。
“`
New ‘X’ desktop is yourhost:1
Starting applications specified in /home/youruser/.vnc/xstartup
Log file is /home/youruser/.vnc/yourhost:1.log
“`
これで、VNCサーバーはポート番号5901で接続を待ち受けている状態になりました。
ステップ6: ファイアウォール設定 (UFW)
Ubuntuには、標準で「UFW (Uncomplicated Firewall)」というファイアウォール管理ツールが搭載されています。外部からの不要な接続を防ぎ、セキュリティを確保するためにも、VNCが使用するポートをファイアウォールで開放する設定が必要です。
VNCサーバーは、ディスプレイ番号:N に対してポート番号 5900 + N を使用します。ディスプレイ番号 :1 の場合はポート 5901、:2 の場合はポート 5902 となります。
VNCサーバーを起動したディスプレイ番号に対応するポートを開放します。今回はディスプレイ番号 :1 を使用したので、ポート 5901 を開放します。
以下のコマンドを実行します。
bash
sudo ufw allow 5901/tcp
ufw: Uncomplicated Firewall のコマンドです。allow: 指定した通信を許可する設定です。5901: 開放するポート番号です。/tcp: TCPプロトコルでの通信を許可することを指定します。VNCはTCPを使用します。
もしVNCをローカルネットワーク内からのみ利用する場合は、特定のIPアドレス範囲からの接続だけを許可するように設定することも可能です。例えば、192.168.1.0/24 というネットワークからの接続のみを許可する場合は、以下のコマンドを実行します。
bash
sudo ufw allow from 192.168.1.0/24 to any port 5901 proto tcp
from 192.168.1.0/24: 許可する送信元IPアドレスまたはネットワーク範囲を指定します。to any port 5901 proto tcp: 宛先は任意 (any) で、ポート5901番のTCP通信に対して許可することを指定します。
ファイアウォールの設定状況を確認するには、以下のコマンドを実行します。
bash
sudo ufw status
これにより、UFWが有効になっているか、そしてどのポートやサービスが許可/拒否されているかのリストが表示されます。もしUFWが無効になっている場合は、以下のコマンドで有効化してください(有効化する前に、SSHポート(22)を許可するなど、必要な設定を忘れないように!)。
bash
sudo ufw enable
ファイアウォールが正しく設定されれば、外部ネットワークからVNCポートへの不要なアクセスを防ぎつつ、VNCクライアントからの正当な接続は受け付けられるようになります。
ステップ7: VNCサーバーの自動起動設定 (Systemd)
コンピューターを再起動したり、VNCサーバーのプロセスが何らかの原因で停止したりした場合に、手動で再び vncserver :1 コマンドを実行するのは面倒です。システム起動時に自動的にVNCサーバーが立ち上がるように設定しておくと便利です。
Ubuntuでは、システムサービスの管理に「Systemd」という仕組みが使われています。Systemd用のサービスファイルを作成することで、VNCサーバーを自動起動サービスとして登録できます。
ユーザーごとにVNCセッションを起動するためのSystemdサービスファイルを作成します。これは、[email protected] というテンプレートファイルとして作成するのが一般的です。
以下のコマンドで、Systemdのシステムサービスディレクトリに新しいファイルを作成します。
bash
sudo nano /etc/systemd/system/[email protected]
ファイルを開いたら、以下の内容をコピー&ペーストしてください。ファイル中の YOUR_USER_NAME の部分は、実際にVNCサーバーを起動するユーザーのユーザー名(あなたのUbuntuのユーザー名)に置き換えてください。ユーザー名は whoami コマンドで確認できます。
“`ini
[Unit]
Description=TigerVNC remote desktop service
After=network.target
[Service]
Type=forking
User=YOUR_USER_NAME
Group=YOUR_USER_NAME
WorkingDirectory=/home/YOUR_USER_NAME
PIDFile=/home/YOUR_USER_NAME/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -geometry 1920×1080 -depth 24 -localhost no
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
“`
[Unit]: サービスに関する一般的な情報や依存関係を定義します。Description: サービスの説明です。After=network.target: ネットワークが利用可能になった後にこのサービスを開始することを指定します。
[Service]: サービス自体の動作を定義します。Type=forking: サービスがバックグラウンドで実行されるプロセスを生成することを指定します。User=YOUR_USER_NAME: このサービスを実行するユーザーを指定します。ここをあなたのユーザー名に置き換えるのを忘れないでください!Group=YOUR_USER_NAME: このサービスを実行するグループを指定します。通常ユーザー名と同じです。ここもあなたのユーザー名に置き換えてください!WorkingDirectory=/home/YOUR_USER_NAME: サービスの作業ディレクトリを指定します。ここもあなたのホームディレクトリのパスに置き換えてください!PIDFile=/home/YOUR_USER_NAME/.vnc/%H:%i.pid: サービスのプロセスID (PID) を記録するファイルの場所を指定します。%Hはホスト名、%iはサービスを起動する際のインスタンス名(後述)に置き換わります。ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1: サービス開始前に実行されるコマンドです。-がついていると、コマンドが失敗してもサービス起動は続行されます。ここでは、指定されたディスプレイ番号(:%i)で既にVNCサーバーが起動していた場合に強制終了させています。標準出力と標準エラー出力は/dev/nullに捨てています。ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24 -localhost no: サービスを開始するコマンドです。:%i: ここにサービスのインスタンス名(例::1)が代入され、VNCサーバーがそのディスプレイ番号で起動します。-geometry 1920x1080: VNCセッションの解像度を1920×1080ピクセルに設定します。お好みの解像度に変更できます。-depth 24: カラー深度を24ビットに設定します。帯域幅を節約したい場合は16や8に変更しても構いません。-localhost no: デフォルトではセキュリティのためlocalhostからの接続しか受け付けない設定になる場合がありますが、このオプションを付けることでローカル以外のネットワークからの接続も受け付けるようになります(ただし、ファイアウォール設定が必要です)。このオプションはTigerVNCのバージョンによって動作が異なる場合があるので、後述のSSHトンネルを使う場合はこのオプションをつけない (-localhost yesと同じ意味になる) 方が安全です。ここでは、ローカルネットワークからの直接接続を想定してnoとしていますが、インターネット経由で接続する場合は必ずSSHトンネルを使用し、このオプションはつけない (または-localhost yesにする) ことを強く推奨します。
ExecStop=/usr/bin/vncserver -kill :%i: サービスを停止するコマンドです。
[Install]: Systemdがこのサービスをどのように有効化するかを定義します。WantedBy=multi-user.target: システムがマルチユーザーモードになったときにこのサービスが起動されるように設定します。
YOUR_USER_NAME をあなたのユーザー名に置き換えたら、ファイルを保存してエディタを終了します(Ctrl + S で保存、Ctrl + X で終了、保存の確認は Y)。
サービスファイルを新しく作成したり変更したりした場合は、Systemdに設定ファイルを再読み込みさせる必要があります。
bash
sudo systemctl daemon-reload
これでSystemdは新しいサービスファイルの存在を認識しました。次に、作成したサービスを有効化します。これにより、システム起動時にこのサービスが自動的に開始されるようになります。サービス名の @ の後に、自動起動したいディスプレイ番号(例えば :1)を指定します。
bash
sudo systemctl enable tigervncserver@:1.service
systemctl: Systemdサービスを操作するためのコマンドです。enable: 指定したサービスがシステム起動時に自動的に開始されるように設定します。tigervncserver@:1.service: 有効化するサービス名です。@の後の:1がインスタンス名(ディスプレイ番号)となり、サービスファイル内の%iに代入されます。
コマンドを実行すると、以下のようなメッセージが表示され、設定が有効化されたことが分かります。
Created symlink /etc/systemd/system/multi-user.target.wants/tigervncserver@:1.service → /etc/systemd/system/[email protected].
これで、次回システムを起動したときからVNCサーバー(ディスプレイ番号 :1)が自動的に立ち上がるようになります。
設定をすぐに適用してVNCサーバーを起動したい場合は、以下のコマンドを実行します。
bash
sudo systemctl start tigervncserver@:1.service
start: 指定したサービスを開始します。
VNCサーバーが正しく起動したか確認するには、以下のコマンドを実行します。
bash
sudo systemctl status tigervncserver@:1.service
status: 指定したサービスの現在の状態を表示します。
active (running) と表示されていれば、サービスは正常に動作しています。もしエラーが表示された場合は、設定ファイル(特にユーザー名やパスに間違いがないか)やログファイル(~/.vnc/*.log)を確認して原因を特定する必要があります。
これで、Ubuntuマシン側のVNCサーバーセットアップはほぼ完了です!
VNCクライアントからの接続
Ubuntu側でVNCサーバーが起動し、ファイアウォール設定も完了したら、いよいよ別のコンピューターやスマートフォンからVNCクライアントソフトウェアを使って接続してみましょう。
様々なVNCクライアントソフトウェアがありますが、基本的な接続方法は共通しています。
- VNCクライアントソフトウェアを起動する。
- 接続先のアドレスを指定する。
- 通常は、「サーバーのIPアドレス」と「ポート番号」、または「サーバーのIPアドレス」と「ディスプレイ番号」を組み合わせて指定します。
- ディスプレイ番号
:1はポート5901、:2はポート5902に対応します。 - 指定方法はクライアントによって異なりますが、多くの場合
サーバーのIPアドレス:ディスプレイ番号またはサーバーのIPアドレス::ポート番号の形式で入力します。 - 例:
192.168.1.100:1または192.168.1.100::5901
- 接続を開始する。
- VNCパスワードの入力を求められたら、ステップ3で設定したパスワードを入力する。
パスワードが正しければ、Ubuntuマシンのデスクトップ画面がクライアントに表示され、マウスやキーボードで操作できるようになります。
VNCクライアントでの接続例 (テキストベース)
- RealVNC Viewer: 起動画面に「Enter a VNC Server address or Hostname」のような入力欄があります。そこに
192.168.1.100:1または192.168.1.100::5901のように入力してEnterを押します。パスワード入力画面が表示されるので、設定したパスワードを入力します。 - TigerVNC Viewer: 起動画面に「VNC server:」という入力欄があります。そこに
192.168.1.100:1または192.168.1.100::5901のように入力して「Connect」ボタンをクリックします。パスワード入力画面が表示されるので、設定したパスワードを入力します。 - macOS標準の画面共有: Finderで「移動」メニューから「サーバーへ接続…」を選択し、アドレスに
vnc://192.168.1.100と入力します。接続後にディスプレイ番号(1番目のセッションなら「1」)とパスワードを尋ねられます。または、Finderのサイドバーに表示されるネットワーク内のコンピューターをクリックすると「画面を共有」ボタンが表示される場合があります。
接続が確立できれば、リモートでのUbuntu操作が可能になります。
セキュリティに関する考慮事項
VNCは非常に便利なツールですが、デフォルトの設定だけではセキュリティ上のリスクが伴う可能性があります。特にインターネット経由でVNCサーバーに接続する場合、いくつかの重要な注意点と対策があります。
強力なVNCパスワードの使用
これは最も基本的かつ重要なセキュリティ対策です。推測されやすい簡単なパスワードを設定してしまうと、第三者に容易に不正アクセスされる危険性があります。英数字、記号を組み合わせた、他のサービスでは使っていない、十分な長さ(最低でも8文字以上、推奨は12文字以上)の強力なパスワードを設定してください。
SSHトンネルを使用した安全な接続
デフォルトのVNCプロトコルは、パスワード認証を除いて、データ転送が暗号化されていません。つまり、ネットワーク上を流れる画面イメージやキー入力などが第三者によって傍受される可能性があります。これは特にインターネット経由での接続において大きなリスクとなります。
この問題を解決するための最も一般的かつ推奨される方法は、「SSHトンネル」を使用することです。SSH(Secure Shell)は、ネットワーク経由で安全にコンピューターを操作するためのプロトコルで、通信が強力に暗号化されます。SSHのポートフォワーディング機能を利用して、VNCの通信を暗号化されたSSH接続の中に「トンネル」させることができます。
SSHトンネルを使用する場合の仕組みは以下のようになります。
- クライアント側PCから、VNCサーバー側Ubuntuマシンへ、SSHで安全に接続を確立します。
- SSH接続を確立する際に、VNCポートへの通信をローカルPC上の特定のポートに転送する設定を行います(ポートフォワーディング)。
- VNCクライアントは、リモートのVNCサーバーのIPアドレスに直接接続するのではなく、ローカルPC上の指定したポート(SSHトンネルの出口)に接続します。
- ローカルポートへの接続はSSHクライアントによって傍受され、暗号化されたSSH接続を通じてリモートのVNCサーバーへ転送されます。
- VNCサーバーは、あたかも同じマシン(
localhostまたは127.0.0.1)からの接続であるかのように通信を受け取ります。
これにより、インターネット上を流れるVNCのデータはすべてSSHによって暗号化されるため、安全性が大幅に向上します。
SSHトンネルを設定する場合、Systemdサービスファイルの ExecStart 行から -localhost no オプションを削除(または -localhost yes に変更)しておくのが望ましいです。これにより、VNCサーバーはローカルホストからの接続のみを受け付けるようになり、SSHトンネル経由の接続だけが許可される状態になります。
“`ini
Systemdサービスファイル (/etc/systemd/system/[email protected]) の例
ExecStart=/usr/bin/vncserver :%i -geometry 1920×1080 -depth 24 #-localhost no <– これを削除
``sudo systemctl daemon-reload` してサービスを再起動してください。
変更したら
SSHトンネルの設定方法 (クライアント側)
SSHクライアントによって設定方法は異なりますが、一般的な例を示します。
-
Linux / macOS (OpenSSH): ターミナルで以下のコマンドを実行します。
bash
ssh -L 5901:localhost:5901 your_user_name@server_ip_address-L: ローカルポートフォワーディングを指定します。5901: クライアント側のローカルPCで待ち受けるポート番号です(任意ですが、VNCのデフォルトポートと同じにすると分かりやすい)。localhost: 転送先となるサーバー側のホスト名です。SSHトンネルの場合、サーバー自身から見たアドレス (localhostまたは127.0.0.1) を指定します。5901: 転送先のサーバー側でVNCサーバーが待ち受けているポート番号です(ディスプレイ番号:1なら5901)。your_user_name@server_ip_address: SSHで接続するユーザー名とサーバーのIPアドレスです。
このコマンドを実行すると、SSHパスワードを求められます。正しく入力してSSH接続が確立されると、SSHセッションは開いたままになります。このターミナルは閉じないでください。
次に、VNCクライアントソフトウェアを起動し、接続先として
localhost:1または127.0.0.1:1(または指定したローカルポートlocalhost::5901) を指定して接続します。パスワードはVNCパスワードを入力します。 -
Windows (PuTTY): PuTTYを起動し、「Session」カテゴリでサーバーのIPアドレス(Host Name)とSSHポート(22)を入力します。次に左側のカテゴリリストから「Connection」 -> 「SSH」 -> 「Tunnels」を選択します。
- 「Source port」にクライアント側のローカルポート番号(例:
5901)を入力します。 - 「Destination」に「サーバー側から見たVNCサーバーのアドレス:ポート番号」を入力します。SSHトンネルの場合は
localhost:5901となります。 - 「Add」ボタンをクリックします。転送設定がリストに追加されます。
- 「Open」ボタンをクリックしてSSH接続を開始します。SSHパスワードを求められるので入力します。
PuTTYでSSH接続が確立されたら、VNCクライアントソフトウェアを起動し、接続先として
localhost:1または127.0.0.1:1(または指定したローカルポートlocalhost::5901) を指定して接続します。パスワードはVNCパスワードを入力します。 - 「Source port」にクライアント側のローカルポート番号(例:
SSHトンネルは、インターネット経由でVNCに接続する際のセキュリティを確保するための非常に効果的な方法です。設定に少し手間はかかりますが、その価値は十分にあります。
特定のIPアドレスからの接続のみ許可
前述のファイアウォール設定(UFW)で、許可するIPアドレスを限定することも有効なセキュリティ対策です。自宅や会社の固定IPアドレスなど、信頼できるネットワークからの接続のみを許可することで、不正アクセスのリスクを減らすことができます。
VPNの利用
もし可能であれば、VNCサーバーを含むネットワークと、VNCクライアントを操作するネットワークとの間にVPN(Virtual Private Network)を構築するのも良い方法です。VPNを使えば、あたかも同じローカルネットワーク内にいるかのように安全に通信できます。VPN接続が確立された後であれば、ファイアウォールの設定やVNCそのものの設定はローカルネットワーク向けに行うだけで済みます。
トラブルシューティング
VNCサーバーのセットアップ中に問題が発生することはよくあります。ここでは、よくある問題とその解決策を紹介します。
接続できない
VNCクライアントからサーバーに接続できない場合は、以下の点を順に確認してください。
- VNCサーバープロセスが起動しているか?
ターミナルでsudo systemctl status tigervncserver@:1.serviceを実行して、サービスがactive (running)状態になっているか確認してください。もしそうでない場合は、sudo systemctl start tigervncserver@:1.serviceで起動を試みてください。エラーメッセージが表示された場合は、その内容をよく読んで原因を探ります。 - ファイアウォール設定は正しいか?
Ubuntu側でsudo ufw statusを実行し、VNCサーバーが使用しているポート番号(例: 5901)がALLOWになっているか確認してください。もし許可されていない場合は、sudo ufw allow 5901/tcpのように設定を追加してください。特にインターネット経由での接続を試みている場合は、インターネットからの接続を許可する設定が必要です。 - サーバーのIPアドレスとポート番号/ディスプレイ番号は正しいか?
VNCクライアントに入力したサーバーのIPアドレス、ポート番号、またはディスプレイ番号が正しいか再確認してください。IPアドレスはUbuntu側でip addr showまたはifconfigコマンドで確認できます。ディスプレイ番号:1はポート5901です。 - VNCパスワードは正しいか?
VNCクライアントで入力したパスワードが、ステップ3で設定したVNCパスワードと一致しているか確認してください。SSHトンネルを使っている場合は、SSHパスワードとVNCパスワードを混同しないように注意してください。 - SSHトンネルを使用しているか?していないか?
もしSSHトンネルを使用している場合は、SSH接続が正しく確立されているか確認してください。また、VNCクライアントの接続先としてlocalhost:ディスプレイ番号または127.0.0.1:ディスプレイ番号(あるいはローカルポート) を指定しているか確認してください。SSHトンネルを使用していない場合は、VNCサーバーがローカルホスト以外のIPアドレスからの接続を許可する設定になっているか (-localhost noオプションなど) 確認してください。 - サーバー側のログファイルを確認する:
VNCサーバーのログファイル(例:~/.vnc/yourhost:1.log)を開いて、エラーメッセージがないか確認してください。ログファイルにはサーバーの起動プロセスや接続試行に関する情報が記録されています。
画面が真っ黒または灰色の画面になる
接続はできるものの、ウィンドウやアイコンのない真っ黒(または灰色)の画面が表示される場合は、VNCセッションでデスクトップ環境が正しく起動していない可能性が高いです。
~/.vnc/xstartupファイルの設定を確認する:
ステップ4で編集した~/.vnc/xstartupファイルを再度開いて、内容が正しく記述されているか確認してください。特にexecの行が、インストールされているデスクトップ環境を起動するための正しいコマンドになっているか確認が必要です。一般的なGNOMEデスクトップの場合はexec /etc/X11/Xsessionです。xstartupファイルに実行権限があるか?
~/.vnc/xstartupファイルに実行権限がないと、スクリプトが実行されません。ls -l ~/.vnc/xstartupコマンドでパーミッションを確認し、rwxのような実行権限 (x) がユーザーについているか確認してください。もしない場合はchmod +x ~/.vnc/xstartupで実行権限を追加してください。- デスクトップ環境がインストールされているか?
サーバー版Ubuntuなどでデスクトップ環境を後からインストールした場合、インストールが完了していない、または必要なパッケージが不足している可能性があります。デスクトップ環境を完全にインストールし、一度再起動してから再度VNCサーバーを起動してみてください。 - VNCサーバーを再起動する:
xstartupファイルを変更した後は、VNCサーバーを再起動する必要があります。vncserver -kill :1で停止し、vncserver :1で起動し直してください(Systemdサービスを使っている場合はsudo systemctl restart tigervncserver@:1.service)。
パフォーマンスが悪い(動作が遅い)
VNC接続時の画面描画や操作に遅延を感じる場合は、主にネットワーク帯域幅やサーバー/クライアントの設定が原因です。
- ネットワーク帯域幅を確認する:
サーバーとクライアント間のネットワーク帯域幅が十分か確認してください。特にインターネット経由の場合は、上り(サーバーからクライアントへの画面データ送信)の速度が重要になります。 - カラー深度を下げる:
VNCクライアントやVNCサーバーの設定で、カラー深度を24ビットから16ビットや8ビットに下げてみてください。これにより転送データ量が減り、操作感が改善される場合があります。VNCサーバーの起動時に-depthオプションで指定できます(例:vncserver :1 -geometry 1920x1080 -depth 16)。Systemdサービスを使っている場合は、サービスファイルのExecStart行の-depthオプションを変更してください。 - 解像度を下げる:
リモートデスクトップの解像度を下げることで、転送する画面データ量が大幅に減ります。VNCサーバーの起動時に-geometryオプションで指定できます(例:vncserver :1 -geometry 1280x720)。Systemdサービスを使っている場合は、サービスファイルのExecStart行の-geometryオプションを変更してください。 - VNCクライアントのオプションを確認する:
多くのVNCクライアントには、データ圧縮率やエンコーディング方式を選択するオプションがあります。「Tight」や「Hextile」などのエンコーディング方式は効率が良いとされています。クライアント側の設定も確認・調整してみてください。 - 有線接続を利用する:
可能であれば、Wi-Fi接続よりも有線LAN接続の方が安定しており、一般的に帯域幅も広いため、パフォーマンスが向上します。
複数のユーザーがVNCを使用する場合
各ユーザーが独立したVNCセッションを持ちたい場合は、それぞれのユーザーアカウントでログインし、それぞれのホームディレクトリで vncserver コマンドを実行してVNCパスワードを設定し、~/.vnc/xstartup ファイルを編集する必要があります。
Systemdによる自動起動を設定する場合も、各ユーザーごとにサービスファイルを作成し、User, Group, WorkingDirectory, PIDFile のパスをそれぞれのユーザーのものに設定する必要があります。サービス名は tigervncserver@:1.service のようにディスプレイ番号を指定しますが、他のユーザーが同じディスプレイ番号を使用しないように注意が必要です。ユーザーAは :1、ユーザーBは :2 のように使い分ける必要があります。そして、それぞれのサービスを sudo systemctl enable tigervncserver@:1.service や sudo systemctl enable tigervncserver@:2.service のように有効化します。
既存のデスクトップセッションに接続したい場合
TigerVNCは通常、ログインしているユーザーの現在のデスクトップセッションを共有するのではなく、新しい独立したデスクトップセッションを作成します。もし、サーバーマシンに直接モニターを接続して操作している画面を、そのままリモートから操作したい場合は、x11vnc という別のVNCサーバーを使用する必要があります。x11vnc は、既存のXサーバー(画面表示システム)にアタッチして、その画面を共有することに特化しています。セットアップ方法はTigerVNCとは異なりますが、特定の用途には非常に便利です。
他のVNCサーバーオプション (簡単に)
この記事ではTigerVNCを詳細に解説しましたが、他のVNCサーバーにもそれぞれ利点があります。
- Vino (GNOME標準):
- 利点: GNOMEデスクトップ環境に統合されており、設定が非常に簡単(システム設定の「共有」などからGUIで設定可能)。既存のデスクトップセッションを共有できる。
- 欠点: 機能が限定的(例えば、解像度やカラー深度の詳細設定が難しい場合がある)。ヘッドレス環境(モニターがないサーバー)での利用が難しい場合がある。gnome-remote-desktopに置き換えが進んでいる。
- TightVNC:
- 利点: 長年の実績があり、広く利用されている。特に低帯域幅環境でのパフォーマンスに優れるとされる圧縮エンコーディング(Tightエンコーディング)を使用できる。
- 欠点: TigerVNCに比べて新しいデスクトップ環境での互換性やパフォーマンスが劣る場合がある。
- x11vnc:
- 利点: 既存のXサーバーセッションを共有できるため、サーバーに直接接続したときと同じ画面をリモートで見たり操作したりできる。
- 欠点: 設定がTigerVNCなどに比べてやや複雑になる場合がある。デフォルトではセキュリティに注意が必要な場合がある。
多くの初心者ユーザーにとって、新しい独立したセッションを作成し、様々なデスクトップ環境に対応できるTigerVNCは、多目的に使いやすくバランスの取れた選択肢と言えます。
まとめ
この記事では、UbuntuにVNCサーバー(TigerVNC)をセットアップし、リモートからGUIで操作するための詳細な手順を解説しました。
- パッケージリストを更新し、TigerVNCをインストールしました。
vncserverコマンドでVNCパスワードを設定しました。~/.vnc/xstartupファイルを編集して、起動するデスクトップ環境を設定しました。- VNCサーバーを起動・停止する方法を学びました。
- ファイアウォール(UFW)を設定して、VNCポートを開放しました。
- SystemdサービスとしてVNCサーバーを登録し、システム起動時に自動起動するように設定しました。
- VNCクライアントからサーバーに接続する方法を説明しました。
さらに、VNC接続のセキュリティを高めるための重要な対策として、強力なパスワードの使用、SSHトンネルの活用、ファイアウォールでのアクセス制限などについても触れました。
これらのステップを踏むことで、Ubuntuマシンを遠隔から、まるで目の前にあるかのように操作できるようになります。これは、サーバー管理、リモートワーク、技術サポートなど、様々な場面で非常に役立つでしょう。
もしセットアップ中に問題が発生した場合は、トラブルシューティングのセクションを参考に、原因を探って解決を試みてください。また、インターネット経由でVNCを使用する場合は、必ずSSHトンネルを利用するなど、セキュリティ対策を怠らないようにしましょう。
これで、あなたのUbuntuリモートデスクトップ環境が整いました。VNCを活用して、より便利で柔軟なコンピューティングライフを楽しんでください。
FAQ (よくある質問)
Q: VNCとRDPの違いは?
A: VNC (Virtual Network Computing) と RDP (Remote Desktop Protocol) はどちらもリモートデスクトップ技術ですが、いくつかの点で異なります。
- 仕組み: VNCは、サーバーの画面イメージをキャプチャしてクライアントに送信し、クライアントからの入力(マウス/キーボード)をサーバーに送り返す、比較的シンプルな「画面転送」方式です。一方、RDPは、描画コマンド自体をネットワーク経由で送信し、クライアント側で画面を再構築する方式です。この違いにより、RDPの方が一般的に描画がスムーズで帯域幅を効率的に使える傾向があります。
- 対応OS: VNCは多くのプラットフォームで利用可能で、Windows, macOS, Linux, スマートフォンなど、様々なOS向けのサーバー・クライアントが存在します。RDPはもともとMicrosoftが開発したプロトコルであり、主にWindows環境で広く使われています(LinuxなどでもFreeRDPなどの実装はありますが、Windows間の接続が最も一般的です)。
- セッション: TigerVNCのような一般的なVNCサーバーは新しい独立したセッションを作成しますが、x11vncやVinoは既存のセッションを共有できます。RDPは通常、新しいユーザーセッションを作成してログインします。
どちらを使うべきかは、利用したいOS、必要な機能、ネットワーク環境などによって異なります。
Q: サーバー版Ubuntuを使っていますが、デスクトップ環境はどうすればいいですか?
A: サーバー版Ubuntuにはデフォルトでデスクトップ環境は含まれていません。VNCでGUIを使いたい場合は、別途デスクトップ環境をインストールする必要があります。sudo apt update の後、sudo apt install ubuntu-desktop で標準のGNOMEデスクトップをインストールできます。または、より軽量なXFCE (sudo apt install xubuntu-core) や LXDE (sudo apt install lubuntu-core) などをインストールすることも可能です。デスクトップ環境をインストールしたら、一度サーバーを再起動し、その後にこの記事の手順に従ってVNCサーバーをセットアップしてください。
Q: 複数のクライアントから同時に接続できますか?
A: はい、TigerVNCのようなVNCサーバーは複数のクライアントからの同時接続に対応しています。ただし、同じVNCセッション(同じディスプレイ番号)に複数のクライアントが接続した場合、すべてのクライアントで同じ画面が表示され、操作権限を持つすべてのクライアントが同時にマウスやキーボードを操作できるようになります。異なるクライアントがそれぞれ独立したデスクトップセッションで作業したい場合は、サーバー側でVNCサーバーを複数のディスプレイ番号で起動し(例: :1, :2, :3)、それぞれのクライアントが異なるディスプレイ番号に接続するように設定します。
Q: ポート番号は変更できますか?
A: はい、VNCサーバーが使用するポート番号は変更できます。デフォルトではディスプレイ番号 :N はポート 5900 + N ですが、VNCサーバーを起動する際に -rfbport オプションでポート番号を指定できます。例えば、ポート6000番で起動したい場合は vncserver :1 -rfbport 6000 のように指定します。Systemdサービスを使っている場合は、サービスファイルの ExecStart 行にこのオプションを追加します。ポート番号を変更した場合は、ファイアウォール設定(UFW)で新しいポート番号を許可することを忘れないでください。
Q: VNCパスワードを忘れてしまいました。どうすればいいですか?
A: VNCパスワードはユーザーのホームディレクトリ内の .vnc/passwd ファイルに暗号化されて保存されています。パスワードを忘れてしまった場合、このファイルから元のパスワードを復元することはできません。しかし、パスワードを再設定することは可能です。以下のコマンドを実行してください。
bash
vncpasswd
このコマンドは、既存のパスワードファイルを上書きして新しいパスワードを設定します。パスワードの入力を求められるので、新しいパスワードを2回入力してください。これによりVNCパスワードがリセットされます。新しいパスワードでVNCクライアントから接続できるようになります。