Windows 10は重くて使えなかったPCをLinuxでメディアプレーヤに現役復帰させた話

以前、ネット配信ビデオを見るのに、Fire TV Stickをしばらく使ってみたが、重いし不具合は出るしで気持ち良く使えなかった。
それで結局、Windows 10のノートPCでネット配信ビデオを見ているのだが、モニターから長く延びているHDMIケーブルが目障りで仕方がなくなった。

そこで、購入当時はWindows 7のノートPC（ASUS U24E / 8GiBメモリ）をWindows 10にアップグレードしたら、とにかく重くてログオンしても数分待たないと使えなくなったので、この2年間ほどは本棚に仕舞っておいたことを思い出し、それを引っ張り出してメディアプレーヤに生まれ変わらせることにした。

# 要件

以下の通り、メディアプレーヤなので、通常PCには求められない要件がある。

- アップデートの強制なし
- 自動ログイン
- 自動ロック解除
- 短時間の起動
- マウスのみで操作

# 実現

以下の内容で要件を実現する。

- OSはLinux Mint 21.1 (Vera)を選択
- ブラウザはChromeをインストール
- ハイバネーション機能の有効化
- ブート時の待ち時間を短縮
- パスワードなしのユーザーを作成
- 外部ディスプレイのみを使用

## OSはLinux Mint 21.1 (Vera)を選択

特に説明することはない。
https://www.linuxmint.com/download.php からCinnamonエディションのISOファイルをダウンロードし、DVDに焼いてインストールを行った。
過去、Linux Mint 18.3をインストールしたパーティションをそのまま引き継いだ。

## ブラウザはChromeをインストール

OS標準のブラウザはFirefoxである。
そのFirefoxで「Linux Chrome」を検索して、「[Linux で Chrome ブラウザを設定する](https://support.google.com/chrome/a/answer/9025903?hl=ja)」のガイダンスにしたがって、インストーラー（64ビット .deb）をダウンロードしてインストールする。

## ハイバネーション機能の有効化

Linux Mintではハイバネーション（休止状態）が有効になっていない。
以下の手順で有効化する必要がある。

参考文献：
https://wowgold-seller.com/ja/stories/6692-how-to-enable-hibernate-mode-on-linux-mint

### スワップファイルの拡大

インストール直後のスワップファイルのサイズは2GiBしかない。
ハイバネーションを使用するためには、スワップファイルが実装メモリの2倍以上のサイズ（今回は16GiB）である必要がある。

```bash
$ sudo swapoff -a
$ sudo dd if=/dev/zero of=/swapfile bs=16G count=1
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon -a
```

### カーネルパラメーターの変更

先ずはスワップファイルが存在するルートディレクトリのマウントポイントのUUIDを取得する。

```bash
$ findmnt / -o UUID -n
<UUID>
```

次にスワップファイルの物理オフセットを取得する。

```bash
$ sudo filefrag -v /swapfile | awk 'NR == 4 {gsub(/\./, " "); print $4;}'
<OFFSET>
```

そして、 /etc/default/grub を以下の要領で変更する。

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
↓
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=<UUID> resume_offset=<OFFSET> quiet splash"
```

最後に、システムGRUBを更新して完了となる。

```bash
$ sudo update-grub
```

### シャットダウンダイアログに「ハイバネート」を追加

以下のファイルを作成する。

```/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
[Enable Hibernate]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=yes
```

### ハイバネーションの動作確認

ハイバネーションが正しく設定されたかを確認する。
先ずはシステムを再起動する。

次に以下のコマンドで yes が出力されることを確認する。

```bash
$ busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
s "yes"
```

そして、シャットダウンダイアログに「ハイバネート」が追加されていることを確認する。

![shutdown_dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167705/7c4107c7-9e2c-b755-6e55-240d12582c2a.png)

最後にコマンドでハイバネートすることを確認する。

```bash
$ systemctl hibernate
```

## ブート時の待ち時間を短縮

ブート時の待ち時間はデフォルトで10秒になっている。
これを3秒に短縮する。

先ずはファイルを以下のように変更する。

```bash
$ sudo vim /etc/default/grub
GRUB_TIMEOUT=10
↓
GRUB_TIMEOUT=3
GRUB_RECORDFAIL_TIMEOUT=3
```

次に上記変更を反映する。

```bash
$ sudo update-grub
```

参考文献：
https://www.fuukemn.biz/page13.html
https://qiita.com/junk1400/items/95c86ce35467a60b2555

## パスワードなしのユーザーを作成

OSインストール時に作成したユーザーはそのまま管理者として使用し、メディアプレーヤとして使用する場合のユーザーを別に用意する。
下記vipwでwatchtvの設定行のコロン区切りで左から2つ目の x を削除すると、watchtvでログインやロック解除時にパスワードの入力が不要となる。

```bash
$ sudo adduser watchtv
※メッセージにしたがってパスワードなどを入力
$ sudo vipw
watchtv:x:1009:1009:WATCH the TV,,,:/home/watchtv:/bin/bash
↓
watchtv::1009:1009:WATCH the TV,,,:/home/watchtv:/bin/bash
```

## 外部ディスプレイのみを使用

外部ディスプレイを接続した状態で、LMメニュー＞設定＞ディスプレイでディスプレイ設定ダイアログを開き、ディスプレイ1番をオフするだけで良い。

# 最終動作確認

- watchtvでログイン（パスワードが不要であることを確認）
- Chromeを起動し、好きな動画配信サイトを開いて、動画が見れることを確認
- LMメニュー＞シャットダウンでシャットダウンダイアログを開き、ハイバネートをクリック（Chromeでデモ動画が表示されているときは、終わるまで休止状態に移行しないので注意）
- PCの電源ボタンを押して、休止状態から復帰すると、ロック画面が表示されずに、Chromeが既に好きな動画サイトを開いた状態に戻り、動画が見れることを確認
- 起動時間：約45秒、終了時間：約20秒

後は目立たないところにノートPCを配置して、ワイヤレスマウスを手元に置けば、気持ち良く動画を見ることができそうだ。