Saturday and Sunday study notes

Saturday and Sunday study notes

技術調査、技術書で得た知識、ソフトウェアやツールの設計・開発について詳述します。

【Hyper-V】WinPEとinstall.wimを使ってWindowsを起動させる方法

【Hyper-V】WinPEとinstall.wimを使ってWindowsを起動させる方法
【Hyper-V】WinPEとinstall.wimを使ってWindowsを起動させる方法

Windowsの検証環境やカスタムイメージの展開において、標準のインストーラー(ISO)を使わずに、直接install.wimを適用したい場面があります。

この記事では、Hyper-V上で仮想マシンを構築し、WinPEとDISMコマンドを使用してinstall.wimからWindowsをインストールする具体的な手順を解説します。作業用のVHDX(仮想ハードディスク)を利用することで、ネットワーク越しではなくローカルドライブ経由で高速にイメージを展開できるのが特徴です。


展開の手順

展開の手順

全体の流れは、大きく分けて「仮想マシンと作業用ディスクの準備(ホストOS側)」と「WinPE上での展開作業(ゲストOS側)」の2つのフェーズに分かれます。

  1. Hyper-Vで仮想マシンと仮想ディスクを作成する

Hyper-Vマネージャーを開き、「新規」>「仮想マシン」からOSインストール用の仮想マシンを作成します。

この際、OSをインストールするためのメインの仮想ハードディスク(VHDX)も同時に作成しておきます。

詳細な手順は以下のとおりです。

Hyper-Vマネージャーを開き、「新規」>「仮想マシン」を選択します。

新規仮想マシン作成
新規仮想マシン作成

「開始する前に」のウィザードが表示された場合は、「次へ」をクリックしてください。

仮想マシンの作成 (開始する前に)
仮想マシンの作成 (開始する前に)

「名前と場所の指定」で任意の名前を設定します。

今回はWindows 11 25H2のinstall.wimをインストールするため、「Windows 11 25H2」とします。

仮想マシンの作成 (名前と場所の指定)
仮想マシンの作成 (名前と場所の指定)

「世代の指定」では、「第2世代」を指定します。

仮想マシンの作成 (世代の指定)
仮想マシンの作成 (世代の指定)

「メモリの割り当て」では、任意のメモリ容量を設定してください。

仮想マシンの作成 (メモリの割り当て)
仮想マシンの作成 (メモリの割り当て)

「ネットワークの構成」は、今回は「接続しない」で問題ありません。

ネットワーク接続は後から設定することもできます。

仮想マシンの作成 (ネットワークの構成)
仮想マシンの作成 (ネットワークの構成)

「仮想ハードディスクの接続」では、「仮想ハードディスクを作成する」を選択し、任意の名前、場所、サイズを設定します。

仮想マシンの作成 (仮想ハードディスクの接続)
仮想マシンの作成 (仮想ハードディスクの接続)

「インストールオプション」では、「後でオペレーティングシステムをインストールする」を選択してください。

仮想マシンの作成 (インストールオプション)
仮想マシンの作成 (インストールオプション)

最後に仮想マシンの内容を確認し、「完了」を選択します。

仮想マシンの作成 (新規作成ウィザードの完了)
仮想マシンの作成 (新規作成ウィザードの完了)

次に、作成した仮想マシンを右クリックして「設定」を起動します。

設定の起動
設定の起動

SCSIコントローラーの中にDVDドライブを追加します。

DVDドライブの追加
DVDドライブの追加

メディアとして使用するイメージファイルを選択します。

仮想DVDドライブのメディア指定
仮想DVDドライブのメディア指定

Windows PEのISOファイルを指定しました。

イメージファイルの指定
イメージファイルの指定

次に、SCSIコントローラーに「ハードドライブ」を追加します。

ハードドライブの追加
ハードドライブの追加

仮想ハードディスクの「新規」を選択します。

仮想ハードディスクの作成
仮想ハードディスクの作成

ウィザードが表示されたら、「次へ」を選択します。

開始する前に
開始する前に

ディスクの種類の選択では、今回は一時的なファイルを置くだけなので、「容量固定」を選択します。

