Raspberry Pi 5をモニターなしでセットアップする。Windows PCだけでOS書き込みからSSH接続まで

モニターもmicro HDMIケーブルもなしで、Windows PCだけでRaspberry Pi 5を初期設定します。Raspberry Pi ImagerのCLIとfirstrun.shでWi-FiとSSHを仕込み、SDカード挿入から約3分でSSH接続できるまでの全手順を実測値つきで解説します。

Raspberry Pi 5をモニターなしでセットアップする。Windows PCだけでOS書き込みからSSH接続まで

こんにちは!

Qualitegプロダクト開発部です!

本稿はRaspberry Pi(ラズベリーパイ、通称ラズパイ)をインターネット越しにコントロール方法についてシリーズでお伝えいたします。

シリーズですが以下の図のように、①ヘッドレスセットアップ(今回)をやったあと、インターネット公開にむけてセキュリティ対策として②Rasberry Pi の堅牢化を行い、③インターネット側から直接Rasberry Pi内に起動したWebサーバーにアクセスできるようにします

第1回の今回は、ラズパイの入手から初期セットアップ手順に関する内容です。

図1 Raspberry Pi 5 連載の全体像(今回は①)
図1 連載の全体像。今回は①で、Windows PCだけでSSH接続まで動く状態にする

Windows 11のPCだけでOSの書き込みからSSH接続までを完了させた手順を、実測値つきでご紹介します。SDカードを挿して電源を入れてから、SSHでログインできるまでは約3分でした。

用意するもの

  • Raspberry Pi 5本体・・・本稿では4GBモデルを使います。
  • microSDカード・・・今回は64GB。初回起動時に全容量まで自動拡張されます
  • Rasberry Pi5用のヒートシンク・・・熱対策用
  • USBカードリーダー・・・SDカードにラズパイイメージを書き込みます
  • Windows 11のPC
  • USB-C電源(Raspberry Pi 5は5V/5A給電が推奨で、公式のRaspberry Pi 27W USB-C Power Supplyなどが該当します。5V/3A級の充電器でも構成によっては起動できますが、電力不足による制限や不安定動作が起きる可能性があります)

実機のセットアップ

組み立て

では、さっそくラズパイを組み立てていきましょう!

これがラズパイです。

Raspberry Pi 5本体(4GBモデル)

まず、熱対策としてヒートシンクをつけていきます。

ヒートシンクをつけるまえに、CPUチップなど発熱するパーツに付属のシリコンゴムっぽい素材を貼り付けていきます。これはサーマルパッド(熱伝導パッド)というやつですね。

サーマルパッドを発熱パーツにはっていきます

はい、すっかりサーマルパッドをはりつけましたので、次にヒートシンク本体を取り付けましょう。

絶縁プラスチックでできたネジでこんなふうに裏側からヒートシンクをとめてできあがり。

ヒートシンク本体がとりつけられました。

ファン用電源コネクタがラズパイ基盤上部にあるので、そこにヒートシンク側から出た電源ケーブル差し込みます。

ちなみに、SDカードはまだ挿しません。何もはいっていないので挿しても何もできません。

さて、ここまで数分で終わると思います。

次に、ソフトウェアをやっていきましょう。

モニターなしでラズパイをセットアップしていく

さっそくソフトウェアをセットアップしていきましょう。
今回はCLIのみでセットアップしていきます。つまりヘッドレスセットアップですね。

動作確認した環境は、

・書き込みソフト:Raspberry Pi Imager 2.0.8
・書き込んだOS:Raspberry Pi OS 64-bit(Debian 13 trixieベース、カーネル6.18)
・作業PC:Windows 11 Proです。

手順1: 書き込み先の物理ディスク番号を確認する

まずラズパイに差し込むSDカードを作る作業からです。

そのためには、専用の書き込みソフト「Raspberry Pi Imager 2.0.8」をつかいます。

SDカードへの書き込みは物理ディスク単位で行うため、最初にディスク番号を確認します。

Raspberry Pi Imager 2.0.8には、内蔵ドライブなど書き込み対象外のデバイスへの書き込みを拒否する安全機構がありますが、それでも、別のUSBストレージを取り違えればデータを消してしまうため、ディスク番号・容量・BusTypeの確認は必ず行ってください。

SDカードをカードリーダーでPCにつなぎ、PowerShellで次を実行します。

