推奨事項:コンピュータのシャットダウン時にgrub-rebootオプションを設定してください。

推奨事項:コンピュータのシャットダウン時にgrub-rebootオプションを設定してください。

私は「Marcus」というニックネームを付けたデュアルブートコンピュータを持っています。私はRaspberry Piでコマンドを呼び出すことができるAlexaアプリを作成しました。

PiはMarcusの電源を入れたり、再起動したり、電源を切ったりできます。

Marcusにログインし、grub-rebootを実行し、コンピュータをWindowsに再起動するコマンドを実行するコマンドがあります。これを行うには、明らかにMarcusの電源を入れてLinuxで起動する必要があります。

grubの起動時に読み込む変数を設定できるようにしたい。ベンダーキーがオプションのようです。ネットワークでファイルを使用できるようにすることはできますが、grubからファイルを読み取る方法はわかりません。ネットワークファイルを読み取ることができる場合は、それを使用してシステムが起動するOSを制御できます。

ここでどんなアイデアにも大いに感謝します。

答え1

問題は、ネットワークから起動すると、システムファームウェア(BIOSまたはUEFI)がネットワークドライバを提供することです。ファームウェアが提供するネットワークドライバはローカルディスクから起動するとアクティブにならない可能性があるため、GRUBはファームウェアを有効にする方法(おそらくUEFIを使用して?)を知らない限り、独自のネットワークスタックを提供する必要があります。それでは、MarcusシステムはBIOSまたはUEFIを使用しますが、どのタイプのネットワークカードを使用しますか?

GRUBのベンダーキー機能を使用すると機能しないようです。特殊ボタンを使用するかどうかを決定するには、BIOS設定NVRAMの特定のバイトを読み取る必要があります。したがって、システム起動とGRUBエントリの間に何らかの方法でこの値を変更する必要があります。これは、独自のBIOS拡張、カスタムブートローダ、および/またはある種のカスタムハードウェアを実行することを意味します。


おそらくこれを達成する最も簡単な方法は、ネットワーク起動が失敗した場合にセカンダリ起動ターゲットとしてローカル起動を使用してネットワークから起動しようとするMarcusシステムを設定することです。 PXE ネットワークブートに必要な DHCP オプションを提供する DHCP サーバーと、PXE ブートローダーとその構成ファイルを Marcus システムに提供する TFTP サーバーが必要です。 Piはこの2つの作業を非常に簡単に実行できます。

Marcus で実行される PXE ブートローダ用に 2 つまたは 3 つの設定ファイルを作成できます。 1つはローカルディスクから無条件にLinuxを起動し、もう1つは同じ方法でWindowsを無条件に起動し、3番目はブートメニューを表示するために使用できます(場合に適用されます)。アプリケーション起動)起動コマンドは実行されません(システムを手動で起動するときにネットワーク起動試行がタイムアウトするまで待つ必要はありません)。

その後、Alexa アプリは、Wake コマンドを Marcus システムに送信する前に、TFTP サーバーから提供された設定ファイルを単純に変更します。使用されている音声コマンドに応じて、無条件のWindowsまたは無条件のLinux起動設定をTFTPサーバーに配置します。次に、Marcusシステムのウェイクアップまたは再起動コマンドを実行します。起動試行が成功するかタイムアウトするのに十分な時間を待ってから(または設定ファイルが読み込まれたことを示すTFTPサーバからのログメッセージを確認した後)、起動メニュー設定をTFTPに戻します。仕える人。

関連情報