ディスクの種類の選択
ディスクの種類の選択

名前と場所は、任意の場所を選択してください。

名前と場所の指定
名前と場所の指定

「新しい空の仮想ハードディスクを作成する」を選択し、サイズは10GB程度にします。

ディスクの構成
ディスクの構成

内容を確認し、問題がなければ「完了」を選択します。

仮想ハードディスクの新規作成ウィザードの完了
仮想ハードディスクの新規作成ウィザードの完了

チェックポイントの「チェックポイントを有効にする」のチェックを外し、「OK」を押します。

チェックポイントの無効化
チェックポイントの無効化

次に、作成した仮想ハードディスクのフォルダを開きます。

ディスクの編集
ディスクの編集

仮想ハードディスクを右クリックしてマウントします。

仮想ハードディスクのマウント
仮想ハードディスクのマウント

次に、Windowsのスタートメニューを右クリックし、「ディスクの管理」を選択します。

ディスクの管理
ディスクの管理

ディスクの初期化画面が表示されるので、「GPT」を選択して初期化します。

ディスクの初期化
ディスクの初期化

マウントした仮想ハードディスクを右クリックし、「新しいシンプルボリューム」を選択します。

新しいシンプルボリュームの作成
新しいシンプルボリュームの作成

「新しいシンプルボリュームウィザードの開始」では、「次へ」を選択します。

新しいシンプルボリュームウィザードの開始
新しいシンプルボリュームウィザードの開始

シンプルボリュームのサイズを指定します。

ボリュームサイズの指定
ボリュームサイズの指定

適切なドライブ文字を割り当てます。

ドライブ文字またはパスの割り当て
ドライブ文字またはパスの割り当て

次に、NTFSでフォーマットします。

パーティションのフォーマット
パーティションのフォーマット

内容を確認し、「完了」を選択します。

新しいシンプルボリュームウィザードの完了
新しいシンプルボリュームウィザードの完了

仮想ハードディスクに新しいシンプルボリュームが作成されました。

ディスクの管理
ディスクの管理

次に、使用するinstall.wimを用意します。

今回は、Windows 11のインストールISOファイルをダウンロードします。

Windows 11のインストールISOファイルをマウントし、sourcesフォルダ内にあるinstall.wimを仮想ハードディスクのボリュームにコピーします。

install.wimのコピー
install.wimのコピー

また、パーティション構成には、下記のCreatePartitions-UEFI.txtを使用するため、install.wimと同じ仮想ハードディスクのボリュームにコピーします。

コピー後の状態です。

仮想ハードディスクにファイルの配置
仮想ハードディスクにファイルの配置

次に、マウントした仮想ハードディスクを右クリックし、「取り出し」を選択してマウントを解除します。

仮想ハードディスクの取り出し
仮想ハードディスクの取り出し

Hyper-Vマネージャーから作成した仮想マシンを起動し、「接続」を選択します。

Hyper-VマネージャーからWindows PEの起動
Hyper-VマネージャーからWindows PEの起動

ウィザードが表示されるので、「起動」を選択します。

Hyper-Vマネージャーの起動
Hyper-Vマネージャーの起動

Windows PEが起動します。

Windows PEの起動
Windows PEの起動

diskpartを実行し、

list disk

でディスク情報を確認します。

ディスクの確認
ディスクの確認

次に、

list vol

でボリュームを確認します。

ボリュームの確認
ボリュームの確認

先ほど確認したボリュームへ移動します。

今回はCドライブへ移動するので、

C:

と入力します。

その後、

dir /a

を実行し、install.wimとCreatePartitions-UEFI.txtが存在していることを確認します。

そして、

diskpart /s CreatePartitions-UEFI.txt

を実行して、パーティションを作成します。

パーティションの作成
パーティションの作成

下記のようにパーティションの作成が完了します。

パーティション作成の完了
パーティション作成の完了

次に、install.wimのインデックス番号を確認します。

インデックス番号の確認方法は、下記を参考にしてください。

確認したインデックス番号のうち、インストールしたい番号を指定して、下記のコマンドでインストールします。

