GRUBを利用したSteam Deckのデュアルブート環境インストール手順

2023/1/4更新:SteamOS 3.4ではこの方法が使えないことを確認しました。
2023/1/22更新
どうやらgrub.cfgの記述ミスが原因だったようで、SteamOS 3.4上でも動作することを確認しました!
セキュリティー上の懸念点があるため、os-proberを使わず、手動でWindowsのメニューエントリーを追加する手順に変更しました。

Steam Deck、ついに発売したね。12月に入ってから予約しても、発売日に届いたよ!

Linux環境でWindowsのゲームが動かせるのは本当にすごい!でも、一部のゲームはアンチチートなどが原因で、SteamOSでは動かすことはできない。

仕方なく、Windows環境も用意することにした。

Windowsをインストールすると、ブートローダーがWindowsのもの(Windows Boot Manager)に置き換わるため、デフォルトでWindowsが起動するようになる。これが気に入らなかった。

しかも、SteamOSを先に起動するようNVRAMを書き換えても、勝手に元に戻されるという、とてもお節介な仕様。

なんとかできないかといろいろ試してたら、GRUBでもデュアルブートできるようになったため、手順を紹介してみる。

  • 内蔵SSDに、SteamOSとWindowsをインストールしてデュアルブートする。
  • ブートローダーは、GRUBを使用する。
    • これを書いた時点では、rEFIndを使うやり方が主流なのかな?
  • Windowsのバージョンは、Windows 11 Home (22H2)でテストしています。

用意するもの

  • USBハブ
  • キーボード
  • マウス
  • Steam Deckのリカバリーイメージの入ったUSBメモリ
  • Windowsインストールイメージの入ったUSBメモリ

前準備

Steam Deckの内蔵SSDのパーティション構成を変更していない場合は、飛ばしてもOK。

必要に応じて、リカバリーイメージで起動し、Re-image Steam Deckを選択して初期状態に戻す。
再起動後、ようこそ画面が出たら、Steamボタンを押し、電源→シャットダウン

セットアップ中はmicroSDカードを抜いておいて。ブートローダーがうまく動かなくなる可能性があるので。

SteamOSのセットアップ

  1. SteamOSの初期セットアップを進める
  2. ログインが完了したら、Steamボタンを押し、電源→シャットダウンでシャットダウンする。

home領域のリサイズ

  1. SteamOSのリカバリーイメージのUSBメモリを挿す。
  2. UEFI起動メニューに入り、上下キーでリカバリーイメージを選択し、Aボタンを押して起動
    • UEFI起動メニューの入り方
      1. 音量マイナスボタンを押しながら、電源ボタンを1回押す。
      2. 「ピロリ」と鳴ったら、音量マイナスボタンを離す。
  3. 起動したら、KDE Partition Managerを起動
  4. /dev/nvme0n1p8を選択し、Resize/Moveを選択
  5. 領域サイズはお好みで。自分は256GBモデルだったので、全領域のほぼ半分の位置となる、111,219 MiBに設定。
  6. Applyをクリック
  7. 確認画面が出るので、Apply Pending Operationsをクリック
  8. Successfulと出たら、スタートメニューを開き、Shutdownを選択してシャットダウンする。

Windowsのインストール

  1. Windowsインストールイメージの入ったUSBメモリに挿し替える
  2. UEFI起動メニューに入り、USB Deviceを選択
  3. 案内に従ってWindowsのインストールを進める。
    アップグレードかカスタムかという選択画面では、カスタムを選択。
  4. 一番下の、「ドライブ0の割り当てられていない領域」を選び、次へをクリック
  5. Windowsの初期セットアップを進める。
  6. デスクトップが表示されたら、スタートボタンを右クリックして、ターミナル(管理者)を開く。
  7. powercfg /h off と入力してEnter
  8. powercfg /a と入力してEnter。「休止状態」と「高速スタートアップ」が使用不可になっていることを確認。
  9. シャットダウンする。

ブートローダーの編集

  1. UEFI起動メニューに入り、SteamOSを起動。
  2. 電源→デスクトップに切り替え
  3. konsole(KDE用のコンソールアプリ)を開く
  4. passwd でパスワードを設定する。(sudoを使えるようにするため)
  5. btrfsの読み込み専用属性を解除
    • sudo btrfs property set -ts / ro false
  6. ブートローダーの設定ファイルを編集
    • sudo nano /etc/default/grub
  7. 下記の行を修正
    • GRUB_GFXMODE=1280x800x32
  8. Ctrl+oを押し、Enterで上書き保存
  9. Ctrl+xでnanoを閉じる
  10. EFIシステムパーティションのUUIDを確認
    • sudo grub-probe --target=fs_uuid /esp/efi/Microsoft/Boot/bootmgfw.efi
  11. /etc/grub.d/40_customを編集
    • sudo nano /etc/grub.d/40_custom
  12. 末尾に下の「/etc/grub.d/40_customに追記するコード」を追加
    • (EFIシステムパーティションのUUID)の部分は実際のものに置き換える
  13. Ctrl+oを押し、Enterで上書き保存
  14. Ctrl+xでnanoを閉じる
  15. (オプション)40_customの数字部分を変更することで、メニュー内の順序を変更できる。
    • 自分は25_customに変更した。
  16. grub.cfgの生成
    • sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg
  17. シャットダウン
  18. UEFIブートメニューを表示し、SteamOSを起動
    • うまくいっていれば、メニューが表示される。

