macOSの画面共有 (vnc) でUbuntu Desktopを使う

DIYする

Ubuntu DesktopでホームサーバPCを作り、Macから画面共有で使いたいと思い、手元の古い小型コンピュータにUbuntu Desktop 22.04.3をインストールしました。ところが、ディストリビューションの構成では、ログアウト時に画面共有できないことがわかました。そこで、別のディスプレイマネージャーとvncサーバをインストールしました。

Ubuntu Desktop をインストール

ホームサーバーとして、デスクトップUIのLinuxを、ディスプレイ無し(ヘッドレス)で使いたいと思いました。そこで、Raspberry Piでも使っているDebian系の主流ディストリビューションの、Ubuntu Desktop 22.04.3 LTS を使うことにしました。

インストール先のコンピュータは、大昔に買ってお蔵入りになっていた古い小型コンピュータ Intel NUCです。Haswell世代のCore i5-4250Uを搭載してます。2.5インチHDD/SSDも内蔵できるので、大容量のストレージが必要な用途にも対応できます。これにディスプレイもキーボードも接続しないで、サーバーとして稼働させる予定です。

Ubuntuのサイトからisoファイルをダウンロードして、起動可能なUSBメモリを作り、内蔵SSDをフォーマットしてインストールしました。オフィスアプリ、メディア再生アプリ、ゲーム類は不要なので、インストール時には最小構成メニューを選択しました。

sshが使えない

インストールしてすぐ気づいたことは、ssh接続できないことです。sshdがインストールされていないようです。

$ systemctl status sshd
Unit sshd.service could not be found.

そこでaptでインストールしました。これでsystemctlの設定もやってくれました。

$ sudo apt update
$ sudo apt install openssh-server

Linuxってネットワーク運用するエキスパートが使うOSというイメージがあったけど、GUIで4クリックするだけでsshdが動作するmacOSの方が、リモート操作に向いてるのかも。

画面共有が不完全

vncに関しては、デスクトップ画面のSettingsの中にSharingという項目があり、Remote DesktopをOn/Offするスイッチがありました。でも、macOSと同じくらい簡単そうと思ったのはぬか喜びでした。

このvncは、ユーザがログインしている状態でしか使えません。ログアウトすると接続できなくなります。通常の運用では、マシンの電源を入れた直後も、使用不可です。ヘッドレスで使用するにはとても不便です。こちらの解説によると、

ubuntu 20 vnc connect after logout not working | Inner Mind Factory

Ubuntu 18.04からディスプレイマネージャーが、LightDMからGDM3に変更されて、(ログアウト時に表示される)ログイン画面へのvnc接続ができなくなったとのことです。一番簡単な対応策は、ディスプレイマネージャーをLightDMに戻すことらしいです。また、LightDMに組み合わせるvncサーバーは、x11vncが良いらしいです。

以下のサイトにも、x11vncとLightDMの使い方が説明されていました。

x11vnc設定手順

こちらを参考に、

  1. LightDMに戻して
  2. x11vncをインストール

しました。

使えるvncに入れ替える

まずは、対象のコンピュータ(ここではIntel NUC)に、ディスプレイとキーボード、マウスを接続します。次に、Ubuntu Desktop 22.04.3 LTS インストーラーのUSBメモリを使って起動し、Ubuntuをインストールします。インストール終了した後、ヘッドレスサーバーとして使えるvncに入れ替える手順を以下に示します。

sshdをインストールする

まずはsshdが無いので用意します。UbuntuデスクトップからTerminalを開いて、aptでインストールします。

$ sudo apt update
$ sudo apt install openssh-server

これで他のマシンからssh接続できるはずです。Ubuntuマシンに、nucという名前をつけたので、Macのターミナルから以下のようにssh接続できました。

% ssh nuc.local

ssh接続できれば、Ubuntuマシンに接続した入出力デバイスは不要です。ここから先は、Macからのssh操作で作業を進めました。

LightDMに切り替える

まずは、ログアウト状態でvncできない現状のディスプレイマネージャーから、1世代前のディスプレイマネージャーであるLightDMに切り替えます。aptでインストールします。

$ sudo apt install lightdm

作業途中で、「ディスプレイマネージャーが複数個インストールされているので、どちらかを選んでください」という内容のメッセージ画面が出ます。