Dism /Apply-Image /ImageFile:install.wim /Index:[インデックス番号] /ApplyDir:W:\

install.wimの適用
install.wimの適用

install.wimの適用 (完了)
install.wimの適用 (完了)

次に、インストールしたWindowsの起動設定を行います。

下記のコマンドを実行します。

bcdboot W:\Windows

起動設定
起動設定

そして、下記のコマンドでWindows PEを再起動します。

wpeutil reboot

WinPEの再起動
WinPEの再起動

再起動すると、先ほどinstall.wimから適用したWindowsが起動します。

Windowsの起動
Windowsの起動

その後、OOBEが起動し、install.wimから適用したWindowsをHyper-V環境で起動できました。

OOBEの起動
OOBEの起動

【Win11】ADKとADKPEのオフラインインストール方法

【Win11】ADKとADKPEのオフラインインストール方法
【Win11】ADKとADKPEのオフラインインストール方法

この記事は次のような人におすすめ!

・Windows ADKをオフラインでインストールしたい人
・Windows PEをインターネット接続せずに作成したい人

ADKとは

ADK (Assessment and Deployment Kit) とはWindowsの展開や評価に必要なツール群をまとめたキットです。
企業やIT管理者がWindowsを大量導入・カスタマイズする際に使われます。

Windowsイメージのカスタマイズと展開

Deployment Tools(展開ツール)やDISM(Deployment Image Servicing and Management)を使って、Windowsのインストールイメージ(WIMファイル)を編集・構成できます。
Sysprepを使えば、複数のPCに同じ構成でWindowsを展開可能です。

Windows PE (Preinstallation Environment) の作成

軽量なWindows環境をUSBメモリなどに作成し、インストールやトラブルシューティングに利用できます。
Windows PEはADKとは別の「Windows PEアドオン」として提供され、ADKインストール後に追加します。

パフォーマンスと互換性の評価

Windows Assessment ToolkitやWindows Performance Toolkitを使って、システムやアプリケーションの性能を測定・分析できます。
Compatibility AdministratorやStandard User Analyzerで、アプリの互換性チェックも可能です。

ADKのオフラインインストール方法

ADKをオフラインでインストールする方法を紹介します。

まずは下記のサイトにアクセスします。
learn.microsoft.com

次にADK (adksetup.exe) をダウンロードしましょう。

ADKのダウンロードWebページ
ADKのダウンロードWebページ

ダウンロードしてきたadksetup.exeを実行します。

adksetup.exe
adksetup.exe

次に上ではなく下の"個別のコンピューターにインストールするためにWindows アセスメント & デプロイメント キット をダウンロードします" を選択します。

>

ADK 場所の指定
<

Windowsキットが分析情報を収集できるようにするかを選択します。
Microsoftに対して分析情報を収集されたくない場合は"いいえ"を選択しましょう。

Windowsキットプライバシー
Windowsキットプライバシー

使用許諾について確認し、同意します。

使用許諾契約
使用許諾契約

そうすると、ダウンロードが始まります。

機能をダウンロード
機能をダウンロード

数分でダウンロードが完了します。

ダウンロードが完了
ダウンロードが完了

すると指定したフォルダにダウンロードしたファイルが置かれます。
ダウンロードしてきたファイルをコピーし、オフラインインストールしたいパソコンにコピーします。

adksetup.exe
adksetup.exe

オフラインインストールしたいパソコン上でadksetup.exeを実行します。

場所の指定 (オフライン)
場所の指定 (オフライン)

MicrosoftがWindowsの分析情報を収集できるかを選択します。
Microsoftに対して分析情報を収集されたくない場合は"いいえ"を選択しましょう。

Windows キット プライバシー (オフライン)
Windows キット プライバシー (オフライン)

使用許諾契約を確認し、同意します。

使用許諾契約 (オフライン)
使用許諾契約 (オフライン)

インストールする機能にチェックをつけてください。
そして、インストールを行います。

ADKのインストールする機能
ADKのインストールする機能

これでオフラインでADKのインストールが完了しました。

ADKPEのオフラインインストール方法

