Almalinux9に Chrome Remote Desktop をInstallする

# はじめに
almalinux9にChrome Remote Desktopをインストールすることは公式ではなさそうである．
しかし，
> [CentOS Stream8とMIRACLE LINUX 8.4にChrome Remote Desktopで接続する](https://qiita.com/revsystem/items/b377932cfe4a0cd5f158)
> [OpenSUSE で chrome-remote-desktop host を自動起動](https://haruka0000.hatenablog.com/entry/2021/04/18/224846)

を参考にすることで何とかなりそうである．

しかしながら，
(1) AlmalinuxのようなRedHat系ではGoogleからrpmパッケージが存在しない．
(2) このためAlienを用いてdebパッケージをrpmに変換する必要がある．
(3) Alienがなければ別途インストールしなければならない．
(4) Alienのインストールにepelが必要である．
(5) powertoolsの代わりにcrbを用いる．
(6) rpmによるインストールではこまごまとした注意がいる．
(7) GUIに関わる準備がない場合は準備が必要である．
という問題があり，インストールの作業は簡単ではなかった．

したがって，この場合であれば，
(1)chrome-remote-desktopパッケージにrpmパッケージがないため，Alienを用いて，debパッケージをrpmパッケージに変換する
(2)グラフィックをxorg-x11-server-Xvfbとし，vncやリモートデスクトップをインストールしたことがなければtigervncをインストールする．
(3)Chrome リモートデスクトップセッションを設定
の順で行うことによって，almalinuxでもChrome Remote Desktopが動作するようになった（私の場合）．

# 前提条件
一般ユーザーはsudo権限を持っていること．
vncやリモートデスクトップのインストール有無は問わない．

# EPELリポジトリの有効化

### EPELリポジトリの有効化
（参考：[初期設定 : リポジトリを追加する](https://www.server-world.info/query?os=AlmaLinux_9&p=initial_conf&f=7)）
```
# dnf -y install epel-release

# dnf -y install epel-next-release
```
念のため，[priority=*] を追記することで優先度を指定可としておく
```
$ sudo vi /etc/yum.repos.d/epel.repo
```
```/etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirr
ror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$$
basearch&infra=$infra&content=$contentdir
# [enabled=1] = リポジトリ有効, [enabled=0] = リポジトリ無効
enabled=1
priority=10 #この行を追加
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever

# 以下省略
.....
.....

```
* [priority=*] を追記することで優先度を指定可
* 1-99 を指定可, 1 が最優先, 未指定の場合のデフォルトは 99
# Alienのインストール
まず，Alienのインストールに先立って，crbを有効化する
```
$ sudo dnf config-manager --set-enabled crb
```
:::note warn
Almalinuxではpowertoolsではなくcrbがその役目を果たすようだ（[参考](https://qiita.com/lasxle/items/1bbacec71293eaf5f4a0)）．
:::
つぎに，いよいよAlienのインストールを行う．
```
$ sudo dnf install alien
```

# Chrome Remote Desktopをインストール

### rpmパッケージの用意
ここで，Chrome Remote Desktopをインストールする場合，RedHat系用のパッケージはないため，まずは，Ubuntu用のパッケージをダウンロードする．
```
$ wget https://github.com/frealgagu/archlinux.chrome-remote-desktop/releases/download/96.0.4664.9-2/chrome-remote-desktop-96.0.4664.9.deb
```
:::note warn
ダウンロードするdebパッケージのバージョンによって，インストールがうまくいったりいかなかったりということがあるようだ（[参考](https://twitter.com/nyanotech/status/1498432553581047815?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1498432553581047815%7Ctwgr%5Ec6fe677e9d6a397e18cee865f390d2b280b3e013%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fqiita.com%2Fembed-contents%2Ftweetqiita-embed-content__58040e061beb8836cf24e2d5d957aa9e)）．
:::
ダウンロードしたものはdebパッケージなので，それをrpmパッケージに変換する．
```
$ sudo alien -r --scripts ./chrome-remote-desktop-96.0.4664.9.deb
```
### rpmパッケージでのインストール
rpmパッケージが出来上がったので，それを利用してインストールを行う．ただし，競合などの発生があるため，--replacefilesオプションを付ける．
```
$ sudo rpm -ivh --replacefiles ./chrome-remote-desktop-96.0.4664.9-2.x86_64.rpm
```
yumコマンドで他に必要なパッケージをインストールする．
```
$ sudo yum install libX11 libXdamage libXext libXfixes libXtst cairo libdrm mesa-libgbm gtk3 pango libxcb
```
### GUI環境の整備
xorg-x11-server-Xvfbをインストールする．
```
$ sudo dnf install xorg-x11-server-Xvfb -y
```
もし，他のリモートデスクトップやvncをインストールしていない場合は，一例としてtigervncをインストールする．
```
$ sudo dnf -y install tigervnc-server
```
:::note warn
もし，tigervnc-serverなどのインストールがない状態で，この操作をスキップすると，
```
$ systemctl status chrome-remote-desktop@${USER}
```
とした場合に，たとえ， Active: active (running) となっていても「ホストの選択が出来ない」事象が発生するようだ．なお，Chrome Remote Desktopだけ動かしたい場合にであれば，上記のインストールだけで良さそうである．
:::
### デスクトップマネージャ GDMを停止
デスクトップマネージャ GDMが起動していると，Chrome Remote Desktopで接続した際にブラックアウトを起こすことがある（画面が真っ暗になる）ためGDMを停止し，無効化する．
```
$ sudo systemctl disable gdm
$ sudo systemctl stop gdm
```
:::note warn
DGMを停止すると，ローカルでのGUIログインができなくなる．もし，ローカルでGUIログインが必要な場合はGDMを起動する必要がある．
:::

# Gnome を使用するように Chrome リモート デスクトップ セッションを設定

### 設定ファイルの生成
```
$ sudo bash -c 'echo "exec /usr/bin/gnome-session" > /etc/chrome-remote-desktop-session'
```
または
```
$ bash -c 'echo "exec /usr/bin/gnome-session" > ~/.chrome-remote-desktop-session'
```
### 解像度の設定
必要に応じて以下のような設定を行う．ここでは，DEFAULT_SIZES = "1600x1200,3840x2560"となるようにしている．
```
$ sudo vi  /opt/google/chrome-remote-desktop/chrome-remote-desktop
```
ファイル内のDEFAULT_SIZES =と書かれている行を探し，その行を以下のように編集する．
```"/opt/google/chrome-remote-desktop/chrome-remote-desktop"
DEFAULT_SIZES = "1600x1200,3840x2560"
```
### pam権限を変更
```
$ sudo vi /etc/pam.d/chrome-remote-desktop
```
開いたファイル内に書かれている行を全てコメントアウトした上で，下部5行を追加する．
```/etc/pam.d/chrome-remote-desktop
#@include common-auth
#@include common-account
#@include common-password
#session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
#session required pam_limits.so
#@include common-session
#session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
#session required pam_env.so readenv=1
#session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale

auth required pam_permit.so
account required pam_permit.so
password required pam_permit.so
session required pam_permit.so
session optional pam_umask.so
```

# リモート接続の設定

### セットアップ用コマンドの取得
まず，以下(a)，(b)のいずれかを行う．
(a) 接続する側のブラウザで https://remotedesktop.google.com/headless を開く．
(b) Chrome Remote Desktopアプリを起動しセットアップ用コマンドを取得する．

この画面において，「開始」をクリックする．
![スクリーンショット 2023-12-08 104404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/2a881f31-3b7e-e29e-6a42-2e95026de57d.png)

この画面が現れたら，「次へ」をクリックする．
![スクリーンショット 2023-12-08 104425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/94c92361-b791-cccf-5b6a-1cf843bd20ad.png)

:::note warn
既にこれまでの過程で「リモートのパソコンにインストール」は終わっている．
:::
この画面が現れたら「承認」をクリックする．
![スクリーンショット 2023-12-08 104442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/a0202bb4-aa88-109e-42bb-9616f57a307b.png)
この画面が現れたら，Debian Linuxの右側にあるコピーアイコン（赤で囲った部分）をクリックする．それによってセットアップ用コマンドの取得が出来たことになる．
![スクリーンショット 2023-12-08 104507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/61b4ef3e-534a-d895-6e88-aa8caf416748.png)

:::note
このコマンドは数分間有効で，1回限りの使用である．再度取得する場合は「最初からやり直す」ボタンをクリックして，上記「セットアップ用コマンドの取得」に戻ってやり直す．
:::
コピーしたコマンドをAlmalinuxの一般ユーザーで実行する．（先ほど取得したセットアップコマンドを貼り付けてEnterキーを押下すれば良い）
```
$ DISPLAY= /opt/google/chrome-remote-desktop/start-host --code="4/0AX4XfWxxxxxxxxxxxxxxxxxxxx-CNO
```
6桁のPINコード（自分で決めること）を設定する．まず，6桁のPINコード，次に，もう一度6桁のPINコード，そして，sudoに必要なパスワードである．
```
Enter a PIN of at least six digits: 
Enter the same PIN again: 
[sudo] パスワード:
```
statusを確認し，Active: active (running)となっていれば起動成功である．
```
systemctl status chrome-remote-desktop@${USER}
```

### 接続確認
https://remotedesktop.google.com/access を開き，ホストを選択する．
![スクリーンショット 2023-12-08 112857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/82c38fa2-f805-6697-4284-8bf8ceb4970e.png)

:::note
このとき，Active: active (running)となっていても，ホストが選択可能でない場合は，上記の「Xvfb」や「tigervnc」などのインストールを確認する必要がある
:::
ここで，さきほど設定した6桁のPINコードを，薄い文字で「PINを入力」と書かれた部分に入力し，右向きの矢印をクリックする．
![スクリーンショット 2023-12-08 112753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/5b2ec4bf-a44f-ca7a-5a5f-eba8e64f6a66.png)
このようにデスクトップ画面が表示されれば接続成功である．
![スクリーンショット 2023-12-08 113644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/c9729c30-ab9f-de61-adee-cb273c1d5732.png)

# おわりに
ここでは Almalinux9にChrome Remote Desktopをインストールした．
(1) AlmalinuxのようなRedHat系ではGoogleからrpmパッケージが存在しない．
(2) このためAlienを用いてdebパッケージをrpmに変換する必要がある．
(3) Alienがなければ別途インストールしなければならない．
(4) Alienのインストールにepelが必要である．
(5) powertoolsの代わりにcrbを用いる．
(6) rpmによるインストールではこまごまとした注意がいる．
(7) GUIに関わる準備がない場合は準備が必要である． 
といった苦労があったので，粗削りではあるが，ここに記した．

# 参考資料
(1) [CentOS Stream8とMIRACLE LINUX 8.4にChrome Remote Desktopで接続する](https://qiita.com/revsystem/items/b377932cfe4a0cd5f158)
(2) [OpenSUSE で chrome-remote-desktop host を自動起動](https://haruka0000.hatenablog.com/entry/2021/04/18/224846)
(3) [初期設定 : リポジトリを追加する](https://www.server-world.info/query?os=AlmaLinux_9&p=initial_conf&f=7)
(4) [AlmaLinux9でPowerToolsを使う方法](https://qiita.com/lasxle/items/1bbacec71293eaf5f4a0)

以上