Raspberry Pi 4 入門　セットアップ編（モニター不要版）

# はじめに
Raspberry Pi 4から、モニター出力がmicroHDMI端子になりました。

しかし、私のようにIoT機器としてRaspberry Piを利用する人にとってはかなり無縁な代物なので、リモート操作のみでモニター同様のセットアップする手順を、備忘録として残します。

# 準備物
RaspberryPiを動かすには以下を揃えれば、起動できます。

- Raspberry Pi 4 ModelB 2GB
- ケース
- USB-Type C 電源アダプター
- microSDカード 64GB
- PC

# OSイメージの書き込み

[Raspberrypi公式サイト](https://www.raspberrypi.org/downloads/)から_Raspberry Pi Imager_をダウンロードします。
Windowsは`Raspberry Pi Imager for Windows`、Macは`Raspberry Pi Imager for macOS`を選択します。

![スクリーンショット 2020-05-11 1.54.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/d2e48033-571e-956f-c716-6f3a4d67b82f.png)

ダウンロードしたらインストール作業は短調なので省略。
起動すると以下のような画面が表示されるのでSDカードへOSをインストールするための設定をします。

 1. `Operating System`から`Raspbery Pi OS`を選択
 2. `SD Card`から書き込むSDカードを選択
 3. 書き込む準備ができたら`WRITE`から書き込みを開始
 
![rasp_setup.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/2052d406-ede8-1b48-5d98-094adb5efdd5.gif)

書き込みが完了したら`CONTINUE`からSDカードが取り出されます。

![スクリーンショット 2020-05-11 8.51.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/26036ccc-52cd-1a73-88ca-d106b008d6e3.png)

# 初回設定

再度、SDカードをマウントし、`boot`というデバイスが表示されることを確認します。

![スクリーンショット 2020-05-11 8.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/94290ec7-0b70-b551-56b6-fa37c7ae9504.png)

Raspberry Pi 初回起動時から以下のことを解決するためにファイルを作成します。

|作成するファイル                |内容                 |
|----------------------------|--------------------|
|boot/ssh                    |ssh起動するためのファイル|
|boot/wpa_supplicant.conf    |無線LAN接続を設定するためのファイル|

まず、空ファイルの`boot/ssh`を作成します。

__Windows__
1. 右クリックから`新規作成 > テキストドキュメント`を選択
2. ファイル名`ssh（拡張子の .txtは不要）`を作成

__Mac__
1.コマンドで`touch /Volumes/boot/ssh`を実行します。

同じ要領で無線LAN接続用に`boot/wpa_supplicant.conf`を作成したら、中身を各環境に合わせて記述し保存します。
以下の例では、WiーFiのSSIDを`ssid_name`、パスワードを`password`として設定しています。

```:wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="ssid_name"
    psk="password"
}
```


# SSH接続
SDカードをRaspberry Piに装着し起動後に、SSH接続します。

`raspberrypi.local`というホスト名に対してユーザー`pi`で接続します。

__Windows__
Windowsは[Teraterm](https://ja.osdn.net/projects/ttssh2/)等のSSH接続用ソフトウェアを使って接続します。
Tera Termを起動し、ホストに`raspberrypi.local`と入力し、`OK`をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/eacfd815-f0c1-9777-72b7-f41e4fd101a3.png)

ユーザ名に`pi`、パスフレーズに`raspberry`を入力し、`OK`をクリックします。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/1b08e30d-b0ad-4393-f4d7-81d251d6899f.png)

Raspberry PiにSSH接続した画面が表示されます。

```
pi@raspberrypi:~ $
```

__Mac__
`ssh ユーザー名@ホスト名`でSSH接続できます。

```
ssh pi@raspberrypi.local
```
初回接続時に証明書関係の応答メッセージが返ってくるので`yes`を入力します。

```
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```
初期パスワード`raspberry`を入力します。

```
pi@raspberrypi.local's password: 
```
Raspberry PiにSSH接続した画面が表示されます。

```
pi@raspberrypi:~ $
```

# 初期パスワード変更

SSH接続できたらパスワードを変更します。

```
$ sudo raspi-config
```

セキュリティ観点からWi-Fiに接続する前にpiユーザーの初期パスワードを変更するため、`1 Change User Password`を選択します。

![スクリーンショット 2020-05-11 22.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/5c20b7d3-3b75-1204-ca0c-110345e11265.png)

`OK`を選択します。

![スクリーンショット 2020-05-11 22.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/bda6e47f-dfe2-2ca2-9a9f-9a278b6b2a1a.png)

新しいパスワードを2回入力します。

```
New password: 
Retype new password: 
```

以下の画面が表示されれば、パスワード変更が完了します。`Ok`を選択します。

![スクリーンショット 2020-05-11 22.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/5509eb23-f356-e508-e481-9f42d09421c1.png)

`Finish`を選択してraspi-configを終了します。

![スクリーンショット 2020-05-11 22.59.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/e19d9d44-cd66-1f44-b2a1-988fe6291f0b.png)

# ソフトウェアアップデート

初期アップデート、アップグレードします。

```
$ sudo apt-get update
$ sudo apt-get upgrade -y
```

# vimインストール

Raspbianに標準で入っているvimはvim-tinyという最小構成版なので、矢印キーやバックスペースキーが使えません。
そのため、標準のvimを再インストールし、キーボード操作を受付けるためのvimrcファイルを作成します。

```
$ sudo apt-get install vim -y
$ cat <<EOF > ~/.vimrc
set nocompatible
set backspace=indent,eol,start
set autoindent
set nowrap
set ruler
syntax on
EOF
```

