Raspberry Pi3B+をキオスクモードで使う (2019年11月版)

# はじめに
ひさしぶりにRaspberryPiを触る時間ができたので、以前の記事「[Raspberry Pi3でキオスク端末(自動ログイン＋ブラウザ起動)を作る。](Qiita https://qiita.com/yyano/items/c08705994363b9526d07)」を2019年11月時点の内容に書き直ししました。

## 環境
- Raspberry Pi3B+
- Raspbian Buster with desktop (2019-09-26-raspbian-buster.img)

公式サイトからではなくミラーサイト http://ftp.jaist.ac.jp/pub/raspberrypi/ からイメージファイルをダウンロードすると早いです。もし公式サイトで更新された日付より7日以上経過している場合、ミラーサイトから取得することをおすすめします。（7日以内だとミラーサイトに反映されていないことがあるようです）

- [raspbian_full/images](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_full/images/) ← Raspbian Buster with desktop and recommended software
- [raspbian/images](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/) ← Raspbian Buster with desktop
- [raspbian_lite/images](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/) ← Raspbian Buster Lite


# 設定
## 初期設定
- OSイメージをダウンロードして、SDカードに展開
- SDカードをRaspberryPiに刺して電源投入

## apt
### 取得先を変更

取得先を国内のミラーサーバー([RaspbianMirrors](http://www.raspbian.org/RaspbianMirrors))にある日本国内のサーバー(JAIST)に変更します。

```
sudo vi /etc/apt/sources.list
```

```diff:/etc/apt/sources.list
- deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
+ #deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
+ deb http://ftp.jaist.ac.jp/raspbian buster main contrib non-free rpi
```

### apt IPv6の無効化

もしIPv6環境内ではなくIPv4環境のみ使う場合、下記の設定をします。IPv6がちゃんと設定されていない環境の場合、aptの更新取得が遅くなることがあるようです。

- [apt実行時ipv6アドレスにアクセスさせたくないときの対処](https://qiita.com/ajitama/items/9011d8d0bb3dc5ac7a1c)

```
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4
```
- [Have to use -o Acquire::ForceIPv4=true to do apt-get update/upgrade](https://askubuntu.com/questions/781030/have-to-use-o-acquireforceipv4-true-to-do-apt-get-update-upgrade)


### apt 更新を取得

更新をして再起動します。

```
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo reboot
```

一時的にIPv6を無効化する場合は、aptのオプション`-o Acquire::ForceIPv4=true`を追加して強制的にIPv4でアクセスするようにします。(例:`sudo apt update -o Acquire::ForceIPv4=true`)

### WiFi用に国コードを設定する

WiFiを使用する場合は設定が必要です。WiFiを使う場合は、`/boot/wpa_supplicant.conf`をつかったほうがいいかもしれません。

```
sudo raspi-config nonint do_wifi_country JP
```

## GUI関連

### 解像度
使用しているモニターの出塁などによって解像度などが変わるのですが、若干小さめに描画エリアが設定されるようです。モニターの解像度をすべて使って表示する場合、`disable_overscan`を設定します。

```diff:/boot/config.txt
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
- # disable_overscan=1
+ disable_overscan=1
```

### カーソルを消す

```diff:/etc/lightdm/lightdm.conf
- # xserver-config=
+ xserver-config= X -nocursor
```

上記の方法では全くカーソルが表示されなくなります。動いていない場合にマウスカーソルを消したい場合は`unclutter`を使ったほうがいいかもしれません。

### chronium 自動起動

ブラウザを自動起動するために`/etc/systemd/system/chromium-autorun.service`ファイルを新しく作ります。

```:/etc/systemd/system/chromium-autorun.service
[Unit]
Description=Chromium Autorun

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
#ExecStartPre=/home/pi/kiosk-setting.sh
ExecStart=/usr/bin/chromium-browser --noerrdialogs --disable-infobars --disable-background-mode --kiosk --app=https://youtube.com/
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=multi-user.target
```

`ExecStart`のオプション指定について ([起動オプション - Google Chrome まとめWiki](http://chrome.half-moon.org/43.html))

- `/usr/bin/chromium-browser` chromiumブラウザのパス
- `--noerrdialogs` エラーダイアログを表示しない
- `--disable-background-mode` バックグラウンドモードを無効
- `--kiosk` Kioskモードで起動
- `--app=https://youtube.com/` アプリケーションモードとして指定されたURLを表示する

chromiumの`--app=<URL>`、全画面モード(F11)のような感じで表示されます。Raspberry Piの電源が強制的に切られてしまった後に再起動すると「『Chromeは正しく終了しませんでした』復元しますか？」とか表示されなくなります。廃止されたオプション`--disable-infobars`の代わりに使用。

#### 端末情報の表示

複数台設置したときに、端末情報(IPアドレスなど)が知りたいときがあります。`ip addr show`でインターフェース情報を取得しテキストファイル出力、`leafpad`で表示しています。必要がない場合は不要です。

- 1つ目の`sleep 20`はleafpadを出力するためのX起動待ち。
- 2つ目の`sleep 10`はleafpadを見せる時間（＝経過後、chromiumが起動する）

```bash:~/kiosk-setting.sh
#!/bin/bash
sleep 20 
ip addr show > ~/ip.txt
DISPLAY=:0.0 leafpad ~/ip.txt &
sleep 10 
```

念の為に起動時に前回のセッション情報を消しているのですが、chromiumの`--app=<URL>`オプションを使う場合、必要ないかもしれません。

```bash:crontab
@reboot rm -rf ~/.config/chromium/Singleton*
```

### 自動起動の設定
```shell
sudo systemctl enable chromium-autorun.service
sudo systemctl start chromium-autorun.service
```

# おわりに
前回の記事と大きく異なるとすれば、aptの設定変更、chromeinumのオプション指定内容が変わった感じでした。