adkwinpesetup.exeを実行します。
場所の指定で「個別のコンピューターにインストールするためにWindowsアセスメント&デプロイメント」

ADKPEの場所の指定
ADKPEの場所の指定


Windowsキットプライバシーで、MicrosoftがWindowsキトの分析情報を収集できるようにするか選択します。
Microsoftが収集できないようにするには"いいえ"を選択します。

Windowsキットプライバシー
Windowsキットプライバシー

使用許諾契約を確認して同意します。

使用許諾契約
使用許諾契約

するとダウンロードが始まります。

機能のダウンロード
機能のダウンロード

ダウンロードが完了しました。

ダウンロード完了
ダウンロード完了

すると指定したフォルダにダウンロードしたファイルが置かれます。
ダウンロードしてきたファイルをコピーし、オフラインインストールしたいパソコンにコピーします。

ダウンロード完了
ダウンロード完了

オフラインインストールしたいパソコン上でadkwinpesetup.exeを実行します。

場所の指定 (オフライン)
場所の指定 (オフライン)

MicrosoftがWindowsの分析情報を収集できるかを選択します。
Microsoftに対して分析情報を収集されたくない場合は"いいえ"を選択しましょう。

Windows キット プライバシー (オフライン)
Windows キット プライバシー (オフライン)

使用許諾契約について内容を確認し、同意します。

使用許諾契約 (オフライン)
使用許諾契約 (オフライン)

インストールする機能を選択します。
Windows PEの場合、Windows Preinstallation Environment (Windows PE)しかありません。
そして、インストールを選択します。

インストールを行う機能の選択
インストールを行う機能の選択

するとインストールが始まります。

機能のインストール中
機能のインストール中

そしてインストールが完了しました。

Windows PEのインストール完了
Windows PEのインストール完了

インストールされているアプリに問題なくWindowsアセスメント&デプロイメントキット と Windowsアセスメント&キット Windows Preinstallation Environmentがあることを確認できました。

インストールされているアプリ
インストールされているアプリ

【Windows 11】WSLをオフラインで有効化

【Windows 11】WSLをオフラインで有効化
【Windows 11】WSLをオフラインで有効化

この記事はこのような人におすすめ

  • Windows Subsystem for Linuxをオフラインで有効化したい人
  • WSLを有効化したい人

手順

まずはWindows 11のインストールメディアからinstall.wimを取ってきます。
install.wimはWindows 11のインストールメディアのsourcesフォルダにあります。

Install.wimの場所
install.wimの場所


また、インデックス番号によってWindowsのProやHomeなどのエディションが異なります。
どのインデックス番号にどのエディションが格納されているかは下記を参照してください。
shrimpmaru.hatenablog.com

今回はWindows 11 Proで試してみます。
インデックス番号は6です。
まずはinstall.wimを下記のDISMコマンドにMount-imageオプションを使用してマウントします。

DISM /Mount-image /imagefile:<wimファイルのパス> /Index:<イメージのインデックス> /MountDir:<マウントするディレクトリ>

下記コマンドでWindows Subsystem for Linuxを有効化します。

DISM /image:<マウントしたディレクトリ> /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

また、仮想マシンプラットフォーム (Virtual Machine Platform) も有効にしておきます。

DISM /image:<マウントしたディレクトリ> /enable-feature /featurename:VirtualMachinePlatform /all /norestart

最後に変更内容をコミットします。

DISM /Unmount-Image /MountDir:<マウントしたディレクトリ> /Discard
WSL有効化時のコマンド
WSL有効化時のコマンド

そして、作成したinstall.wimを使用してWindows 11をインストールすると、Windows Subsystem for Linuxが有効化されていました。

WSLがオフラインで有効化された画面
WSLがオフラインで有効化された画面

よく使うDISMコマンドまとめ

よく使うDISMコマンドまとめ
よく使うDISMコマンドまとめ

この記事はこんな人におすすめ

  • DISMコマンドをよく使う人
  • DISMコマンドを使用してwimやパッケージを操作する人

DISMコマンドのまとめ

