Linux の Google Chrome / Chromium を快適にする

## 0. ねらい
- いつでもダークモードを有効にする．
- Linux でもHWデコードをさせる．
- (2021/3/19 new!) 自動で設定を書き換える

## 1. 環境
OS: Arch Linux
CPU: Intel Core i5 10210u
GPU: Intel UHD Graphics
Google Chrome 89.0.4389.82
Chromium 89.0.4389.82 ※Google のサーバとの同期機能がなくなった
で実施した．

## 2. Google Chrome の場合

### 2.1. Google Chrome の導入
Google Chrome の導入前に起動オプションの追記を行う hooks ファイルを作成する．
(2021/3/19 追記)
山田ハヤオ氏の記事を参考にしてPacman hooks を作成した．
https://qiita.com/Hayao0819/items/3f563d357d2e41606ea9

Pacman の hooks は `/usr/share/libalpm/hooks` 下に作成する．
今回は Google Chrome の hooks なので名前は `google-chrome.hook` にする．

```:/usr/share/libalpm/hooks/google-chrome.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Path
Target = opt/google/chrome/google-chrome

[Action]
Description = Add startup option
When = PostTransaction
Exec = /usr/bin/sed -i -re 's/exec -a "\$0" "\$HERE\/chrome" "\$\@"/exec -a "\$0" "\$HERE\/chrome" "\$\@" --force-dark-mode --enable-features=WebUIDarkMode --use-gl=desktop/g' /opt/google/chrome/google-chrome
```
※注意： Target トランザクションの頭にルートを示す '/' は含めず， `/opt/google/chrome/google-chrome` といった形で指定すること．
> the installation root should **not** be included in the path.
https://man.archlinux.org/man/alpm-hooks.5 より

続いて Google Chrome のパッケージを導入する．

```bash
yay -Syu google-chrome

# yay をインストールしていない場合
sudo pacman -S base-devel git
cd /tmp/ && git clone https://aur.archlinux.org/yay-bin && cd yay-bin && makepkg -si && rm -rf /tmp/yay-bin
# をして yay をインストールしてから google-chrome のインストールを行う．
```
### 2.2. 起動オプションの追記　※上で hooks を作成した場合は不要

過去の内容
>
/opt/google/chrome/google-chrome を書き換えて起動オプションを追記する．
/opt/google/chrome/google-chrome の最終行にある

>```bash
exec -a "$0" "$HERE/chrome" "$@"
```
の最後に
`--force-dark-mode --enable-features=WebUIDarkMode --use-gl=desktop`
を追記して，

>```bash
exec -a "$0" "$HERE/chrome" "$@" --force-dark-mode --enable-features=WebUIDarkMode --use-gl=desktop
```
とする．

#### オプションの意味
- --force-dark-mode：ダークモードを有効にする．
- --enable-features=WebUIDarkMode：Google Chrome の設定画面などでもダークモードを有効にする．
- use-gl=desktop：レンダリング API を OpenGL にする．

### 2.3. Google Chrome の試験運用機能を有効にする
Google Chrome を起動し，アドレスバーに `chrome://flags` と入力する．すると，以下のような画面が現れる．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350994/506cf8ae-8bc9-cf84-3bac-8426fc90beb4.png)
ここで設定を変更できる．

#### 変更する設定

- Override software rendering list 
    - [chrome://flags/#ignore-gpu-blocklist](chrome://flags/#ignore-gpu-blocklist)
    - ソフトウェアレンダリングリストを上書きし，サポートされていないシステム構成でのGPUアクセラレーションを可能にする．※再生支援を行うために必須！
- Hardware-accelerated video decode
    - [chrome://flags/#enable-accelerated-video-decode](chrome://flags/#enable-accelerated-video-decode)
    - ビデオのハードウェアデコードが可能な場合有効にする．※再生支援を行うために必須！
- Smooth Scrolling 
    - [chrome://flags/#smooth-scrolling](chrome://flags/#smooth-scrolling)
    - ページのスクロールをスムーズにする．
- GPU rasterization 
    - [chrome://flags/#enable-gpu-rasterization](chrome://flags/#enable-gpu-rasterization)
    - Web コンテンツの描画にGPUを使用する．
- Zero-copy rasterizer 
    - [chrome://flags/#enable-zero-copy](chrome://flags/#enable-zero-copy)
    - ラスタスレッドが GPU メモリに直接書き込むようにする．

GPU が対応していればこれで動画再生支援が有効になるはずです．

## 3. Chromium の場合
### 3.1. Chromium の導入
```bash
sudo pacman -Syu chromium
```
### 3.2. 起動オプションの追記
~/.local/share/applications/chromium.desktop ← Google Chrome と方法が違う！
を書き換えて起動オプションを追記する．
~/.local/share/applications/chromium.desktop 内にある **全ての**

```
Exec=･･･
```
行の末尾に
`--force-dark-mode --enable-features=WebUIDarkMode --use-gl=desktop`
を追記する．

#### 以下 Google Chrome の場合と同じなので 2.3 を参照すること．