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 5900tcp
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円程度で購入できますので、これを使用するのもよいかもしれません。今回は以下の商品で動作することを確認しました。