headless RaspberryPiインストール方法(v2)
2020/11/7
オーディオ出力のデフォルト変更法として
$HOME/.asoundrcの編集によるものを追加した。
2020/11/3
オーディオ出力のデフォルト変更方法と
ubuntuで標準でインストールされている
RemminaのようなRealVNC-viewerでない
VNC-Viewerでアクセスてきる設定方法を追加した。
2020/10/26
オーディオ出力のデフォルトをHDMIから
フォンジャックに切り替える方法を追加した。
2020/10/19+
第2版
旧記事に対して、ブートSD作成ツールが提供されたので、
それのインストール方法などが変更になった。
また、WiFi環境の改善に効果があった
WiFi中継器の利用についての記載を追加した。
あと、VNCの設定方法について追加した。
headless RaspberryPi(v2)
headless RaspberryPi(v2)
概要
headless RaspberryPiインストール方法(v2)
本記事は「headless RaspberryPiインストール方法」を見直しをかけた第2版にあたる。
表示装置を接続しないでPCを運用することをheadlessというが、ここでは、最初のbootからRaspberryPiをheadlessで使う方法についてまとめた。基本的には本家siteのドキュメントにあるとおりだが、それに必要なものを追加した。
なお、ホストPCとしては、ubuntu20.04を想定している。
前記事からインストール例などの一部は割愛したので、必要があれば第1版の記事を参照のこと。
事前準備(clientPC側)
以下のdeamonをインストールする:
sudo apt-get update
sudo apt-get install avahi-daemon
sshのポートを開くための設定:
sudo ufw allow ssh
ブートSD作成ツールのインストール(clientPC側)
cd ~/Downloads
sudo apt update
sudo apt upgrade
wget https://downloads.raspberrypi.org/imager/imager_1.4_amd64.deb
sudo dpkg -i imager_1.4_amd64.deb
ブートSD作成ツールの実行
1.rasrberryのOSを書き込むSDをSDソケットに指す。
2.「アプリケーションを表示する」アイコンを押する。
そのなかからraspberryアイコンのImagerを探してクリックして起動する。
3.GUIとしては、3つのボタンが表示され、
左から順に[CHOOSE OS],[CHOOSE SDCARD],[WRITE]となっている。
(1)[CHOOSE OS]を押してOSの種類を選択する
(2)[CHOOSE SDCARD]を押して書き込むSDのドライブを選択する
(3)上の2つの選択にミスがないことを確認したら[WRITE]を押す。
(4)ダウンロードしながら書き込むので時間がかかるが、辛抱強く、メッセージが表示されるまで待つ。
(5)書き込みが終了したら、SDを抜く。
(6)書き込みツールを終了する。
注意:linux(gparted)でFAT32フォーマットしたSDを利用するとブートできないSDになることがあるようなので、新規SDかwindowsで正式なフォーマット・ツールでフォーマットしたSDを使用することを勧める。
boot/rootfsディレクトリのファイル追加/修正
書き込んだSDをいったん取り外し、再度、挿入する。 すると、bootディレクトリとrootfsディレクトリが出現する。
bootディレクトリに対して以下を行なう:
(1)ssh有効化
bootにsshという名前のファイルを作成する。(ファイル内容は空で良い)
(2)wireless設定
bootにwpa_supplicant.confという名前で
以下の内容のファイルを作成する:
wpa_supplicant.conf
(複数のSSIDを設定する例)
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="<Name of your WiFi>"
psk="<Password for your WiFi>"
priority=1
id_str="<ID1(任意)>"
}
network={
ssid="<Name of your WiFi>"
psk="<Password for your WiFi>"
priority=2
id_str="<ID2(任意)>"
}
接続するssidの方式はWAPかWPA2であること
(WEPでは接続できないようだ)
また、WiFi中継器を利用する場合、SSIDは一つしか持てないので
一つのSSIDの設定にする。
rootfsディレクトリに対して以下を行なう:
(3)必要があれば、hostnameを変更するために
以下の2つのファイルに記述されているhostnameを
新しいものにエディタで変更(編集)する。
(書き込み権限が必要なので「sudo」を付ける必要がある)
#「raspberrypi」を任意の名前に変更する
# USERは自分の環境に合わせる
sudo nano /media/USER/rootfs/etc/hostname
sudo nano /media/USER/rootfs/etc/hosts
(4)該当SDを取り出す
boot,rootfsをアンマウントする。
Boot
書き込んだSDをRaspberryPiのボードに刺し、電源をオンする。(起動する)
ボードのLEDが点滅し始めて、常灯するまで待つ。
Ping
ホストPCで接続を確認するために
(名前解決に時間がかかるので)
以下のコマンドを成功するまで繰り返す。
ping raspberrypi.local
(rastberrypiはhostnameなので、hostnameを変更した場合
変更したもので置き換える)
出力ログ例:
$ ping raspberrypi.local
PING raspberrypi.local (192.168.0.26) 56(84) bytes of data.
64 bytes from 192.168.0.26: icmp_seq=1 ttl=64 time=39.4 ms
64 bytes from 192.168.0.26: icmp_seq=2 ttl=64 time=78.2 ms
64 bytes from 192.168.0.26: icmp_seq=3 ttl=64 time=10.0 ms
64 bytes from 192.168.0.26: icmp_seq=4 ttl=64 time=9.81 ms
64 bytes from 192.168.0.26: icmp_seq=5 ttl=64 time=18.9 ms
^C
--- raspberrypi.local ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 9.816/31.306/78.254/25.833 ms
どうしても接続確認ができないようなら「arp -a」を入力して、接続中のPCのIPアドレスを表示させて、 RaspberryPiのIPアドレスを推定する。
Login
接続確認が終わったら以下のコマンドを入力してloginする:
(デフォルトのパスワードはraspberry)
ssh pi@raspberrypi.local
または
ssh -Y pi@raspberrypi.local
(接続後にグラフィクス・アプリを使用する場合)
ログイン中(ログ出力例):
$ uname -a
Linux rpi4RED 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 29629308 5962032 22376368 22% /
devtmpfs 1827808 0 1827808 0% /dev
tmpfs 1959904 0 1959904 0% /dev/shm
tmpfs 1959904 16836 1943068 1% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1959904 0 1959904 0% /sys/fs/cgroup
/dev/mmcblk0p1 258095 55202 202894 22% /boot
tmpfs 391980 0 391980 0% /run/user/1000
pi@rpi4RED:~ $
$ ls
Bookshelf
# 他のディレクトリが欠落しているbug?
# 以下のコマンドで修復できる
mkdir Desktop
mkdir Documents
mkdir Downloads
mkdir Music
mkdir Pictures
mkdir Public
mkdir Templates
mkdir Videos
#----------------
# ネットワーク関連
$ ifconfig
# 有線LAN(eth0)と無線LAN(wlan0)が接続している例
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.13 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::6947:928f:1597:e39a prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:71:b9:36 txqueuelen 1000 (Ethernet)
RX packets 68034 bytes 97542048 (93.0 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 119086 bytes 118526890 (113.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 10144 bytes 110736824 (105.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10144 bytes 110736824 (105.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.18 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::4916:271b:edd7:5686 prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:71:b9:37 txqueuelen 1000 (Ethernet)
RX packets 46823 bytes 3242821 (3.0 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 66 bytes 8978 (8.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ iwconfig
# wlan0が有効になっている例
eth0 no wireless extensions.
wlan0 IEEE 802.11 ESSID:"xxxxxxxxxxxx"
Mode:Managed Frequency:2.442 GHz Access Point: 00:1D:73:1D:0A:08
Bit Rate=24 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=56/70 Signal level=-54 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1 Invalid misc:0 Missed beacon:0
lo no wireless extensions.
$ sudo iwlist scan | grep ESSID
# 見えているSSIDを表示した例
eth0 Interface doesn't support scanning.
ESSID:"2CxxxxxxxxxxxxxxxxxxxxxxxxxxxF3"
ESSID:"001xxxxxx08"
ESSID:"2CxxxxxxxxxxxxxxxxxxxxxxxxxxxF3"
ESSID:"5Dxxxxxxxxxx5E"
lo Interface doesn't support scanning.
ESSID:"rsxxxxxxxxxxxx2"
ESSID:"rsxxxxxxxxxxxx1"
# SSIDは伏せ文字にしている
グラフィクス・アプリ起動例
ssh -Y pi@raspberrypi.local
geany &
sudo apt install scratch
scratch &
sudo apt install leafpad
leafpad &
chromeのインストール
sudo apt install chromium-browser
chromium-browser &
node.jsとrubyのインストール
sudo apt install nodejs
sudo apt install ruby
C#のインストール
sudo apt install mono-complete
mcs --version
Mono C# compiler version 5.18.0.240
csharp
Mono C# Shell, type "help;" for help
Enter statements below.
csharp> Environment.OSVersion
Unix 4.19.75.0
csharp>
Ctrl-D
bluetoothのインストール例
sudo apt install -y pi-bluetooth
sudo reboot
bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
#出力例
[CHG] Controller B8:27:EB:43:FE:83 Discovering: yes
[NEW] Device 57:80:9B:6B:4C:EC 57-80-9B-6B-4C-EC
[NEW] Device 5F:55:F2:80:A7:2B 5F-55-F2-80-A7-2B
[NEW] Device CE:EA:67:62:B6:7B Bryton Cadence
[CHG] Device 57:80:9B:6B:4C:EC RSSI: -67
[CHG] Device 57:80:9B:6B:4C:EC RSSI: -81
Ctrl-D
[bluetooth]# quit
pi@raspberrypi:~ $
VNC-serverの設定
VNC-severを使用する場合、
「sudo raspi-config」を実行して
以下の値に設定する:
設定値:
・3 Boot Options
B1 Desktop / CLI
B4 Desktop Autologin Desktop GUI, automatically logged in as 'pi' user
・5 Interfacing Options
P3 VNC ⇒ Enable
・7 Advanced Options
A5 Resolution
DMT Mode 85 1280x720 60Hz 16:9
(使用しているモニターのサイズに合わせて7種類から選択する)
設定後、rebootする。
なお、上の設定でなく「Login Desktop GUI」(Autoでない)でも良い。
VNC-severについては、以下の記事を参考した:
【解決】Raspberry Pi4 VNC接続で画面が出ない!!
なお、ホストPC側のRealVNC-viewerは以下のurlからダウンロードできる: https://www.realvnc.com/en/connect/download/viewer/linux/
ダウンロードしたファイルは実行形式なので実行属性を与えて実行する。
headlessといえども、VNCを使用するとGUIのディスクトップが利用できるのは便利である。
また、ubuntuで標準でインストールされているRemminaのような(RealVNC-Viewerでない)VNC-Viewerの場合は
このままでの設定では接続できない。そのため、Remminaなどを使用する場合は、以下を実行して設定を
UNIX_passwordからVNC_passwordによるログインに変更する。
以下を実行する:
1. Open the /root/.vnc/config.d/vncserver-x11 config file.
(sudo nano /root/.vnc/config.d/vncserver-x11 config)
2. Replace Authentication=SystemAuth with Authentication=VncAuth
and save the file.
3. In the command line, run sudo vncpasswd -service.
This will prompt you to set a password, and will insert it
for you in the right config file for VNC Server running in Service Mode.
(sudo vncpasswd -service)
4. Restart VNC Server.
(sudo reboot)
参照:
VNC (Virtual Network Computing) - Raspberry Pi Documentation
GUIによる設定変更の場合は以下を参照のこと:
http://penguin.tantin.jp/hard/blog/2018-12-25/Raspberry%20Pi%E3%81%ABVNC%E3%81%A7%E6%8E%A5%E7%B6%9A.html
blog/2018-12-25/Raspberry PiにVNCで接続
抜粋:
「
https://raspberrypi.stackexchange.com/questions/68838/i-failed-to-remote-connect-to-raspberry-pi-3-from-ubuntu
failed to remote connect to Raspberry Pi 3 from Ubuntu
このページに書いてあるとおり,
Raspberry Piの右上にVNCのアイコンがあるのでそこをクリックして,「Options」をクリックすると設定画面になる.
そこの「Security」というところで「Authentication」というところを「VNC Password」にする
VNCパスワードを設定しろと言われるので設定する.
PC側からRemminaでアクセスするとこのVNC Passwordを聞かれるので入力すると繋がる
」
オーディオ出力のデフォルトをフォンジャックにする
インストール直後はheadlessなのでHDMIが見えていない状態になっているので オーディオ出力のデフォルトはフォンジャックになっている:
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
ところがVNCなどでdesktop用アプリなどをインストールすると以下に変わる:
(HDMIが有効になり、それがデフォルトになる)
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: b1 [bcm2835 HDMI 1], デバイス 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]
サブデバイス: 4/4
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
サブデバイス: 4/4
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
これを解決するために:
・RaspberryPiでUSBスピーカーをデフォルトの音声出力デバイスにする
上のやり方を参考にして、
RaspberryPiでフォンジャックをデフォルトに戻す。
(具体的には、/usr/share/alsa/alsa.confの内容を修正する)
こうすると今までHDMIに流れていて(フォンジャックでは)無音になっていたアプリが正常に鳴るようになる。
実行例:
$ cvlc http://us3.internet-radio.com:8485/
VLC media player 3.0.11 Vetinari (revision 3.0.11-0-gdc0c5ced72)
[01597240] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
# 上の行でエラーが出ているが正常に音は鳴るようだ
[015b43e8] dummy interface: using the dummy interface module...
[b2a01dd0] prefetch stream error: unimplemented query (264) in control
オーディオ出力先のデフォルト変更
上でフォンジャックへの変更方法を述べたが、ここでは、もっと汎用的にデフォルトを変更する方法について紹介する。(以下のリンクを参照のこと)
・Headless_RaspberryPiでAudio出力のデフォルトを変更する
・RaspberryPiでBluetoothAudio(A2DP)を使用する
上の方法は、GUIのVolumeアイコンでデフォルトを変更しているが、
ALSAデバイス限定であれば$HOME/.asoundrcを以下のように修正することでデフォルト変更できる。(bluetooth-audioは対象外)
以下の内容のcard番号「card 1」をデフォルトにしたいデバイスのものに変更する。
$HOME/.asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "output"
}
capture.pcm {
type plug
slave.pcm "input"
}
}
pcm.output {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
カード番号は「aplay -l」を実行すると
カード番号と対応しているデバイス名が表示されるので
デフォルトにしたいデバイスのカード番号を知ることができる。
(bluetooth-audioの場合、修正内容が異なるので、ここでは対象外としている)
WiFi中継器の利用
以下のような高速WiFi中継器を利用するとraspberryのネットワーク接続の安定性や速度の向上を実現できる。
入手したものは、有線LAN経由でWiFi接続する機能があるので、WiFiのないraspberryや、WiFiがあっても環境の問題でWiFi接続性が悪い場合、有線LANを利用すると安定性と速度の向上が期待できる。
Rpi4などは、旧モデルよりも有線LANの側道が向上しているせいか、実際に利用した印象では、ネットワーク速度が向上している。なので、WiFiがあるRpi4でも有線LAN経由でWiFi接続したほうが良いと思われる。
すでに設定してあるSSIDを変更せずに中継するので、新規に設定する必要があるのはWiFi中継器だけなので、使い勝手も良い。
参考:
WiFi中継器を使っている場合、親機と子機(中継器)で同じSSIDを使っているので、以下のように同じSSIDが2つ見える。
$ sudo iwlist scan | grep ESSID
eth0 Interface doesn't support scanning.
タブっているSSID → ESSID:"2CxxxxxxxxxxxxxxxxxxxxxxxxxxxF3"
ESSID:"001xxxxxx08"
ダブっているSSID → ESSID:"2CxxxxxxxxxxxxxxxxxxxxxxxxxxxF3"
ESSID:"5Dxxxxxxxxxx5E"
lo Interface doesn't support scanning.
ESSID:"rsxxxxxxxxxxxx2"
ESSID:"rsxxxxxxxxxxxx1"
# SSIDは伏せ文字にしている
また、以下のようにpingを使用して、その出力にWiFi中継器の型番(本件の場合は、wrc-300febk-r)が含まれていれば、中継機能が動作していることを意味する。
# 型番の出現頻度は不明なので、比較的長めに出力しないと分からないかもしれない。
$ ping google.com
PING google.com (172.217.175.14) 56(84) bytes of data.
64 bytes from google.com (172.217.175.14): icmp_seq=1 ttl=116 time=19.3 ms
64 bytes from google.com (172.217.175.14): icmp_seq=2 ttl=116 time=40.2 ms
<省略>
64 bytes from google.com (172.217.175.14): icmp_seq=10 ttl=117 time=19.6 ms
# 以下の行に型番が出現している
From wrc-300febk-r.setup (192.168.0.5): icmp_seq=11 Redirect Host(New nexthop: 192.168.0.1 (192.168.0.1))
64 bytes from google.com (172.217.175.14): icmp_seq=11 ttl=117 time=16.3 ms
<省略>
ttl=117 time=18.3 ms
^C
接続実績:
以下のモデルの接続を確認した:
Raspberry Pi 1 Model B (有線LAN接続)
Raspberry Pi 2 Model B (追加:WiFi_USBdongle)
Raspberry Pi 4 Model B (WiFi接続)
Raspberry Pi Zero WH (WiFi接続)
DNS Bug?
まれに、DNSが動かなくなる場合がある。そのときは以下の手順で復活する。
(経験的な話になるが、自然に普及したこともある)
sudo nano /etc/network/interfaces
# /etc/network/interfacesの末尾に以下の1行を追加する:
dns-nameservers 8.8.8.8 8.8.4.4
# rebootする
sudo reboot
本問題については以下を参照のこと:
https://raspberrypi.stackexchange.com/questions/4275/dns-resolution-failure
DNS resolution failure
復活の確認は以下のようにpingする。
例:
ping google.com
ping nifty.com
Home Directories Bug?
fullイメージのSDで起動した場合、「Raspberry Pi 4 Model B」では、/home/piには以下の状態になっていた。
$ ls
Bookshelf
他のボードでは、以下のようなディレクトリができる:
$ ls
Desktop Documents Bookshelf Pictures Templates
Downloads Music Public Videos
たぶん、「Raspberry Pi 4 Model B」では、初ブート時にディレクトリを作成するスクリプトがエラーになっていると推測する。 空のディレクトリを作っているだけなので、必要があれば、シェルのコマンドでディレクトリを作れば良いだけだと思う。
参照URL
configuration/wireless/headless
configuration/wireless/wireless-cli
remote-access/ssh/unix
How to open ssh port using ufw on Ubuntu/Debian Linux
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「RaspberryPi」カテゴリの記事
- Headless RaspberryPi(64bits)インストール方法(USB/SSD boot)(2021.06.16)
- Arduino-IDEでPicoを動かす(2021.04.01)
- Headless_RaspberryPiでSambaサーバーを動かす(2020.11.23)
- Headless_RaspberryPiでPirateAudioを使用する(2020.11.14)
- Headless_RaspberryPiをVolumioをインストールする(2020.11.08)
この記事へのコメントは終了しました。
コメント