# IPアドレス固定化

VNCでリモートデスクトップ接続する際にIPアドレスを固定化が必要となるため、その設定を行います。
IPアドレス固定化に必要となる情報は以下の通り。

* プライベートアドレスのCIDR
* ゲートウェイIP
* インターフェース名

これらの情報を取得するために、`route -n`から情報を取得します。

```
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
```

取得した情報から次のような結果であることがわかりました。

|項目                |値            |備考                                     |
|-------------------|--------------|---------------------------------------|
|プライベートアドレスCIDR |192.168.0.0/24|サブネットマスク：255.255.255.0＝CIDR：24  |
|ゲートウェイIP         |192.168.0.1   |ルーターのIPアドレス                        |
|インターフェース名      |wlan0         |Raspberry Piの無線LAN接続口               |

CIDRは24なので固定IPアドレスとしては192.168.0.2~192.168.0.254の中から選べるわけですね。
もちろん、その他デバイスが接続しているIPアドレスと被らない範囲で設定する必要があります。

※現在のRaspberry Piに割り当てられているプライベートIPアドレスはWi-FiからDHCPで割り当てられたIPアドレスのため、DHCPで振られない範囲のIPアドレスを割り当てるのが一番の得策ですが、各ご家庭のルーター設定によるので、ここでは割愛。

IPアドレスを固定化するための設定ファイルをvimで修正します。

```
$ sudo vi /etc/dhcpcd.conf
```

取得した情報を基に固定IPアドレスを最下部に設定します。
今回は既に割り当てられているプライベートアドレスを固定します。
vimの使い方については[ｖｉエディタの使い方](https://prev.net-newbie.com/linux/commands/vi.html)を参考にしてください。

```:dhcpcd.conf
interface wlan0
static ip_address=192.168.0.100
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
```

Raspberry Piを再起動します。

```
$ sudo shutdown -r 0
```

再度、IPアドレス経由でSSH接続できれば設定完了です。

# VNCサーバーインストール

モニター無しでもGUI操作するためのリモートデスクトップ可能な環境を作ります。
その建前として必要になるVNCサーバーをインストールします。

```
$ sudo apt-get install tightvncserver -y
```

VNCサーバーを起動すると、初回は_リモートデスクトップするためのパスワード_設定を求められますので、これを設定します。

```
$ tightvncserver

Password: 
Warning: password truncated to the length of 8.
Verify:   
```

閲覧用のパスワードも設定するか求められますが、好みで設定してください。
筆者は設定しないため`n`を選択しました。

```
Would you like to enter a view-only password (y/n)? n
```

# VNCサーバー自動起動設定

VNCサーバーはRaspberry Piが再起動したりすると、VNCサーバーが終了してしまうので、自動起動するための設定をする必要があります。
VNCサーバーを自動起動するための起動スクリプトを作成します。

```
$ cd /etc/init.d/
$ sudo vi vncboot
```

vncbootの中身は以下の通りです。
ちなみに`-geometry 1280x720`の部分でデスクトップの解像度を指定していますので、好みで調整します。

```shell:vncboot
#! /bin/sh    

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO

# /etc/init.d/vncboot

USER=pi
HOME=/home/pi

export USER HOME

case "$1" in
    start)
        echo "Starting VNC Server"
        #Insert your favoured settings for a VNC session
        su $USER -c '/usr/bin/vncserver :1 -geometry 1280x720 -depth 24'
        ;;

    stop)
        echo "Stopping VNC Server"
        su $USER -c '/usr/bin/vncserver -kill :1'
        ;;

    *)
        echo "Usage: /etc/init.d/vncboot {start|stop}"
        exit 1
        ;;
esac

exit 0
```

vncbootを作成したら実行権限を割り当て、自動起動させるためのシンボリックリンクを付与します。

```
$ sudo chmod 755 /etc/init.d/vncboot
$ sudo update-rc.d vncboot defaults
```

再起動し、VNCで接続ができるか確認します。

```
$ sudo shutdown -r 0
```


# VNC接続

VNCクライアントソフトを用いて、PCからリモートデスクトップする準備をします。
ここでは[VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/)をインストールした接続方法を記述しています。

VNC Viewer起動後、以下のような画面が表示されるので`Raspberry Piの固定IPアドレス:5901`と入力しアクセスします。

![スクリーンショット 2020-05-12 2.14.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/e1fac0db-bdf5-b9e7-3ecd-d6ceb447951d.png)

`Unencrypted connection`が表示されますが、（フリーのVNCクライアントを使うと暗号化したコネクションは出来ないので）そのまま`Continue`で進みます。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/f352dee8-284f-2146-ceaf-1f2c15010284.png)

パスワードを要求されるのでVNCサーバーインストール時に設定したパスワードを入力し`OK`をクリックします。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/1d16ee28-cfb7-0b6c-25fe-95d851d92dc3.png)

初回時は以下のような画面が表示されるので`Give access`をクリックします。

![スクリーンショット 2020-05-12 2.16.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/70e331b9-626c-cb29-105b-8869e9984cc5.png)

すると、Raspberry Piへリモートデスクトップで接続することができます。

![スクリーンショット 2020-05-12 2.17.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146869/f7cbc7cb-9279-ab07-031a-02466e922104.png)


以上で、モニターやmicroHDMIがなくてもRaspberry Piのセットアップができた。
RaspberryPiを新たに触る人たちの助けになれば幸いです。