Get-Disk
Number FriendlyName           BusType SizeGB
------ ------------           ------- ------
     0 CT4000P3PSSD8          NVMe      3726
     1 Generic- SD/MMC/MS PRO USB       59.5

今回の環境では、内蔵SSDがディスク0、USBカードリーダー経由のSDカードがディスク1と表示されました。容量(59.5GB)とBusTypeがUSBであることからSDカードだと判断できますね。

以降の手順では書き込み先を \\.\PhysicalDrive1 と指定します。ディスク番号はお使いの環境で必ず読み替えてください。

手順2: Raspberry Pi ImagerとOSイメージを用意する

Raspberry Pi Imagerはwingetで入ります。

winget install --id RaspberryPiFoundation.RaspberryPiImager --silent --accept-package-agreements --accept-source-agreements

インストール先は C:\Program Files\Raspberry Pi Ltd\Imager\ です。GUIで使うのと同じ実行ファイルがCLIモードを持っていて、スクリプト用のラッパー rpi-imager-cli.cmd も同梱されています。

OSイメージは公式のダウンロードサイトから取得します。
raspios_arm64_latest というURLは常に最新の64-bit版(デスクトップあり)へリダイレクトされるので、覚えておくと便利です。

curl.exe -L --fail -o C:\qualiteg_examples\raspi\raspios.img.xz https://downloads.raspberrypi.com/raspios_arm64_latest

サイズは約1.3GBでした。xz圧縮のまま書き込みに使えるので、自分で展開する必要はありません。

手順3: 初回起動スクリプトfirstrun.shを作る

ここがヘッドレスセットアップの心臓部です。

Raspberry Pi OSに標準で入っているヘルパー imager_custom と userconf を呼び出して、ホスト名、SSH、ユーザー、Wi-Fi、キーボード配列、タイムゾーンをまとめて設定します。ファイル名は firstrun.sh とし、置き場所はどこでも構いません(次の手順で書き込み時にパスを渡します)。

#!/bin/bash
# set +e は途中のコマンドが失敗しても最後の後始末まで進めるための指定。
# 設定が反映されないときは、各コマンドの成否を個別に確認すること
set +e

/usr/lib/raspberrypi-sys-mods/imager_custom set_hostname raspberrypi
/usr/lib/raspberrypi-sys-mods/imager_custom enable_ssh
/usr/lib/userconf-pi/userconf 'pi' '$6$…(openssl passwd -6 で生成したハッシュ)'
/usr/lib/raspberrypi-sys-mods/imager_custom set_wlan 'your-ssid' 'your-wifi-password' 'JP'
/usr/lib/raspberrypi-sys-mods/imager_custom set_keymap 'jp'
/usr/lib/raspberrypi-sys-mods/imager_custom set_timezone 'Asia/Tokyo'

rm -f /boot/firstrun.sh /boot/firmware/firstrun.sh
sed -i 's| systemd.run.*||g' /boot/cmdline.txt /boot/firmware/cmdline.txt 2>/dev/null
exit 0

SSIDとWi-Fiパスワード(上記スクリプトの'your-ssid' 'your-wifi-password'の部分)はご自身のものに置き換えてください。

ーザーのパスワードは平文ではなくSHA-512ハッシュで渡します。ハッシュはGit Bashなどで次のように作れます。

openssl passwd -6 '設定したいパスワード'

末尾の2行は、スクリプトが自分自身を削除して通常起動に戻すための後始末です。Imagerが起動設定(cmdline.txt)に仕込むエントリを外しています。

ひとつだけ重要な注意があります。

このファイルの改行コードは必ずLFにしてください。

Windowsのエディタで作るとCRLFになりがちで、CRLFのままだと初回起動時にスクリプトが失敗します。SSHは有効にならず、Wi-Fiにもつながらず、モニターがないので失敗の様子も見えないという、なかなかつらい状態になります。

セキュリティ上の注意もひとつ。firstrun.sh にはWi-Fiパスワードが平文で入ります。Gitへのコミットや共有フォルダへの配置は避け、Windows側に残った作業用ファイルも不要になったら削除してください。

手順4: CLIでSDカードに書き込む

物理ディスクへの書き込みには管理者権限が必要なので、PowerShellから昇格つきで実行します。UACのダイアログが出たら許可してください。

