VNCアクセスできる環境を構築する手順(Ubuntu Desktop/GNOME 環境向け)
VNC接続は、以下の要素が揃って初めて機能します。
- デスクトップ環境 (Ubuntu Desktop/GNOME が既にインストール済み)
- VNCサーバー (TigerVNCを推奨)
- VNCサーバーの設定 (
~/.vnc/xstartup
でGNOMEデスクトップを起動) - ファイアウォール設定 (VPS側とさくらのVPS側の両方)
- VNCクライアント (PC側)
これらの項目を一つずつ確認し、設定を進めていきましょう。
1. SSHでVPSに接続
まず、ターミナルソフトを使ってVPSにSSH接続します。
Bash
ssh ユーザー名@VPSのIPアドレス
2. VNCサーバー (TigerVNC) の確認またはインストール
VNCサーバーがVPS上にインストールされていることを確認します。推奨はTigerVNCです。
Bash
dpkg -l | grep tigervnc
tigervnc-standalone-server
や tigervnc-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
はデフォルトでインストールされず、より新しいコマンドである ip
や ss
が推奨されています。
解決策: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
ファイルを編集するのが一般的です。
~/.vnc/config
ファイルを作成または編集します。Bashnano ~/.vnc/config
- 以下の行を追加または修正します。
-localhost no
この行を追加すると、vncserver
をオプションなしで起動しても、デフォルトで外部からの接続を受け付けるようになります。 - 保存してエディタを終了します(
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サーバーはすべてのネットワークインターフェースからの接続を受け入れる準備ができています。
コメント