DISMコマンドとはDeployment Image Service and Management Toolです。
イメージの操作を行うことができます。
learn.microsoft.com
よく使うDISMコマンドをまとめて備忘録とします。

イメージのマウント/アンマウント

イメージをマウントするとき

DISM /Mount-image /imagefile:<wimファイルのパス> /Index:<イメージのインデックス> /MountDir:<マウントするディレクトリ>

イメージのマウントを解除するとき (コミットあり)

Dism /Unmount-Image /MountDir:<マウントしたディレクトリ> /Commit


イメージのマウントを解除するとき (コミットなし)

Dism /Unmount-Image /MountDir:<マウントしたディレクトリ> /Discard

イメージにパッケージの追加

Dism /Image:<マウントしたディレクトリ> /Add-Package /PackagePath:<cabファイル もしくは msuファイル>

機能の有効化

Dism /Image:<マウントしたディレクトリ> /Enable-feature /FeatureName:<機能名> /all /norestart

マウントされているファイルの確認

Dism /Get-MountedWimInfo

VSCodeで非推奨の拡張機能をインストール

VSCodeで非推奨の拡張機能をインストール

VSCodeで非推奨の拡張機能をインストール

VSCodeで以前使用していた拡張機能をインストールしようとしたところ、「この拡張機能は、メンテナンスされなくなったため、非推奨です (This extension is deprecated.)」と表示されており、インストールできなくなっていました。

これは、VSCodeのMay 2022 (version 1.68)で導入された機能です。

非推奨の拡張機能

非推奨の拡張機能

RubyやDebugger for Unityが非推奨となっており、どのようにインストールするかを探してみた。
まずはVSIXファイルからインストールできないか試してみましたが、VSIXファイルのダウンロード自体が見つかりませんでした。

VSIXファイルのインストールを試行

VSIXファイルのインストールを試行

そのため、別のやり方を用いてVSCodeの非推奨になった拡張機能のインストールをしてみようと思います。

非推奨の拡張機能ですので、使用する場合は自己責任でお願いします。

方法

VSCodeの非推奨の拡張機能をインストールする方法はコマンドプロンプトを使用してインストールします。

code --install-extension [インストールする拡張機能名]

を使用してください。

[インストールする拡張機能名]の確認方法は下記です。

Unique Identifierに記載されている値が[インストールする拡張機能名]です。

 

インストールする拡張機能のユニークID

インストールする拡張機能のユニークID

そして、code --install-extension [インストールする拡張機能名] を実行してみました。

コマンドプロンプトによる拡張機能のインストール

コマンドプロンプトによる拡張機能のインストール

VSCodeに拡張機能のインストールが完了しました。

インストールがうまくいかないとき

プロキシが設定されている環境のとき、拡張機能のインストールに失敗することがあります。

その場合は、VSCodeにプロキシの設定を行うことでインストールすることができます。

[ファイル (File)] > [基本設定 (Preferences)] > [設定 (Settings)] の順で開きます。

VSCodeのプロキシ設定画面の開き方

VSCodeのプロキシ設定画面の開き方

その後、設定画面で「http.proxy」と検索します。

そしてHttp.Proxyの欄にご自身の環境のプロキシを入力してください。

VSCodeのプロキシ設定

VSCodeのプロキシ設定

 

WindowsインストールのISOファイル作成方法

WindowsインストールのISOファイル作成方法

WindowsインストールのISOファイル作成方法

■この記事はこのような人におすすめ

  • WindowsをインストールするときのISOファイルを作成したい人
  • WindowsのクリーンインストールのISOファイルを編集後に再度ISOファイルを作成したい人
  • WindowsのインストールメディアをISOファイルとして保存や配布したい人

■準備

以下2つを準備してください。

learn.microsoft.com

  • Windowsのインストールメディア

今回はWindowsのインストールメディアを下記からダウンロードします。すでにお持ちのWindowsのインストールメディアでも問題ないです。Windowsのインストールメディア (ISOファイル) を編集して、再度ISOファイルに固めなおします。

www.microsoft.com

■ISOファイルの作成

Windows ADKをインストールします。