$imgr = 'C:\Program Files\Raspberry Pi Ltd\Imager\rpi-imager.exe'
$opts = @('--cli', '--debug', '--disable-eject',
          '--first-run-script', 'C:\qualiteg_examples\raspi\firstrun.sh',
          '--log-file',         'C:\qualiteg_examples\raspi\flash-log.txt',
          'C:\qualiteg_examples\raspi\raspios.img.xz',
          '\\.\PhysicalDrive1')
Start-Process -FilePath $imgr -ArgumentList $opts -Verb RunAs -Wait

使っているオプションの意味です。

オプション役割
--cliGUIを起動せずコマンドラインモードで動かす
--first-run-script初回起動スクリプト(firstrun.sh)をSDカードに組み込む
--log-file進捗と結果をログファイルに書き出す
--debugログを詳細にする。書き込み速度の自動調整の様子も記録される
--disable-eject書き込み完了後にSDカードを自動排出しない。書き込み結果を確認したい場合に付ける

書き込み後の読み戻し検証(ベリファイ)はデフォルトで有効です。実測では、1.3GBのxzイメージの展開に53秒、書き込みと検証を合わせて5分ほどで完了しました。書き込みの遅いSDカードだとログに書き込みレイテンシの警告が出ますが、Imagerが自動でバッファ量を調整して続行するので、そのまま待てば大丈夫です。

進捗表示について補足します。今回のように Start-Process -Verb RunAs で昇格して起動した構成では、元のPowerShell側では進捗を確認できませんでした。そのため --log-file を指定し、ログファイルで進捗と結果を確認しています。ログの最後に succeeded と出ていれば成功です。

手順5: 電源を入れて3分待ち、SSHで接続する

書き込みが終わったSDカードをラズパイ5に挿しましょう。

SDスロットにさっきイメージを書き込んだmicro SDカードを挿す

そして、USB-C電源をつなぐだけで起動します。

USB Cの電源端子に電源アダプタをつなぎ、電源供給すればラズパイに電源がはいる。

Raspberry Pi 5には電源ボタンもありますが、通常の初回起動ではボタン操作は不要です。初回はファイルシステムの自動拡張、firstrun.sh の実行、再起動が順に走るので、2〜3分待ちます。基板の緑のLEDが点滅していれば起動処理中です。

待ったら、WindowsのターミナルからSSHで接続します。

ssh pi@raspberrypi.local

raspberrypi.local という名前はmDNSという仕組みで解決されます。Windows 11は標準で対応しているので、追加のソフトは要りません。今回の実測では、SDカードを挿して電源を入れてから約3分でSSHポートが開き、初期設定したユーザーでログインできました。

ログイン後の状態も確認しました。uname -a、vcgencmd measure_temp、df -h の出力の抜粋です。

Linux raspberrypi 6.18.34+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.18.34-1+rpt1 (2026-06-09) aarch64 GNU/Linux
temp=34.0'C
/dev/mmcblk0p2   58G  6.6G   49G  12% /

64GBカードの全域がルートファイルシステムに拡張済みで、CPU温度は34.0度、Wi-Fi経由でIPv4アドレスも取得できていました。

ここまでくれば、あとは普通のLinuxマシンとして使えます。

ハマりどころと回避策

今回の作業で実際に踏んだ罠を表にまとめます。

症状原因回避策
昇格して実行すると、元のPowerShellに進捗が表示されないことがある今回の Start-Process -Verb RunAs での昇格起動では、元のPowerShell側に進捗が表示されなかった(実測)--log-file でログファイルに書かせて、そちらで進捗と結果を確認する
書き込みがアクセス拒否で失敗する物理ディスクへの書き込みには管理者権限が必要Start-Process -Verb RunAs で昇格して実行する
初回起動してもWi-Fiにつながらず、SSHもできないfirstrun.sh の改行コードがCRLFになっていてスクリプトが実行に失敗しているLFで保存し直し、書き込みからやり直す
raspberrypi.local が見つからない、またはIPv6アドレスが返ってくるmDNSの名前解決がIPv6を優先することがある通常はそのまま接続できる。接続できない場合はルーターの管理画面でIPv4アドレスを確認して直接指定する
plinkでスクリプトから自動接続すると初回に固まるホストキー確認のプロンプトが標準入力のパイプからの応答を受け付けない-batch と -hostkey "SHA256:..." でフィンガープリントを明示指定してプロンプト自体を出させない

