【ディスプレイ・マウス・キーボード不要】ラズパイでのリモート開発まとめ!

5月 27, 2023

この記事では, ディスプレイ, マウス, キーボードが不要なラズパイでのリモート開発の方法をまとめています.
ラズパイを開発する際, その操作にマウスやキーボード, 操作結果の確認にディスプレイを必要とします. ただしこれらの周辺機器が不要であれば, コストやスペース的に嬉しいです. 今回はPCからラズパイにリモート接続することで, 周辺機器がいらないラズパイ開発を紹介します.
ラズパイを開発対象とし, その設定方法からPC側の設定まで詳しく解説します. また, SSHやVNC等の接続方式の選択やIPアドレスの固定化, 解像度の変更など, リモート接続に必要な設定についても触れています. これらの設定を行うことで, どこからでもラズパイにアクセスし, 開発を行うことが可能になります.

準備したもの

開発対象としてはRaspberryPi 4を想定しています.

5V 3AのACアダプターで, 通電のON/OFFスイッチがついているものを選びました.

公式で8GB以上のものが推奨されているので, 32GBのものを選びました.

ラズパイOSイメージの入ったMicroSDカードの作成

Raspberry Pi Imagerを使ってラズパイOSイメージの入ったMicroSDカードの作成をします.

WiFiの設定を予め行っておき, ラズパイOS初回起動時からリモートアクセスできるようにしておきます.
ラズパイOS起動後にWiFi設定を行おうとすると, その設定のためにディスプレイやキーボードが必要になってきます. 周辺機器を最初から使用しない場合は, WiFi設定を予め行っておきましょう.
WiFiの設定は黒丸で囲んだボタンから行えます.

“Wi-Fiを設定する"からSSIDとパスワードを入力します.

ラズパイ側の設定

ラズパイをリモート接続して開発する場合, 下記の設定が必要になってきます.
これらの説明をしていきます.

  • SSHやVNC等の接続方式を決め, それぞれの接続の許可
  • IPアドレスの固定
  • ラズパイのGUI操作をする場合, リモート接続時のラズパイの解像度の変更

SSH

OSイメージをSDカードに書き込んだ際にsshの設定が行われていたら, 既にこのステップはスキップできます.
初回起動時からディスプレイ・キーボード・マウス無しでリモートアクセスしたい方はSSH接続して, リモートアクセスしてください.

CUIでラズパイにリモート接続する場合, SSHという接続方法があります. SSHを通してPCからラズパイのコマンドラインを操作できます. セキュリティ上, デフォルトではSSHによるラズパイへの外部アクセスを許可していないので, Preferences->Raspberry Pi Configuration->Interfaces->SSHの設定を有効にします.

VNC

GUIでラズパイにリモート接続する場合, VNCという接続方法があります. VNCを通してPCからラズパイ画面の操作ができます. SSHと同様に, セキュリティ上, デフォルトではVNCによるラズパイへの外部アクセスを許可していないので, Preferences->Raspberry Pi Configuration->Interfaces->VNCの設定を有効にします.

IPアドレスの固定化

ある日リモート接続しようとすると何もしていないのに接続できなくなることが有ります.

その一因としてはラズパイのIPアドレスが突然自動で変更して, 設定したIPアドレスと不一致になり, 接続が確率できなくなることがあります.

その状態では不便なので, IPアドレスを固定する設定を以下の通りに行います.

まずはラズパイのIPアドレスを把握するため, ifconfigコマンドでIPアドレスを取得します.

ifconfig

有線LANはeth0, 無線LANはwlan0のinetに表示されているアドレスがIPアドレスです.

eth0: …
inet 192.168.1.100

IPアドレスの固定化にはルーター(ゲートウェイ)のIPアドレス, DNSサーバーのIPアドレスが必要なので, 調べておきます.

ルーターのIPアドレスは, 通常ネットワーク上での「デフォルトゲートウェイ」として知られています. 以下のコマンドをターミナルで実行して, 現在のデフォルトゲートウェイを表示できます.

ip route | grep default

このコマンドは, ネットワークルーティングテーブルの中からデフォルトゲートウェイを抽出します. 出力は通常以下のようになります.

default via 192.168.1.1 dev eth0 or wlan0

DNSサーバーのIPアドレスを調べるには, resolv.confというファイルを参照します. 以下のコマンドをターミナルで実行して, このファイルの内容を表示できます.

cat /etc/resolv.conf

このコマンドは, resolv.confファイルの内容を表示します. 出力は通常以下のようになります.

nameserver 192.168.1.1

上述の通り調べたラズパイのIPアドレス, ルーター(ゲートウェイ)のIPアドレス, DNSサーバーのIPアドレスを以下のファイルに設定します.

sudo nano /etc/dhcpcd.conf

static ip_address指定の際, 調べたIPアドレスの語尾に/24をつけて設定します. 調べたIPアドレスが192.168.1.100であれば, 192.168.1.100/24と設定します.

既にネットワーク上の他のデバイスに割り当てられているIPアドレスを選ばないようにします。これはIPアドレスの競合を引き起こし、ネットワーク上の問題を引き起こす可能性があります。

interface eth0 or wlan0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

/etc/dhcpcd.confの編集ではなく, GUI上からの変更も可能です.
ネットワークアイコンを右クリックし, Wireless & Wired network settingsにeth0かwlan0かどうかを選択し, ラズパイのIPアドレス, ルーター(ゲートウェイ)のIPアドレス, DNSサーバーのIPアドレスを下図の通りに設定します.