そして、スタートメニューから「展開およびイメージング ツール環境」を管理者権限で起動します。

展開およびイメージングツール環境

展開およびイメージングツール環境

下記のコマンドでisoファイルを作成することができます。

oscdimg -b[efisys.binのパス] -u1 -udfver102 [setup.exeの存在するフォルダ] [作成するisoファイル名]

上記の-bと[efisys.binのパス]の間はスペースは"なし"です。

例えば、下記のフォルダ (D:¥working¥win11_24H2) で試してみます。

oscdimgを実行するフォルダ例

oscdimgを実行するフォルダ例

今回の場合は下記コマンドを実行しました。

oscdimg -bwin11_24H2\efi\microsoft\boot\efisys.bin -u1 -udfver102 d:\working\win11_24H2 d:\working\test.iso

ISOファイルの作成例

ISOファイルの作成例

すると、d:\workingフォルダにtest.isoというWindowsのISOファイルを作成することができました。

■解説

oscdimgコマンドはWindows PEのISOファイルを作成するためのコマンドです。

WindowsのインストールメディアはWindows PEが起動し、Windows PE上からWindows OSをインストールしています。

そのため、oscdimgコマンドによってWindows PEが起動できるISO作成しています。

learn.microsoft.com

-bオプション

-b<bootSecorFile>で指定します。

etfsboot.com: BIOS(レガシー)ブート用のブートセクター

efisys.bin: UEFIブート用のブートセクター

efisys_noprompt.bin: UEFIブート用 (「Press any key to boot from CD/DVD」のメッセージなし)

-u1オプション

ISO 9660 Level 1 のファイル名制限を適用します。どのような意味かというと

  • ファイル名を 最大8文字のファイル名 + 3文字の拡張子 (いわゆる「8.3形式」)に制限
  • すべての文字を大文字に変換
  • 許可される文字は英数字 (A-Z, 0-9) と一部の記号(_ や . など)のみ

となります。

-udfver102オプション

UDF(Universal Disk Format)バージョン 1.02 を指定して ISO イメージを作成します。どのような意味かというと

  • UDF 1.02 形式で ISO を作成
  • UDF 1.02 は Windows 98 以降の OS で広くサポートされており、特に DVD やブータブルメディア での互換性が高いバージョン
  • UDF は ISO 9660 に比べて長いファイル名や大きなファイルサイズをサポート

 

Raspberry Pi 4をキーボードとして使用

Raspberry Pi 4をキーボードとして使用

Raspberry Pi 4をキーボードとして使用

Raspberry Pi 4をキーボードとして使用

Raspberry Pi 4をキーボードとして使用


Raspberry Pi 4 BをWindows PCに接続して、Raspberry Piをキーボードとして動作させる方法を紹介します。

この記事は次の人におすすめ

  • Raspberry Piをキーボードとして使用させたい人
  • Windows PCに独自の外部キーボードを接続させたい人

必要なもの

以下は動作確認のために使用したものです。

手順

1. Windows PCに以下サイトからRaspberry Pi Imagerを使用してSDカードに64bitのRaspberry Pi OSをインストール

www.raspberrypi.com

2. SDカード内の /boot/config.txt の末尾に以下を追記する

dtoverlay=dwc2

3. SDカード内の /boot/cmdline.txt のrootwait の後ろに書きを追記する

modules-load=dwc2,libcomposite

3. Raspberry Pi OSを入れたSDカードをRaspberry Piに挿入してRaspberry Piを立ち上げる

4. /usr/local/bin/setup_usb_gadget.sh を作成して以下のファイルを作成する

#!/bin/bash

# libcomposite をロード
modprobe libcomposite

# configfs の設定
cd /sys/kernel/config/usb_gadget/
mkdir -p g1
cd g1

# デバイスディスクリプタの設定
echo 0x1d6b > idVendor
echo 0x0104 > idProduct
echo 0x0100 > bcdDevice
echo 0x0200 > bcdUSB

# ストリングディスクリプタの設定
mkdir -p strings/0x409
echo "12345678" > strings/0x409/serialnumber
echo "KeyboardTestCCN." > strings/0x409/manufacturer
echo "Generic USB Keyboard" > strings/0x409/product