次の画面で、現在のデフォルト設定であるgdm3から、新しくインストールしたlightdmに切り替え、Okを押します。

ここで再起動すればLightDMに切り替わりますが、後回しでも良いです。ここでは、再起動しないで、vncのインストールに進みました。

x11vncをインストールする

vncサーバープログラムであるx11vncをaptでインストールします。

$ sudo apt install x11vnc

次にvnc接続用のパスワードを設定します。

$ sudo x11vnc -storepasswd /etc/.vncpasswd
Enter VNC password: 
Verify password:    
Write password to /etc/.vncpasswd?  [y]/n 
Password written to: /etc/.vncpasswd

vncを自動起動させるためのサービスファイルを設定します。以下ではエディタとしてviを使ってますが、他の何でも良いです。

$ sudo vi /etc/systemd/system/x11vnc.service

内容は先に紹介したサイトからコピペして使わせていただきました。以下です。

[Unit]
Description=x11vnc (Remote access)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -display :0 -rfbauth /etc/.vncpasswd -rfbport 5900 -forever -loop -noxdamage -repeat -shared
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=graphical.target

次に、systemctlの設定をして、一旦、リスタートします。

$ sudo systemctl daemon-reload
$ sudo systemctl enable x11vnc.service 
$ sudo shutdown -r now

これでディスプレイマネージャーがLightDMに切り替わり、x11vncも起動します。

macOSから画面共有

以上で、macOSの画面共有アプリから接続できます。コンピュータにnucという名前をつけたので、nuc.localというアドレスと、先ほど設定したパスワードを使用します。

以下のように接続できました(画面画素数を小さく変更してあります)。

ダミーディスプレイ

ただし、この状態でディスプレイを取り外すと画面共有が動作しなくなります。x11vncは、ウィンドウマネージャーがディスプレイバッファに描画した内容を送信しています。画面が取り外されると、描画も中断されてしまうためです。

ソフトウェア的にダミーのディスプレイを設定する方法もあるようですが、ここでは単純にダミーHDMIプラグを使いました。以前にたくさん購入して在庫があったからです。ダミープラグは、AliExpressだと送料込みで244円くらいです

Amazonだと送料込み600円程度です。またNUCの出力端子がmini HDMIだったので、変換ケーブルも用意しました。mini HDMIって、micro HDMIに比べると中途半端なサイズで、残念な規格ですね。こんな感じのものを、mini HDMIポートに接続します。

追記:それでもヘッドレスは困難

これでUbuntu Desktopをヘッドレスでしばらく使ってみました。すると、「デスクトップをログアウトした状態でしばらく放置するとサスペンド状態になる」ことがわかりました。サスペンド状態では、コンピュータ本体の電源LEDが点滅して、CPUが停止します。こうなるとvncを含めたデーモン類も動作しなくなります。ssh接続もできません。コンピュータの電源ボタンを押すと復帰します。設定では、デフォルトでAutomatic suspendがoffになっているのですが、それでもサスペンドします。他に設定方法があるのかもしれませんが、不明でした。

デスクトップにログインしたままならば、サスペンドにはならない様子です。でも、瞬間停電などから復帰したら、ログアウト状態になるので、そこでサスペンドになると電源スイッチを物理的に押すしか復帰できません。

ということで、Ubuntu Desktopはサーバーとして使うにはいろいろ厄介らしいことがわかりました。サーバーには、名前通りUbuntu Serverを使うべきなようです。

まとめ

Ubuntu Desktop 22.04.3 LTS をインストールしたマシンを、ヘッドレスのサーバーとして使えるよう画面共有の設定をしました。ディストリビューションに組み込まれたディスプレイマネージャとvpnサーバの組み合わせでは、ログアウト時に接続できなかったので、これらを入れ替えました。その結果、macOSの「画面共有」アプリから接続できました。

追記:ただ、サスペンド状態に入ってしまうこともあるので、アクセスの面倒な場所に設置するサーバー用途には、Ubuntu Desktopは向いていないようでした。

コメント

  1. Haru より:

    大変困っていたところこのサイトにたどり着き,救われました。
    同じことで悩む「患者」さんは多そうです。
    大変有益なページをどうもありがとうございます。

タイトルとURLをコピーしました