/etc/grub.d/40_customに追記するコード

menuentry 'Windows 11' --class windows --class os {
        insmod part_gpt
        insmod fat
        search --no-floppy --fs-uuid --set=root (EFIシステムパーティションのUUID)
        chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=5
fi

Windows Boot Mangagerの起動無効化

  1. 起動デバイス一覧を表示
    • efibootmgr
    • Windows Boot Mangagerのブート番号を確認する。Bootxxxx
  2. Windows Boot Mangagerの起動無効化
    • sudo efibootmgr -b xxxx -A
      • xxxxの部分は、実際のWindows Boot Managerのブート番号、Bootxxxxの数字に変更する
      • 実行後に表示される一覧で、Windows Boot Managerのブート番号からアスタリスクが消えていればOK
  3. 再起動
    • sudo reboot

5 個のコメント

1 個のping

Skip to comment form

    • s1 on 2022年12月25日 at 22:19
    • 返信

    「sudo efibootmgr -b xxxx -A」を実行した際、
    efiへのアクセスが弾かれて
    「Could not set active state for Bootxxxx : No such file or directory」
    と出てしまいます。
    そのため起動順を変更してもwindowsが起動してしまいます。
    対処方法はありますか?

    1. 稀に、efibootmgrコマンドでエントリーの状態が変更できなくなることがあるようですね。
      私もその症状が出ました。

      代替の方法として、EFI Shellを使う方法があります。
      Arch Linuxのインストールイメージから起動できます。
      ただこの方法だと、エントリーをinactiveにする方法がなさそうです。参考までにエントリーを確認、削除する方法を記載しておきます。

      • エントリー一覧確認
        bcfg boot dump
      • エントリー削除(xxはエントリーリストに記載のある番号を入力)
        bcfg boot rm xx
      1. 追記します。WindowsもSteamOSのエントリーも、アクティブ状態が変更できなくなり
        しばらくにっちもさっちもいかなかったのですが、
        どちらが原因かはわかりませんが、下記を行った所状態変更ができるようになりました。
        efibootmgrを実行するOSは、関係ないかもしれません。
        注意:SteamOSのブートエントリーも一旦消えるようです

        Arch Linuxのインストールイメージを起動し、ブートローダーの起動順序の設定を削除
        sudo efibootmgr -O
        Steam DeckのリカバリーイメージUSBから起動し、Konsoleを起動、Windows Boot Managerのエントリーを無効化
        ※この時点で状態変更ができるようになった
        sudo efibootmgr -b xxxx -A
        Windows Boot Managerのエントリーが複数勝手に作成されている場合は、重複分を削除
        sudo efibootmgr -b xxxx -B

        SteamOSのエントリーを作り直す
        *64GBモデルの場合、NVMeでなくeMMCなので/dev/nvme0n1の部分が違うかもしれません
        sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -l '\EFI\steamos\steamcl.efi' -L 'SteamOS'

    • JM on 2023年3月5日 at 13:53
    • 返信

    自分も同じCould not set active state for Bootxxxx : No such file or directoryメッセージが
    表示されたため以下の方法で対応しました。
    もしかしたらWindowsBootmanagerが何かでつかまれているのかもしれません。

    (1)Windows上のコマンドプロンプト(管理者状態)で以下コマンドを入力実行する。
    bcdedit /set “{globalsettings}” highestmode on

    (2)Windowsをシャットダウン

    (3)SteamDeckのリカバリイメージのUSBで起動。
    いつもの電源+音量(-)で起動しリカバリイメージのUSBを選択。
    注意:デスクトップモードではなく必ずリカバリイメージのUSBメモリで起動する事。

    (4)リカバリイメージから起動したのち一番右のアイコン
    Terminal with repair tools(リカバリーツール)を選択。

    (5)Terminalより以下コマンドを実行
    efibootmgr
    でeif一覧を参照しWindows Boot Managerの番号を確認

    sudo efibootmgr -b xxxx -A
    でWindows Boot Managerno「*」が消える。

    (6)リカバリイメージから起動したSteamOSをシャットダウンする。

    これでWindowsを起動してもSteamOSを起動しても毎回Boot選択ができるようになります。

    尚、SteamDeckで起動した後、Windowsを起動すると必ず9時間ずれるので
    Windowsのコマンドプロンプト(管理者権限)から以下のコマンドを実行する。
    reg add “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation” /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
    (WindowsでUTCが有効になり、9時間ずれがなくなる。)

    元に戻したければ以下を入力。
    reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f

    • 匿名 on 2023年3月19日 at 01:29
    • 返信

    コメント欄の内容まで実行して無事デュアルブート確認出来ました。ありがとうございます!
    AMDのAPUのドライバのインストール前にgrubからWindowsを起動するとうまく表示されないので、外部ディスプレイをつないでセットアップするか、Windows Boot Managerを無効化する前にAPUドライバを入れておくかが、必要そうでした

  1. […] あと、過去にGRUBを編集することによるWindowsとのデュアルブート環境の構築方法を書いたけど、今はSteamOS、Windows、Arch Linuxのトリプルブート構成にしてる。Arch Linuxはブート環境構築用。 […]

コメントを残す

メールアドレスは公開されません


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。