# HID 設定
mkdir -p functions/hid.usb0
echo 1 > functions/hid.usb0/protocol
echo 0 > functions/hid.usb0/subclass
echo 8 > functions/hid.usb0/report_length
echo -ne '\x05\x01\x09\x06\xa1\x01\x05\x07\x19\xe0\x29\xe7\x15\x00\x25\x01\x75\x01\x95\x08\x81\x02\x95\x01\x75\x08\x81\x03\x95\x05\x75\x01\x05\x08\x19\x01\x29\x05\x91\x02\x95\x01\x75\x03\x91\x03\x95\x06\x75\x08\x15\x00\x25\x65\x05\x07\x19\x00\x29\x65\x81\x00\xc0' > functions/hid.usb0/report_desc

# コンフィグレーションディスクリプタの設定
mkdir -p configs/c.1
echo 250 > configs/c.1/MaxPower
mkdir -p configs/c.1/strings/0x409
echo "Config 1" > configs/c.1/strings/0x409/configuration

# HID をコンフィグにリンク
ln -s functions/hid.usb0 configs/c.1

# ガジェット有効化
ls /sys/class/udc > UDC

# 権限変更
chmod 777 /dev/hidg0

5. sudo chmod +x /usr/local/bin/setup_usb_gadget.sh を実行して実行可能にする

6. /etc/systemd/system/usb_gadget.service にサービスファイルを作成する

[Unit]
Description=Setup USB Gadget
After=network.target sysinit.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/setup_usb_gadget.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

7. 以下コマンドを実行してサービスを有効化する

sudo systemctl enable usb_gadget.service
sudo systemctl start usb_gadget.service

もしも上記でサービスを有効化できない場合は、古い手法ですが sudo nano /etc/rc.local を実行して /usr/local/bin/setup_usb_gadget.sh をexit 0 の前に記載し、sudo chmod +x /etc/rc.local を実行してください。

8. sudo reboot を実行して再起動します
9. 再起動後に ls /sys/kernel/config/usb_gadget/g1 を実行してg1フォルダが作成できていることを確認します

私が試したときはg1フォルダが作成されておらず、改行コードがUnix形式になっていなかったので下記コマンドを実行したところうまくいきました。

sudo dos2unix /usr/local/bin/setup_usb_gadget.sh

10. 次にキーボードに操作を送るコマンドを作成します。

/usr/local/bin/send_command_to_hid.sh というファイルを作成し、下記のような内容にします。

#!/bin/bash

# 起動後30秒待つ
sleep 30

# Tabキーを押す
echo -ne "\0\0\x2b\0\0\0\0\0" > /dev/hidg0
sleep 0.1
# キーを離す
echo -ne "\0\0\0\0\0\0\0\0" > /dev/hidg0

# 5秒待つ
sleep 5

# スペースキーを押す
echo -ne "\0\0\x2c\0\0\0\0\0" > /dev/hidg0
sleep 0.1
# キーを離す
echo -ne "\0\0\0\0\0\0\0\0" > /dev/hidg0

# 5秒待つ
sleep 5

# Enterキーを押す
echo -ne "\0\0\x28\0\0\0\0\0" > /dev/hidg0
sleep 0.1
# キーを離す
echo -ne "\0\0\0\0\0\0\0\0" > /dev/hidg0

11. sudo chmod +x /usr/local/bin/send_command_to_hid.sh を実行してスクリプトを実行可能にします

12. /etc/systemd/system/send_command_to_hid.service というファイルを作成し、下記内容にします

[Unit]
Description=Send "a" to HID device
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/send_command_to_hid.sh

[Install]
WantedBy=multi-user.target

13. sudo systemctl enable send_command_to_hid.servic を実行してサービスを有効化しておきます

14. Windows PCにUSBケーブルを使用してRaspberry Piを接続してRaspberry Piを再起動します

 

手順としては以上です。

今回はRaspberry Piが起動後30秒待ち、Tab、スペース、Enterの順で押させるようにしました。