最後のplinkの罠は、SSH接続までスクリプトで自動化したい人向けの補足です。手でsshコマンドを打つ分には遭遇しません。

まとめ

モニターなしのRaspberry Pi 5セットアップは、次の5点を押さえれば安全に完走できます。

  • 書き込み前に Get-Disk で物理ディスク番号を確認する(最重要)
  • OSイメージは raspios_arm64_latest から取得し、xzのまま書き込む
  • firstrun.sh にWi-Fi、SSH、ユーザー設定を仕込む。改行コードはLF
  • 書き込みは管理者権限で実行し、結果は --log-file のログで確認する
  • 初回起動は3分待ってから ssh pi@raspberrypi.local

ログインできたら、次の一手として最初にパスワードの変更とパッケージ更新をおすすめします。

passwd
sudo apt update && sudo apt full-upgrade -y

デスクトップ画面を使いたくなったら、sudo raspi-config でVNCを有効にすると、Windowsからリモートデスクトップのように操作できます。

このあたりは別の記事で紹介する予定です。

それでは、また次回お楽しみに!

参考リンク

Read more

CEATEC 2026に出展します!AIアバター動画生成「MotionVox®」の最新版を実体験いただけます

CEATEC 2026に出展します!AIアバター動画生成「MotionVox®」の最新版を実体験いただけます

株式会社Qualitegは、2026年10月13日(火)~16日(金)に幕張メッセで開催される「CEATEC 2026」に出展いたします。今回の出展では、当社が開発したAIアバター動画生成サービス「MotionVox®」の最新版を中心に、動画生成の実演と作例をご紹介いたします。 昨年の CEATEC 2025 に続き、2年連続の出展となります。昨年の会場の様子は 出展レポート にまとめております。 出展概要 * 会期 2026年10月13日(火)~10月16日(金)10:00~17:00 * 会場 幕張メッセ(千葉県千葉市美浜区中瀬2-1) * 出展エリア ネクストジェネレーションパーク * ブース番号 ホール4 4H339 * 入場 無料(来場事前登録制) * CEATEC内特設サイト https://www.ceatec.com/nj/exhibitor_

By Qualiteg プロダクト開発部
ゼロから作るコーディングエージェント【第3回】「止まらなかった」は「進んだ」ではない。空転を数え、思考は切らずに上限だけ置く

ゼロから作るコーディングエージェント【第3回】「止まらなかった」は「進んだ」ではない。空転を数え、思考は切らずに上限だけ置く

300ターン走ってAPIが0本。「モデルの限界」と結論を書いた翌日、記録を読み直すと234ターンがツールを1度も呼んでいませんでした。空転率という指標、1つ塞ぐと次の形に移る空転、思考をオフにすると95点が71点に落ちて時間も縮まなかった話、出力枠を広げたら反対側を数える話を書きます。

By Qualiteg プロダクト開発部
Ubuntuの自動更新でカーネルだけ上がり、再起動したらGPUが消えた。NVIDIAモジュールが置き去りになる原因と3つの対策

Ubuntuの自動更新でカーネルだけ上がり、再起動したらGPUが消えた。NVIDIAモジュールが置き去りになる原因と3つの対策

Ubuntu 24.04のGPUサーバーを再起動したらnvidia-smiが動かない。原因はunattended-upgradesがカーネルだけを更新し、NVIDIAモジュールが依存関係の都合で見送られていたこと。ログで原因を突き止め、1コマンドで復旧し、apt-mark holdを含む3つの再発防止策を比べて採用した記録。

By Qualiteg プロダクト開発部
ゼロから作るコーディングエージェント【第2回】完了は「作った」ではなく「動いた」で決める。完了の門と、押し戻しに書くこと

ゼロから作るコーディングエージェント【第2回】完了は「作った」ではなく「動いた」で決める。完了の門と、押し戻しに書くこと

モデルの「完了しました」は5つの形ですり抜けました。構文検査だけ、テストは通るが動かない、待ち受けは立つが最初の要求で落ちる、起動するが仕様のAPIが無い、assertの無いテスト。完了の門を3段で閉じる設計と、押し戻しに「落ちた行と調べ方」を書いて「答え」を書かない理由を、数字つきで書きます。

By Qualiteg プロダクト開発部