🐈

Ubuntu22.04へのVNC接続でGNOMEデスクトップ環境を使う

に公開

Ubuntu22.04でVNCサーバーを立ち上げて、クライアントからGNOMEデスクトップ環境を使う方法です。
chatGPT(GPT-4o)とGemini2.5上に調べてもらったのですが、かなり苦戦したので実行した内容を 覚書 として簡単にまとめます。

苦労したポイント

  • 22.04ではTigerVNCでGNOMEデスクトップを使うのはうまくいかず断念
  • x11vncを使って、GUIデスクトップをリモート表示する方向で実現する
  • Ubuntuにはモニタ接続が必須

開発環境

  • ホスト: Ubuntu 22.04.5 LTS

VNCサーバーの設定

x11vncは、現在稼働しているXセッションを共有するため、ログイン済みのアクティブなデスクトップに接続する場合に有用です。
ただし、Ubuntu 22.04でデフォルトのGDM3 (GNOME Display Manager 3) とWaylandの組み合わせでは、ログイン画面の共有やユーザーセッションへの接続に課題があるので、X.orgセッションで起動する必要があります。
ここでは、Waylandを無効化し、X.orgセッションでログインしているデスクトップに接続する方法をとります。

x11vncをインストール

$ sudo apt update
$ sudo apt install x11vnc

Waylandの無効化とX.orgの使用

GDM3でWaylandを無効化し、X.orgをデフォルトにするために設定ファイル (/etc/gdm3/custom.conf) を編集します。

$ sudo vi /etc/gdm3/custom.conf

以下の行を探し、コメントアウトを解除(行頭の#を削除)します。

変更前
#WaylandEnable=false
変更後
WaylandEnable=false

パスワードを設定

$ x11vnc -storepasswd

パスワード認証を有効にしてVNCサーバーを起動

$ x11vnc -rfbauth ~/.vnc/passwd -display :0 -forever -noxdamage

ufw(Uncomplicated FireWall)の設定

デフォルトでは、**VNCのポート(5900番台)**はファイアウォールでブロックされていることが多いので、ポートを開放します。

現在のUFW状態を確認

$ sudo ufw status verbose

このとき、"Status: inactive"ならまだUFWは有効化されていません。

VNC用ポートを開ける

今回はディスプレイ:0なのでポート5900を開けます。

$ sudo ufw allow from any to any port 5900 proto tcp

UFWを有効化

$ sudo ufw enable

UFWのステータス確認

$ sudo ufw status numbered

確認結果の例。この例ではSSH接続とSambaによるファイル共有用のポートも開放しています。

状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] Samba                      ALLOW IN    Anywhere                  
[ 2] 22/tcp                     ALLOW IN    Anywhere                  
[ 3] 5901/tcp                   ALLOW IN    Anywhere                  
[ 4] 5900/tcp                   ALLOW IN    Anywhere                  
[ 5] Samba (v6)                 ALLOW IN    Anywhere (v6)             
[ 6] 22/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 7] 5901/tcp (v6)              ALLOW IN    Anywhere (v6)             
[ 8] 5900/tcp (v6)              ALLOW IN    Anywhere (v6)             

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

VNCクライアントからは、vnc://<サーバーのIPアドレス>:5900 で接続します。
(この例ではIPアドレス192.168.1.36に接続)

接続画面

ログイン時に自動起動するように設定

x11vncは、ログインして表示されているデスクトップセッション(:0)を共有するため、システム起動時ではなく、ユーザーがデスクトップにログインした際に自動起動させるのが一般的な方法です。
GNOMEデスクトップ環境では、「自動起動アプリケーション」という機能を使って、ログイン時にコマンドを実行させて自動起動させることができます。

「自動起動するアプリケーションの設定」を開く

GNOMEのアプリケーションメニューを開き、「自動起動するアプリケーションの設定(Startup Applications)」というツールを起動します。

自動起動エントリの追加

「自動起動するアプリケーションの設定」ウィンドウが開いたら、「追加」ボタンをクリックします。
新しいエントリの設定ウィンドウが表示されますので、以下の情報を入力します。

  • 名前(Name): VNCサーバーであることが分かる任意の名前をつけます。
  • コマンド(Command): ここに、x11vnc コマンドを入力します。パスワードファイルのパスはフルパスで指定しておきます。
x11vnc -rfbauth /home/<ユーザー名>/.vnc/passwd -display :0 -forever -noxdamage
  • コメント(Comment): オプションで、このエントリの説明を記述します。

入力が終わったら、「追加」ボタンをクリックします。「自動起動するアプリケーションの設定」ウィンドウに戻ったら、追加したエントリが表示されていることを確認し、ウィンドウを閉じます。設定は自動的に保存されます。

HDMIエミュレータを使用してモニターを省略

リモート接続で使用する場合は、モニターを接続せずHDMIに挿してEDIDを偽装する HDMIエミュレータ(ドングル) を使用するのが設置スペースも省略できて便利です。HDMIエミュレータは2個で600円程度で購入できますので、これを使用するのもよいかもしれません。今回は以下の商品で動作することを確認しました。

https://amzn.to/4j24rWH

作業は以上になります。お疲れ様でした。

Discussion