Raspberry Pi 4をUSBメモリからブート＆ヘッドレスにて初期設定（Raspberry Pi OS 64-bit リリース版）

# 更新履歴



## Raspberry Pi OS 64bit版の公開に伴う更新

- [こちら](https://www.raspberrypi.com/news/raspberry-pi-os-64-bit/)のとおり、正式版のインストール時の記録に更新
- Raspberry Pi Imagerの更新（初期設定として、Wi-fi、sshなどがイメージ書き込み時にできるようになりました）
- tightvncserverにてxrdpの問題が未解決なので、RealVNCクライアントを使うこととしました。


Macを用いたヘッドレスインストールから、

- ssh
- vim
- vnc
- 若干の日本語環境構築

などの設定を行うまでの記録です。


# これは何？

USBメモリに2021-10-30-raspios-bullseye-arm64.imgをコピーして、Raspberry Pi 4の私的初期設定を行うまでのメモです。
設定は、ヘッドレスにてMacから行います。

Wi-Fi環境は、自宅を使用します。
iPhoneのテザリングでも問題なくできると思います。（→　出先にて確認済み）


## 環境

- Darwin Kernel Version 21.2.0: Sun Nov 28 20:28:54 PST 2021; root:xnu-8019.61.5~1/RELEASE_X86_64
- MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
- 2.8 GHz クアッドコアIntel Core i7

## 手順

1. Raspberry Pi Imagerをインストール
1. OSのimgをダウンロード
1. USBメモリにimgを書き込み
1. 私的初期設定
1. vnc（インストールから起動時に自動起動させるまで）

# imgの書き込み

64bitのイメージは<a href='http://downloads.raspberrypi.org/raspios_arm64/images/'>こちら</a>からダウンロードし、zipファイルを解凍してimgファイルを適当な場所に保存しておきます。

先ほどのimgなどを指定した後に、さまざまな設定を行うことができます。

![スクリーンショット 2022-03-06 9.40.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/a0955670-5632-1f6b-338a-8576bd5e662c.jpeg)

右下の設定アイコンを選択すると設定画面となります。

![スクリーンショット 2022-03-06 9.15.40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/bac28150-17f3-300c-909e-7989e94495a5.jpeg)


ここでは、
- ssh
- host名
- piのパスワード
- Wi-fiの接続

の設定を行いました。


いよいよ、書き込みを開始します。



![スクリーンショット 2021-12-28 18.12.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/201ccf23-7ad0-597e-35ed-8f22311403ce.jpeg)

Verificationが終了すれば、書き込み終了です。


USBメモリを取り外して、Raspberry piに取付て電源をいれしばらくすると、以下のとおりsshにて接続ができるようになります。


```sh
$ ssh -l pi raspi3.local
```

パスワードを入力すると以下の画面になると思います。

```sh
$ ssh -l pi raspi4.local
The authenticity of host 'raspi4.local (240a:6b:560:ea60:b098:944e:6bee:d280)' can't be established.
ED25519 key fingerprint is SHA256:X5LXKFsCLaFu3uDyqRikrNEzohHSL8uOh0SnMpUTbe0.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'raspi4.local' (ED25519) to the list of known hosts.
pi@raspi4.local's password:
Linux raspi4 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Mar  6 00:38:47 2022
```

# 私的初期設定

初期設定として以下を行います。

<dl>
  <dt>日本語の設定</dt>
  <dd>日本語入力（mozc）とフォントは、必要でしょう</dd>
  <dt>Vim</dt>
  <dd>まあ、便利なので。</dd>
  <dt>Nocaps</dt>
  <dd>おなじみのキーですが、CAPS Lockとしては使ったことがありません。</dd>
  <dt>VNC</dt>
  <dd>デフォルトのVNCだとMacから接続できないので、tightvncserverをインストール</dd>
</dl>

とりあえず、このくらいにしておきます。

最終的には、RTL-SDRやHac RF Oneの使用を想定しています。

## 実際の作業

### .vimrcの設定

バックスペースやら矢印キーの挙動を修正するために

```shell
$ echo "set nocompatible" >> ~/.vimrc
$ echo "set backspace=indent,eol,start" >> ~/.vimrc
```
を実行します。

割と多くの情報がありますが、理由が書いてある<a href='https://www.shellhacks.com/vi-vim-arrow-keys-dont-work-print-letters-in-insert-mode/'>こちら(矢印キー)</a>と<a href='https://www.shellhacks.com/vi-vim-backspace-not-working/'>こちら（Back Space）</a>を参考にしました。



### もろもろアップデート

以下のコマンドにて、アップデートを行います。

```sh
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt dist-upgrade -y
$ sudo apt autoremove -y
```

### 日本語入力

mozcを使います。

```sh
$ sudo apt install fcitx-mozc
```

``Alt-` ``で、日本語入力に切り替える設定としています。


### 日本語フォントのインストール

```shell
$ sudo apt install fonts-noto-cjk
$ sudo  apt install fonts-ipafont fonts-ipaexfont fonts-ricty-diminished
```

### Vim

```sh
$ sudo apt install vim
```

### Nocaps

```sh
$ sudo vi /etc/default/keyboard
```

で、`XKBOPTIONS="ctrl:nocaps"`を追加します。



### VNC（2022.3.6更新）


```sh
$ sudo raspi-config
```

から、Interface Optionsを選択して、VNCをインストールします。
自動起動までの設定が行われます。

![スクリーンショット 2022-03-06 10.17.03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/d1bfc1ec-6d53-6866-d67e-0b0012a9e2c9.jpeg)


念のため、再起動してvncserverが起動していることを確認します。

```sh
$ netstat -nlt
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
```

5900ポートをLISTENしているのが、vncになります。

macOSのFinderからは相変わらず接続できないので、

![スクリーンショット 2022-03-06 10.12.44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/5f81a5dd-3041-bcf9-c8c5-a2b556d786dd.jpeg)

[RealVNCのクライアント](https://www.realvnc.com/en/connect/download/viewer/macos/)を使用して、接続することとします。

接続先は、

```sh
raspi4.local:5900
```

となります。美味く接続できると以下の画面が表示されると思います。

![スクリーンショット 2022-03-06 10.14.31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/5de9e37d-5381-589c-77f2-98b5597e5283.jpeg)


xrdpの不適合は、発生していませんね。良かった。

さて、画面が狭いのでFullHDにしたいと思います。

Piメニューから、Raspberry Piの設定を選択します。

![スクリーンショット 2022-03-06 10.26.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/505061c3-6803-e210-c07f-f3e7a215988c.jpeg)


ヘッドレス解像度の設定にて、1920x1080を選択します。

![スクリーンショット 2022-03-06 10.24.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/779aaad6-9471-99ae-b7f1-899023028de3.jpeg)


再起動を行うと、以下の画面となります。


![スクリーンショット 2022-03-06 10.28.26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/b0182c7e-5487-b614-eccd-ab071f154f8a.jpeg)



以上で初期設定は終了します。


## 古い記事（2022.3.6時点で未解決のままです）

### VNC

以前のOSでは、VNCが起動しないなどの問題がありましたが、最近のRaspberry Pi OSでは解消されているようです。
一方で、Macからは接続できないのでtightvncserverをインストールします。

```sh
$ sudo apt install tightvncserver
$ sudo vi /etc/init.d/vncboot
```


インストールが終了したら、`/etc/init.d/vncboot`を以下の内容で作成して、実行権限をつけます。

```/etc/init.d/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 1920x1080 -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
```

実行権限をつけます。

```sh
$ sudo chmod +x /etc/init.d/vncboot
```


tightvncserverを起動して、パスワードなんかを設定する。


```sh
$ tightvncserver
You will require a password to access your desktops.

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

画面操作は行わず、画面の閲覧のみの時に入力するパスワードを設定するかどうか質問されますが、不要なので`n`としました。

起動時に、`vncboot`が実行されるよう設定します。

```sh
$ sudo update-rc.d vncboot defaults
```

再起動して、

```sh
$ netstat -nlt
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN
(略)
```

で、ポート5901で起動していることを確認。

### Macから接続

Finaderから、VNCサーバーへ接続します。

![スクリーンショット 2021-12-28 20.17.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/1aa608d2-297e-aae6-e595-309c99d8fb95.jpeg)

先ほど設定したパスワードを入力すると

![画面共有ピクチャ2021年12月28日 20.16.20 JST.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/a0062dbc-2941-9e92-2d7d-89d7b27fc3cf.png)

国の設定を聞かれたので、Japan、キーボードは自分の環境にあわせて（私の場合は、US Keyを）設定します。

タスクバーに隠れているので、タスクバーを使用しないときは隠れるようにしました。

![画面共有ピクチャ2021年12月28日 20.44.56 JST.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/243bcec7-52a8-856a-c0fc-a267145d7650.png)



私的初期設定は、ここまでとします。


### xrdpの不適合（tigervncのインストール） 2022.3.6更新

正式版のvncにおいても、問題は解決されていない模様。
VNCを使用していると、以下の画面が表示されます。

![スクリーンショット 2021-12-30 13.47.01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/d96aeeba-a19e-9d71-5917-66edaee26994.jpeg)


調べたところ、既知の問題でして

https://github.com/neutrinolabs/xrdp/issues/2048

> BullseyeベースのRaspberry PI OSでは、xorgxrdp v0.2.12が稼動しています。このバージョンの xorgxrdp には、すでに設定されているのと同じサイズに画面をリサイズするように要求されると、エラーを報告する問題があります。
> このロジックは、Raspberry PI OSに搭載されているmutterのバージョン3.38.6-2~deb11u1+rpt1で使用されているロジックです。そのため、Raspberry PI OS用に提供されているMutterとxorgxrdpのバージョンは互換性がありません。

対策は、以下のページに記載されています。

https://github.com/neutrinolabs/xrdp/discussions/2050

Simple, Complex, Intermediate（中クラス）の対策が紹介されていました。
このうち、Simpleとして紹介されていたtigervnc-standalone-serverのインストールにより、問題は解消しました。

```sh
$ sudo apt -y install tigervnc-standalone-server tigervnc-common tigervnc-viewer
```
でインストールを行い

$ vncserver
```

でパスワードなどの設定を行います。
念のため、tigervncをインストールする前に、`~/.vnc `は削除しておく方が良いでしょう。

サーバーの起動は、以下のコマンドにて行います。
localhostは、必ず必要です。

```sh
$  vncserver :1 -localhost no
```

問題なければ、init.dにて自動起動するよう設定します。

```/etc/init.d/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 -localhost no -passwordfile /home/pi/.vnc/passwd'
        ;;

    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
```
設定は、先ほどと同じです。


```sh
$ sudo update-rc.d vncboot defaults
```

再起動して、

```sh
$ netstat -nlt
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN
(略)
```