Pop!_OSをクリーンインストールしたばかりでリモートから操作したい、またはMacからLinuxデスクトップを快適に使いたいと考えていませんか?この記事では、macOSからPop!_OS 22.04 (GNOMEベース) へVNC接続するための手順を、つまづきやすいポイントも含めて詳しく解説します。
Splashtopのような商用ツールも便利ですが、VNCを使えば同じLAN内なら無料で、しかもMacに標準搭載されている機能でリモートデスクトップが可能です。
はじめに:VNCって何?
VNC (Virtual Network Computing) は、ネットワーク経由で別のコンピューターのデスクトップ画面を操作するための技術です。サーバー側のPCにVNCサーバーソフトウェアを、クライアント側のPCにVNCクライアントソフトウェアをインストールすることで、リモート操作が可能になります。
今回のケースでは、Pop!_OSがVNCサーバー、MacがVNCクライアントになります。
前提条件
- VNCサーバー側 (Pop!_OS): Pop!_OS 22.04 LTS (GNOMEデスクトップ環境がインストール済みであること)
- VNCクライアント側 (Mac): macOS 14.6.1 (Mac mini M2 Pro)
- 両方のPCが同じローカルネットワーク(LAN)に接続されていること
- Pop!_OSのIPアドレスが分かっていること (例:
192.168.0.161)
Step 1: Pop!_OSへのTigerVNCサーバーとXFCE4のインストール
Pop!_OSのデフォルトデスクトップ環境であるGNOME Shellは、TigerVNCサーバーと直接連携するのが難しい場合があります。そのため、VNCセッション用に軽量で互換性の高いXFCE4デスクトップ環境を導入することをおすすめします。
- システムを最新の状態に更新します。 Bash
sudo apt update sudo apt upgrade -y - TigerVNCサーバーとXFCE4デスクトップ環境、およびLightDMをインストールします。LightDMは、VNCセッションがデスクトップ環境を適切に起動するのに役立つことがあります。 Bash
sudo apt install tigervnc-standalone-server tigervnc-xorg-extension xfce4 xfce4-goodies lightdm -y
インストール中、デフォルトディスプレイの選択が出ます。ここではlightdmではなく、gdmのままとします。物理デスクトップとVNCセッションで異なるデスクトップ環境を使うことで、それぞれのセッションが干渉し合うリスクを減らせます。
もしlghtdmを選択してしまった場合、 sudo dpkg-reconfigure gdm3で戻すことができます。ログイン画面においても、Ctrl + Alt + F3でターミナルに切り替えて実行できます。
もしxfce4とLightDMが不要であれば、以下でアンインストールできます。
sudo apt purge xfce4 xfce4-goodies lightdm -y
sudo apt autoremove -yStep 2: VNCパスワードの設定とサーバーの起動
VNC接続に必要なパスワードを設定し、VNCサーバーを起動します。
- VNCパスワードを設定します。ターミナルで次のコマンドを実行し、VNC接続用のパスワードを設定してください。これは、通常のシステムパスワードとは別で、VNC接続時にのみ使用します。 Bash
vncpasswd「Verify」と表示されたら、確認のためにもう一度同じパスワードを入力します。Would you like to enter a view-only password (y/n)? と聞かれたら、通常は「n」で問題ありません。 - VNCサーバーを起動します。ここで重要なのが、外部からの接続を許可するオプションである -localhost no を追加することです。これを忘れると、Macから接続しようとしたときに「Connection refused」というエラーが発生します。ディスプレイ番号は :1 (ポート5901) や :2 (ポート5902) など、未使用のものを選択します。ここでは例として :2 を使います。 Bash
vncserver -localhost no :2New Xtigervnc server 'pop-os:2 (taku)' on port 5902 for display :2.のようなメッセージが表示されれば、VNCサーバーは正常に起動しています。
Step 3: VNCセッションでXFCE4を起動するための設定 (~/.vnc/xstartup)
VNCサーバーが起動しても、どのデスクトップ環境を表示するかを指示する必要があります。
- 現在起動しているVNCサーバーを一度停止します。 Bash
vncserver -kill :2Killing Xtigervnc server on display :2 ... success!のようなメッセージが表示されるはずです。 - ~/.vnc/xstartup ファイルを編集します。このファイルは、vncserver コマンドを初めて実行したときに自動生成されますが、デフォルトのままではGNOME Shellがうまく起動しないことがあります。XFCE4を起動するように内容を修正します。 Bash
nano ~/.vnc/xstartupファイルの中身をすべて削除し、以下の3行を正確に貼り付けてください。 Bash#!/bin/bash unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS startxfce4#!/bin/bash: スクリプトがBashシェルで実行されることを指定します。unset SESSION_MANAGERとunset DBUS_SESSION_BUS_ADDRESS: デスクトップセッションの競合を防ぐための重要な設定です。startxfce4: VNCセッション内でXFCE4デスクトップ環境を起動するコマンドです。
- ファイルを保存してエディタを終了します。Nanoの場合: Ctrl + O を押して保存 → Enter でファイル名を確定 → Ctrl + X でエディタを終了します。
- xstartupファイルに実行権限があることを確認します。通常は設定されていますが、念のため実行しておきましょう。 Bash
chmod +x ~/.vnc/xstartup - VNCサーバーを再度起動します。 Bash
vncserver -localhost no :2これでVNCセッション内でXFCE4デスクトップが起動する準備が整いました。
Step 4: ファイアウォール (UFW) の設定
Pop!_OSにはufwというファイアウォールが標準で含まれており、外部からの接続をブロックしています。VNC接続を許可するために、VNCサーバーが使用するポートを開放する必要があります。
VNCサーバーはディスプレイ番号に5900を足したポートを使用します。今回はディスプレイ:2なので、ポートは5902です。
- VNCポート (5902) を許可するルールを追加します。 Bash
sudo ufw allow 5902/tcp - UFWが有効になっていることを確認します。 Bash
sudo ufw enableファイアウォールはアクティブかつシステムの起動時に有効化されます。のようなメッセージが表示されればOKです。 - UFWのステータスを確認し、ルールが正しく追加されたか確認します。 Bash
sudo ufw status verbose出力に5902/tcp ALLOW IN Anywhereのような行があれば成功です。
Step 5: MacからPop!_OSへVNC接続
これでPop!_OS側の設定は完了です。MacからVNC接続を試みましょう。
- MacのFinderを開きます。
- 「サーバへ接続」ウィンドウを開きます。
- 画面上部のメニューバーで「移動」をクリックし、ドロップダウンメニューから「サーバへ接続...」を選択します。(または、ショートカットキー
⌘ + Kを押します)
- 画面上部のメニューバーで「移動」をクリックし、ドロップダウンメニューから「サーバへ接続...」を選択します。(または、ショートカットキー
- VNCアドレスを入力します。開いたウィンドウのアドレス欄に、以下のように入力します。
vnc://<Pop!_OSのIPアドレス>:5902例:Pop!_OSのIPアドレスが192.168.0.161の場合、vnc://192.168.0.161:5902と入力します。 - 「接続」ボタンをクリックします。
- VNCパスワードを入力します。VNCパスワードの入力を求められたら、Step 2で設定したパスワードを入力し、「サインイン」をクリックします。
これで、Macの画面にPop!_OSのXFCE4デスクトップが表示されるはずです。
トラブルシューティング:もし接続できない場合
- 「Connection refused」エラーがMac側で出る場合:
- 最も可能性が高いのは、Step 2でVNCサーバーを起動する際に
-localhost noオプションを付け忘れたことです。vncserver -kill :2でサーバーを停止し、vncserver -localhost no :2で再起動してください。 - Pop!_OSのターミナルで
nc -vz 127.0.0.1 5902とnc -vz <Pop!_OSのIPアドレス> 5902を実行し、両方でsucceeded!となるか確認してください。後者がConnection refusedなら上記-localhost noが原因です。
- 最も可能性が高いのは、Step 2でVNCサーバーを起動する際に
- 画面が真っ黒/灰色、またはログイン画面が表示されない場合:
- Step 3の
~/.vnc/xstartupファイルの内容が間違っている可能性が高いです。特にstartxfce4が正しく記述されているか、余計な行が残っていないか再確認してください。
- Step 3の
- VNCサーバーが起動していないか確認:
- Pop!_OSのターミナルで
ps aux | grep vncを実行し、Xtigervncのプロセスが動いているか確認します。表示されない場合は、vncserver -localhost no :2で再度起動してください。
- Pop!_OSのターミナルで
- IPアドレスの入力ミス:
- Macの接続ダイアログで、Pop!_OSのIPアドレスを正確に入力しているか再確認してください。Pop!_OS側で
ip aコマンドで確認できます。
- Macの接続ダイアログで、Pop!_OSのIPアドレスを正確に入力しているか再確認してください。Pop!_OS側で
自動起動
シングルユーザの場合。
/etc/system/systemd/vncserver.serviceに以下を記述(sudo権限でemacsなりnanoなりviなり好きなので)。
[Unit]
Description=Remote desktop service (VNC)
After=network.target
[Service]
Type=forking
User=ユーザ
Group=グループ
WorkingDirectory=/home/ユーザ
ExecStart=/usr/bin/vncserver -localhost no :2
ExecStop=/usr/bin/vncserver -kill :2
[Install]
WantedBy=multi-user.targetユーザとグループのところを置き換える。ExecStartのところが起動コマンド。マルチユーザならUserのところは置き換えられるように %i とかにする必要あり。
sudo systemctl daemon-reload
sudo systemctl enable vncserver.service
sudo systemctl start vncserver.serviceマルチユーザのときは vncserver@<user>.serviceとすると@以降が%iで置き換わるはず(試してない)。
systemd service file for running a vncserver (e.g. tightvncserver)にあるように事故防止で ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'は入れておいてもいいかも。一人用だから入れてないけど。