[Ubuntu]VNC接続を可能にする設定

VNCアクセスできる環境を構築する手順(Ubuntu Desktop/GNOME 環境向け)

VNC接続は、以下の要素が揃って初めて機能します。

  1. デスクトップ環境 (Ubuntu Desktop/GNOME が既にインストール済み)
  2. VNCサーバー (TigerVNCを推奨)
  3. VNCサーバーの設定 (~/.vnc/xstartup でGNOMEデスクトップを起動)
  4. ファイアウォール設定 (VPS側とさくらのVPS側の両方)
  5. VNCクライアント (PC側)

これらの項目を一つずつ確認し、設定を進めていきましょう。

1. SSHでVPSに接続

まず、ターミナルソフトを使ってVPSにSSH接続します。

Bash

ssh ユーザー名@VPSのIPアドレス

2. VNCサーバー (TigerVNC) の確認またはインストール

VNCサーバーがVPS上にインストールされていることを確認します。推奨はTigerVNCです。

Bash

dpkg -l | grep tigervnc

tigervnc-standalone-servertigervnc-xorg-extension などが表示されない場合は、VNCサーバーがインストールされていない可能性があります。その場合は、以下のコマンドでインストールします。

Bash

sudo apt update
sudo apt install tigervnc-standalone-server tigervnc-xorg-extension

3. VNCサーバーの初期設定とパスワード設定

VNCサーバーを初めて起動し、VNC接続用のパスワードを設定します。

Bash

vncserver

このコマンドを実行すると、VNC接続時に使用するパスワードの設定を求められます。ビューワーパスワードと、オプションで読み取り専用パスワードも設定できます。

You will require a password to access your desktops.

Password:  <-- ここでパスワードを入力
Verify:    <-- 確認のためもう一度入力
Would you like to enter a view-only password (y/n)? n  <-- 読み取り専用パスワードは不要なら 'n'

パスワード設定後、New 'X' desktop is your_vps_hostname:1のような出力が表示されることを確認してください。この:1がVNC接続時のディスプレイ番号になります。


4. VNCサーバーの設定 (~/.vnc/xstartup の編集)

VNC接続時にUbuntu Desktop (GNOME) が起動するように設定ファイル ~/.vnc/xstartup を編集します。

まず、現在VNCサーバーが稼働している場合は停止します。

Bash

vncserver -kill :1

(:1はVNC起動時に表示されたディスプレイ番号に合わせてください。通常は:1です。)

次に、xstartupファイルを編集します。

Bash

nano ~/.vnc/xstartup

ファイルの内容を以下のように編集(または既存の行をすべてコメントアウトし、以下の内容を記述)してください。

Bash

#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/Xsession
  • exec /etc/X11/Xsession: この行が、システムにインストールされているデフォルトのデスクトップ環境(この場合はGNOME)を起動するための一般的なコマンドです。

編集後、Ctrl+Xを押して保存するか尋ねられたらYを入力し、Enterを押して終了します。

5. xstartup ファイルの実行権限付与

念のため、xstartupファイルに実行権限があることを確認し、なければ付与します。

Bash

chmod +x ~/.vnc/xstartup

6. VNCサーバーの起動

GNOMEを起動するように設定されたVNCサーバーを再起動します。

Bash

vncserver

VNCサーバーが起動し、New 'X' desktop is your_vps_hostname:1のような出力が再度表示されることを確認してください。


7. ファイアウォールの設定確認

VNC接続がブロックされないよう、VPSとさくらのVPSコントロールパネルの両方でファイアウォール設定を確認します。VNCは通常、ポート5900番台を使用します。ディスプレイ番号が:1の場合、ポートは5901です。

a. VPS内部のファイアウォール (UFW) の確認

Bash

sudo ufw status

もし5901/tcp ALLOW Anywhereのような表示がなければ、以下のコマンドで追加します。

Bash

sudo ufw allow 5901/tcp
sudo ufw reload # 設定を反映

UFWが有効になっていない場合は、先に有効化します。

Bash

sudo ufw enable

b. さくらのVPSコントロールパネルのファイアウォール設定の確認

さくらのVPSのコントロールパネルにログインし、「ネットワーク」→「ファイアウォール」または「パケットフィルタ」の項目を確認してください。VPSのIPアドレスに対して、TCPポート5901の通信が許可されていることを確認してください。もし許可されていなければ、設定を追加・変更してください。


8. VNCクライアントからの接続

PCにVNCクライアントソフトウェア(RealVNC Viewerなど)がインストールされていることを確認してください。

VNCクライアントを起動し、以下の情報を入力して接続を試みます。

接続時に、VPSのIPアドレスの後に :1 を正しく入力しているか(例: xxx.xxx.xxx.xxx:1)。※これはサーバー1の場合です。

  • VNCサーバーのアドレス: VPSのIPアドレス:1 (例: 192.0.2.100:1)
  • パスワード: 上記手順3でvncserverコマンド実行時に設定したVNCパスワード