最後に, 新しい設定を反映するためにラズパイを再起動します.

sudo reboot

解像度の変更

VNCでリモート接続する場合, 画面をGUI操作できるのですが, ラズパイのリモートアクセス時のデフォルトの解像度は720×480という設定で, 画面全てを表示できなく, 不便です. 画面全体が見えるように解像度の変更をしましょう.

Preference->Raspberry Pi Configuration->Display->Headless Resolutionの設定値を1920×1080に変更すると, 画面全体が見えるようになります.

PC側の設定

ファイアウォールの設定

PC側でファイアウォールを設定している場合, SSHやVNC接続ポートを開けておきます.

# for SSH
sudo ufw allow 22

# for VNC
sudo ufw allow 5900

# after giving permittion, reload ufw
sudo ufw reload

SSH

初回起動時からリモート接続する場合

初回起動時からディスプレイ・キーボード・マウス無しでリモートアクセスしたい方はSSH接続して, リモートアクセスしてください.

リモートアクセスにはラズパイのIPアドレスが必要になるので, 予め把握しておきます.
ラズパイのIPアドレスを把握する際はnmapコマンドでラズパイのIPアドレスに割り当てられていそうなアドレスに一斉にpingを送り, 反応が返ってくるのを見ます.

以下のコマンドはIPアドレスの192.168.1.0から192.168.1.255までpingを送り, そのネットワークに繋がっているかどうかを見ます.

nmap -v -sn 192.168.1.0/24

以下がnmapコマンドの反応で, そのほとんどはネットワークに繋がっていないので,[host down]になっています.
192.168.1.8はpingコマンドを送ったPCで, 当然ネットワークに繋がっているので"Host is up"になっています.
192.168.1.1はgatewayとあり, ルーターのIPアドレスです.
今回は結果的に192.168.1.5がラズパイのIPアドレスに割り当てられていました.

map scan report for 192.168.1.0 [host down]
Nmap scan report for _gateway (192.168.1.1)
Host is up (0.00091s latency).
Nmap scan report for 192.168.1.2 [host down]
Nmap scan report for 192.168.1.3 [host down]
Nmap scan report for 192.168.1.4 [host down]
Nmap scan report for 192.168.1.5
Host is up (0.0020s latency).
Nmap scan report for 192.168.1.6 [host down]
Nmap scan report for 192.168.1.7 [host down]
Nmap scan report for Host PC (192.168.1.8)
Host is up (0.00087s latency).
Nmap scan report for 192.168.1.9 [host down]
Nmap scan report for 192.168.1.10 [host down]
Nmap scan report for 192.168.1.11 [host down]

上記で得られたラズパイのIPアドレスを使ってSSH接続します.

PCがUbuntuの場合

ssh ラズパイのユーザー名@ラズパイのIPアドレス

VNC接続する方はSSH接続後, 下記コマンドからVNC接続の許可にする設定を行い, PCからVNC接続できるようにします.

sudo raspi-config

Interface Options -> VNCを選択し, VNC接続を許可.

Visual Studio Code + Remote SSH

Visual Studio Code + Remote SSHがSSH接続する上で便利なので, この方法を紹介します.
フォルダ表示され, ファイル表示もVisual Studio Code仕様なので見やすいです.

Visual Studio CodeのライブラリからRemote – SSHをインストールします.

新しくできたPCアイコンからSSHの+ボタンから"新しいリモート"を選択します.
リモートエクスプローラーが"リモート"になっていることを確認します.
ウィンドウが出てくるので, 下記コマンドを入力します.

ssh ラズパイのユーザー名@ラズパイのIPアドレス

これでラズパイにSSH接続できます.

リモートホストキーが変更されたため、ポート転送は無効になっています。"というエラー

“リモートホストキーが変更されたため、ポート転送は無効になっています。"というエラーが生じることがあり, これは以前設定したリモートホストキーが残ってしまっているために発生しています. 以前sshに使用したIPアドレスと同じものを使用すると発生することがあるようです.

リモートホストキーファイルの記憶は"~/.ssh/known_hosts"で行っており, このファイルから以前同じIPアドレスで使用していたリモートホストキーを削除する必要が有ります.

その削除には下記コマンドを用いて行うことができ, 削除後は再度リモートアクセスすることで, 接続が確率されます. “xxx.xxx.xxx.xxx"はラズパイのIPアドレスに置き換えます.

ssh-keygen -R xxx.xxx.xxx.xxx

VNC

画面をGUI操作する場合はVNC接続が有効です. VNC接続ではVNC Viewerを用いて画面操作します.

VNC ViewerとしてはRealVNCがあります. ラズパイにはRealVNCが標準で搭載されており, PC側もこれを使用します. 下記リンクから使用しているPCのOSを選択し, VNC Viewerをダウンロードします.

ダウンロード後, インストールします.

# install VNC Viewer
sudo apt install ./VNC-Viewer-7.1.0-Linux-x64.deb

インストール後, ラズパイのIPアドレスを入力し, リモート接続することができるようになります.

おわりに

ディスプレイ・マウス・キーボード不要のラズパイでのリモート開発について解説しました. この記事を参考に, ラズパイの設定からPC側の設定まで一通り行うことで, リモートからでもラズパイを自由に操作できるようになるでしょう.