Amazon Linux2(CentOS)をGUI化する

# Amazon Linux2(CentOS)をGUI化する
今回はAmazon Linux2(CentOS 7)で、Mateをインストールし、GUI化してみます。ただGUI化するだけでは味気ないので、Google Chromeをインストールしてネットサーフィンできるようにしたいと思います。
またコマンド操作ではなくWindowsっぽくGoogle chromeでインターネットへアクセスしてWebサイトを閲覧できるようにしていきたいと思います。

# 今回のゴール
以下の画像みたいに利用できるようにする。
![yahooトップ画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/371b48eb-e824-776a-6146-2d9c3f46c065.png)

# 前提環境
 - 利用するEC2 AMIはAmazon Linux2 (CentOS) 
 - EC2はクライアント端末（自宅のWindows 10）からSSHおよびVNCでアクセスできるようにセキュリティグループを設定
 - VNCソフトはtigerVNCを利用
 - デスクトップ環境はMATE（読み：マテ）をインストールして利用
 - VNCクライアントにUltraVNC viewerをインストールする
 - VNCログインに利用するユーザはec2-user
 
# 手順
1. EC2 をデプロイし、SSHで接続できる環境を構築する
2. EC2 にGUI化ソフト(MATE),tigerVNC(VNCソフト),Google chromeのパッケージをインストールする
3. クライアント端末にUltra VNC viewer をインストールする
4. クライアント端末からEC2にVNC接続を行う

# 実際にやってみた
1.については詳しい記事がたくさんありますので、割愛します。それでは2.から始めていきます。
まずSSHでEC2に接続して、ユーザはec2-userで進めていきます。

    # MATEパッケージをインストールします。
    sudo amazon-linux-extras install mate-desktop1.x
    
    # MATE をデフォルトのデスクトップとして定義します。またすべてのユーザーに対して MATE を定義します。
    sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'
    
    # TigerVNC をインストールします。
    sudo yum install tigervnc-server
    
    # ec2-userに対して6～8 文字の VNC 固有のパスワードを設定します。
    vncpasswd
    表示専用のパスワードを入力するかどうかを確認するメッセージが表示されたら、「n」を押します。
    
    # 表示番号 1 で VNC サーバーを起動します。
    vncserver :1 
    
    # デフォルトで作成されているvncserverのsystemd ユニットをコピーして、別に新しい systemd ユニットを作成します。
    sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
    
    # 新しいユニット内のすべての <USER>という記載を 実際に利用するユーザ(ec2-user) に置き換えます。
    sudo sed -i 's/<USER>/ec2-user/' /etc/systemd/system/vncserver@.service
    
    # systemd マネージャー設定を再ロードします。
    sudo systemctl daemon-reload
    
    # サービスを有効にします。
    sudo systemctl enable vncserver@:1
    
    #サービスを起動します。
    sudo systemctl start vncserver@:1
    
これでGUI化の設定は環境です。ただこのままだと英語表記だし、Google chromeがインストールされていないのでデスクトップ環境の日本語化とGoogle chromeのインストールを行います。

    # まずデスクトップ環境の日本語化設定を行います。日本語入ができるようにIME ibus と日本語のフォントのgoogle-noto-sans-japanese-fontsをインストールします。

    sudo yum install ibus-kkc
    sudo yum install google-noto-sans-japanese-fonts    
    
    # ibusの設定をbashrcに記載します。
    vi ~/.bashrc
    
    # ファイルの最後に以下を追加して、ファイルを保存します。
    export GTK_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    export QT_IM_MODULE=ibus
    ibus-daemon -drx
    
    # ロケールの設定を変更します。
    sudo localectl set-locale LANG=ja_JP.UTF-8
    
    # 設定変更反映のため再起動させます。
    reboot

これで日本語化は完了です。続いてGoogle Chrome パッケージをインストールしていきます。
ここから先はroot権限のあるユーザでコマンドを実行してください。

    #リポジトリファイルを作成します。 
    sudo vi /etc/yum.repos.d/google-chrome.repo
    
    # ファイル内容は以下を記述します。 
    [google-chrome]
    name=google-chrome
    baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
    enabled=1
    gpgcheck=1
    gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
    
    # yum をアップデートします
    sudo yum update
    
    # パッケージをインストールしていきます。
    sudo yum install google-chrome-stable
    
    # 正しくインストールできたか確認します。
    google-chrome --version
    バージョンが表示されればOKです。

これでEC2側で行う設定は全て完了です。あとはクライアント端末にVNC viewerをインストールして、アクセスしてみましょう。

以下サイトからUltraVNC viewerをインストールしてします。
[窓の社](https://forest.watch.impress.co.jp/library/software/ultravnc/)

Ultra VNC viewerを起動し
["ELastic IPアドレス":5901] という形式で入力し、登録したPWを入力します。
![Veiwer_ログイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/bcf2c6ae-7084-a40b-8b03-83850e895379.png)

![vnc_ログイン後画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/40d2c791-bb60-e3ce-ba64-0147274c7ed6.png)
こんな感じで表示されればOKです。
次にGoogle Chromeを起動します。
![google_アクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/439ff883-18bf-4590-05d2-26cd162949bf.png)

無事ネットサーフィンできそうです。
これで設定は完了です。

# 最後に
メモリ1GBでもサクサク動きます（笑）。Linuxってやっぱり軽いですね！
諸事情あって、直接PCからネットワークサーフィンできないときとかに便利かもです。


# 2022年7月追記
VNC Viewerでログイン後にGoogle Chromeが起動しない場合、Google Chromeをroot権限のユーザで起動している可能性があります。
その場合以下のようなメッセージが表示されます。
   
    [root@ip-xx-xx-xx-xx ec2-user]# google-chrome
    [3772:3772:0715/003400.717493:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/6a631201-aae4-48e0-4858-8c0b8b3ac6bd.png)

上記の画像にようにずっと起動を待ってもなにも起きないです。

rootでもgoogle chromeを起動できるようにオプションをつけて、起動させてやる必要があります。
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/f3ea4a8e-f15b-75bb-13e6-1f1163573dd6.png)

やり方としてはVNC Viewerでログイン後に「システムツール」から「ＭＡＴＥ端末」を開いて、

    google-chrome --no-sandbox


これでGoogle chromeがrootでも起動するようになります。

MATE端末のコンソール画面にはエラーっぽいメッセージが出るのですが、Proxyが云々という内容なので無視しています。

## 参考にしたWebサイト
[Amazon Linux2 にGUIデスクトップ環境(MATE)をインストールする手順](https://urashita.com/archives/31409#MATE-2)
[CentOS7×Chromeでスクレイピング環境を構築するチュートリアル](https://qiita.com/sakuraya/items/8d415e154ce60a83d63d)
[AWS公式](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-2-install-gui/)
[CentOS7・CentOS8 Google Chromeをインストールする](https://rin-ka.net/centos-google-chrome-install/)