これでVNCクライアントからUbuntu Desktop (GNOME) 環境にアクセスできるはずです。

トラブルシューティング

VNCポートのリッスン状況を確認

VNCサーバーが指定されたポート(通常は5901)で接続を待っているかを確認します。

sudo netstat -tulnp | grep 5901
# または
sudo ss -tulnp | grep 5901

出力例:

tcp        0      0 0.0.0.0:5901            0.0.0.0:* LISTEN      1234/Xtigervnc

この出力で LISTEN と表示されていれば、VNCサーバーがポート5901で接続を待ち受けている状態です。 1234 の部分はプロセスID (PID) で、上記の ps aux コマンドのPIDと一致するはずです。

sudo: netstat: command not found

このエラーは、netstat コマンドが含まれる net-tools パッケージがシステムにインストールされていないために発生します。Ubuntu Server 22.04などの最近のディストリビューションでは、net-tools はデフォルトでインストールされず、より新しいコマンドである ipss が推奨されています。

解決策:net-tools パッケージをインストールする

netstat コマンドを使用したいのであれば、net-tools パッケージをインストールすれば解決します。

Bash

sudo apt update          # パッケージリストを最新に更新
sudo apt install net-tools # net-toolsパッケージをインストール

このコマンドを実行することで、netstat コマンドが利用可能になります。

インストール後

インストールが完了したら、再度 netstat コマンドを試してみてください。

Bash

sudo netstat -tulnp | grep 5901

今度はエラーが出ずに、ポートのリッスン状況が表示されるはずです。

tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN      3156/Xtigervnc

この結果は、VNCサーバー(Xtigervnc)がポート 5901 で起動し、接続を待ち受けていることを示していますが、重要なのは 127.0.0.1:5901 の部分です。

  • 127.0.0.1 は「ローカルホスト(localhost)」、つまりVPSの自分自身を指します。
  • この設定では、VNCサーバーはVPSの内部からのみ接続を受け付ける状態になっており、外部(あなたのPC)からの接続は受け付けません

これが、VNCクライアントから接続できない原因である可能性が非常に高いです。

解決策:VNCサーバーが外部からの接続を受け付けるように設定を変更する

VNCサーバーが 127.0.0.1 でのみリッスンしている場合、通常は vncserver コマンドの起動オプションか、設定ファイルに問題があります。

TigerVNCのデフォルトでは、外部からの接続を受け付けるはずですが、何らかの理由でローカルホストのみにバインドされているようです。

以下の手順でVNCサーバーを再設定し、外部からの接続を受け付けるようにします。

1. 現在のVNCサーバープロセスを停止する

まず、起動中のVNCサーバープロセスを停止します。下記はサーバー1を停止する場合

vncserver -kill :1

(もし :1 以外のディスプレイ番号で起動している場合は、その番号を指定してください。ps aux | grep vnc で確認できます。)

2. VNCサーバーの設定を見直す(重要!)

VNCサーバーがローカルホストのみにバインドされるのを防ぐための設定はいくつかあります。

方法A: -localhost no オプションを付けて起動する

最も簡単な方法は、VNCサーバー起動時に localhost へのバインドを無効にするオプションを明示的に指定することです。

Bash

vncserver -localhost no

これにより、VNCサーバーはすべてのネットワークインターフェース(外部からの接続も含む)で接続を待ち受けるようになります。

方法B: ~/.vnc/config ファイルを編集する (より永続的)

vncserver コマンドのデフォルトの挙動を変更するには、~/.vnc/config ファイルを編集するのが一般的です。

  1. ~/.vnc/config ファイルを作成または編集します。Bashnano ~/.vnc/config
  2. 以下の行を追加または修正します。-localhost no この行を追加すると、vncserver をオプションなしで起動しても、デフォルトで外部からの接続を受け付けるようになります。
  3. 保存してエディタを終了します(Ctrl+X, Y, Enter)。

3. ~/.vnc/xstartup ファイルの再確認

これはおそらく問題ありませんが、念のためVNC接続時にUbuntu Desktop (GNOME) が起動するように設定されているか再確認してください。

nano ~/.vnc/xstartup

内容は以下のようになっていることを確認します。

#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/Xsession

もし変更が必要であれば変更し、保存して終了します。

4. VNCサーバーを再起動する

設定を変更したら、VNCサーバーを再起動します。

vncserver

起動時に New 'X' desktop is your_vps_hostname:1 のようなメッセージが表示されることを確認します。

5. ポートのリッスン状況を再度確認する

設定が反映されたか確認するため、再度 ss コマンドでポートのリッスン状況を確認します。

sudo ss -tulnp | grep 5901

今度は以下のような出力になることを期待します。

tcp    LISTEN     0      5          0.0.0.0:5901         0.0.0.0:* users:(("Xtigervnc",pid=XXXX,fd=X))

0.0.0.0:5901 と表示されていれば、VNCサーバーはすべてのネットワークインターフェースからの接続を受け入れる準備ができています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする