Google Compute Engine に Ubuntu デスクトップ環境を作ってリモート接続してみた

# はじめに

友人（[@digital24s](https://twitter.com/digital24s) さん）に誘われて、Google Compute Engine に Windows 環境を作ってリモートデスクトップ接続するまで、一緒にトライしました。

[Google Compute Engine に Windows 環境を作ってリモートデスクトップ接続してみた #GoogleCloud - Qiita](https://qiita.com/tinymouse/items/2d357bc4fc2d8ad7fbc6)

Winodws 環境でなく Ubuntu デスクトップ環境を作ってみることにしました。

# Google Compute Engine に Ubuntu デスクトップ環境を作ってリモート接続する

以下の記事を参考にしました。

[Google Compute Engine に Windows 環境を作ってリモートデスクトップ接続してみた #GoogleCloud - Qiita](https://qiita.com/tinymouse/items/2d357bc4fc2d8ad7fbc6)

[Ubuntu server 20.04.2 をリモートデスクトップ専用機としてセットアップする。 #ubuntu20.04 - Qiita](https://qiita.com/Limitex/items/9fb5a042f2b4fccf2d4e)

## プロジェクトを作成する

### プロジェクトを作成する

以下の項目を指定してプロジェクトを作成します。

* 名前：任意
* ID：任意

### 「Compute Engine API」を有効にする

作成したプロジェクトを選択します。
そして「Compute Engine API」を有効にしておきます。

## VPC を作成する

### VPC を作成する

「Compute Engine API」を有効にすると、プロジェクトに VPC「default」が自動で作成されます。
今回はこれを使用します。

### サブネットを作成する

VPC「default」には、サブネット「default」が自動で作成されています。これを使用することにします。

### インターネットゲートウェイとルートテーブルを作成する

EC2 ではインターネットゲートウェイを作成して、仮想ネットワーク内宛「以外」の通信をインターネットゲートウェイに向くよう設定するルートテーブルを作成しました。
GCP では、デフォルトのインターネットゲートウェイとルートテーブルが作成されています。これを使用します。

参考：[Google CloudのVPCを基礎から始める](https://zenn.dev/google_cloud_jp/articles/google-cloud-vpc-101)

## VM インスタンスを作成する

### 仮想マシンの設定する

以下の項目を指定して VM インスタンスを作成します。

* 名前：任意
* リージョン：選択
* ゾーン：選択

リージョンは、自分に近いところにします。リモートデスクトップ接続して操作したときの反応に影響します。日本国内が望ましいのですが、単価が高いのが悩むところです。

### マシンの構成を設定する

以下の項目を設定します。

* ファミリー：汎用
* シリーズ：E2
* タイプ：e2-standard-2 (2 CPU 8 GB メモリ)

タイプつまり性能は、自分の用途に合わせて決めます。

* 可用性ポリシー：標準

可用性ポリシーは、サーバ機のように常時安定稼動が必要ないなら「スポット」もいいでしょう。単価が安くできます。

### ブートディスクの設定する

「変更」実行して以下の項目を設定します。

* OS：Ubuntu
* バージョン：22.04 LTS
* ブートディスクの種類：標準永続ディスク
* サイズ：20GB

バージョン、ディスクの種類とサイズは、自分の用途に合わせて決めます。

残りの項目は既定のままで進めます。

### ファイアウォールの設定する

以下の項目を設定します。設定に従ってファイアウォールが作成されます。

* HTTP トラフィックを許可する
* HTTPS トラフィックを許可する

### ネットワークの設定する

仮想マシンのネットワークの設定します。

* ネットワーク：「default」が選択されている
* サブネットワーク：「default」が選択されている

参考：[VPC ネットワーキングと Google Compute Engine を使ってみる | Google Cloud Skills Boost](https://www.cloudskillsboost.google/focuses/41750?locale=ja&parent=catalog)

残りの項目は既定のままで進めます。

### IP アドレスの設定する

予め IP アドレスを作成しておいて仮想マシンに適用することもできますが、仮想マシンの設定の時点で以下の設定すると IP が作成されます。

* プライマリ内部 IPv4 アドレス：エフェメラル（自動）
* 外部 IPv4 アドレス：静的 IP アドレスを予約

以下の項目を指定して静的 IP アドレスを作成します。

* 名前：任意

参考：[GCP Compute Engineで静的IPアドレスを割り当てる | yusuke.blog](https://yusuke.blog/2017/12/16/1993)

静的アドレスを設定すると、維持費用が掛かります。費用を抑えるために、動的＝エフェメラルの設定にして、起動した時点で管理画面でアドレスを確認して、利用する運用でも構いません。

### その他の設定する

その他の設定は既定のままで進めます。

### VM インスタンスを起動する

作成した VM インスタンスを選択して「起動」実行します。

## SSH 接続する

### 接続の設定を確認する

起動している VM インスタンスを選択して「接続」の設定します。
以下のいずれかの方法で接続できます。

* Google Cloud 管理画面の「SSH」ボタンつまり「ブラウザウィンドウで開く」を使う
* ターミナルソフトで「gcloud」コマンドを使う
* SSH クライアントソフトで接続する

参考：[詳解 Google Compute Engineへの接続](https://zenn.dev/google_cloud_jp/articles/connecting-to-google-compute-engine)

このうち「ブラウザウィンドウで開く」ことにします。

### SSH 接続する

Google Cloud 管理画面の「SSH」ボタン押下あるは「接続」の選択メニューで「ブラウザウィンドウで開く」を実行します。
Google Cloud が、ブラウザウィンドウでターミナル画面を用意して、自動で SSH 認証鍵を作成して登録して、Google アカウントと同じ名前のユーザでログインまでしてくれます。

## デスクトップ環境をインストールする

一般的な Linux ディストリビューションは、いわゆるデスクトップ環境が導入されています。ところが、Google Compute Engine サービスで用意されている Linux マシンは、デスクトップ環境が導入されていません。

作成した仮想マシンにデスクトップ環境をインストールします。

参考：[AWS EC2でデスクトップ環境をつくる ～ Ubuntu Server 18.04 LTS GNOME編～ #AWS - Qiita](
https://qiita.com/osugizmo/items/21578272ae2db05ab001)
参考：[Azure仮想マシンでUbuntu Server 22.04 にDesktop を導入してRDP接続する - 技術的な何か。](
https://level69.net/archives/33102)
参考：[Google Compute Engine でUbuntu Desktop (KDE)環境を構築してリモートデスクトップから接続する · GitHub](https://gist.github.com/sanaehirotaka/69da7a7dcc2029a287abc9843fd8cba8)

### Ubuntu Desktop をインストールする

仮想マシンで以下のコマンド入力します。

```console
$ sudo apt -y update
$ sudo apt -y upgrade
```

これを忘れて VM インスタンスの apt の環境のまま作業したら、上手くいきませんでした。↑

`ubuntu-desktop` をインストールします。↓

```console
$ sudo apt -y install ubuntu-desktop
```

## リモートデスクトップ接続する①

構築したデスクトップ環境にリモートデスクトップ接続します。

### xrdp をインストールする

Windows と同様に RDP で接続したいので、`xrdp` をインストールして有効化します。

```console
$ sudo apt -y install xrdp
$ sudo systemctl enable xrdp
```

### 接続するユーザとパスワードを設定する

Google Compute Engine の Windows 環境は Google Cloud の管理画面でユーザとパスワードを設定できましたが、Linux 環境は仮想マシン上で設定します。

```console
$ sudo adduser (任意のユーザ名)
(パスワードなど入力)
$ sudo gpasswd -a (上記のユーザ名) sudo
```

### リモートデスクトップ接続する

接続元の環境で RDP クライアントツール（Windows なら「リモートデスクトップ接続」）を起動します。
以下の情報を使って接続してログインします。

* 接続先：前述の設定画面で取得した IP アドレス
* ユーザ名：前述の設定画面で設定したユーザ名
* パスワード：前述の設定画面で設定したパスワード

## リモートデスクトップ接続する②

外部 IP アドレスを「静的」に設定したときはいいのですが、「動的」に設定したときは、起動するたびに IP アドレスが変更されてリモートデスクトップ接続するとき不便です。代わりに Chrome Remote Desktop を使いたいと思います。

[Compute Engine で Linux 向け Chrome リモート デスクトップをセットアップする  |  Cloud Architecture Center  |  Google Cloud](https://cloud.google.com/architecture/chrome-desktop-remote-on-compute-engine?hl=ja)

### Chrome Remote Desktop をインストールする

まず、接続先の Linux 環境の準備します。

①Chrome をインストールしておきます。

②Chrome Remote Desktop をインストールします。

③SSH 接続の準備します。
Google Compute Engine で作成した Linux 環境は、SSH 接続するための準備が済んでいます。

### Chrome Remote Desktop で接続する

④接続元の端末で、Chrome Remote Desktop のウェブサイトの「SSH 経由でセットアップする」を開きます。
表示されるコマンドをコピーします。

⑤接続先の Linux 環境で、上記のコマンドを実行します。
ここで PIN コードを設定します。

⑥接続元の端末で、Chrome を起動して Chrome Remote Desktop のウェブサイトの「リモートアクセス」を開きます。
上記で設定した接続先が一覧に追加されています。

⑦接続先を選択して、あらかじめ設定した PIN コードを入力します。

## キーボードレイアウトや日本語入力環境など設定する

### キーボードレイアウトを設定する

[Ubuntu で日本語キーボードレイアウト #Ubuntu - Qiita](https://qiita.com/vochicong/items/6452ac54bde56b0e0bb3)

### デスクトップを日本語環境にする

[Ubuntu20.04の日本語化 #Ubuntu - Qiita](https://qiita.com/yamagarsan/items/563a844993d32460bd51)

### 日本語入力を有効にする

[Ubuntu 20.04での日本語入力の設定方法｜k_mitsunami](https://note.com/k_mitsunami/n/n2ce7c5cba4ff)