モジュールを先に読み込ませる gpu unlock の Ubuntu インストール

インストールは順序の問題がすべてです。gpu-unlock の Ubuntu では、パッケージの作り方も関わります。gpu_unlock は initramfs の中、nvidia より前に置く必要があります。さらにカーネルコマンドラインで読み込みを指定します。以下では、1つのディストリビューションでこの問題を扱います。

始める前の gpu unlock の3つの確認

Secure Boot を有効にした Fedora 43 で、MOK 署名により動作したという報告が issue #173 にあります。Secure Boot を切る方法もありますが、これは別の判断です。意図して選ぶ価値があります。 [公式 README]

gpu unlock のインストール全体を4つの手順で

  1. パッケージをビルドしてインストールする

    make install は /etc/os-release を読み、適切なパッケージ形式を選びます。make install-arch / install-deb / install-rpm のように指定もできます。
  2. drop-in を initramfs の生成ツールに渡す

    対象は4つ、置き場所も4つです。ファイルは、自分の生成ツールが探す場所に置きます。README の例が想定した場所ではありません。
  3. カーネルコマンドラインで有効にする

    gpu_unlock.targets=all、または個別の PCI アドレスを指定します。これがないと何も起きません。
  4. モジュールがイメージ内にあるか、次に実行されたかを確認する

    2つのコマンドは、2つの別の問いに答えます。順序が重要です。イメージにないモジュールは、実行されていません。

gpu unlock のインストール経路は4つ

このプロジェクトは、主要3ファミリーと Unraid 向けのパッケージを用意しています。/etc/os-release を読む振り分けスクリプトもあります。

経路を選ぶ
# reads ID / ID_LIKE and picks the right installer
make install

# or name it
make install-arch   # makepkg
make install-deb    # dpkg-buildpackage + apt
make install-rpm    # rpmbuild + dnf

# build without installing
make arch / make deb / make rpm
  • Unraid は例外です。make の経路がなく、Releases にあるのは Unraid プラグインのパッケージだけです。
  • AUR も一覧にありません。パッケージはまだオープンの pull request #223 です。

どの経路でも、ファームウェアを作るのはビルドです。

  • 入力は NVIDIA と CachyOS から取得し、~/.cache/gpu-unlock/inputs に置かれます。
  • 入力はモジュールのディレクトリとパッケージに組み込まれます。
  • make inputs で更新できます。INPUTS= で別の場所を指せます。
  • ソースパッケージにはファームウェアが含まれません。コピーした blob が効かない理由を調べるときに、この違いが効いてきます。
[公式 README]

initramfs の生成ツールで gpu unlock はどう変わるか

対象は4つ、drop-in の場所も4つです。そのうち1つは、予想した場所にありません。

  • プロジェクトに記載された drop-in のパスです。ある生成ツール向けに書いたファイルは、別の生成ツールでは何もしません。
  • mkinitcpio

    drop-in ファイル
    /etc/mkinitcpio.conf.d/zz-gpu-unlock.conf
    主なディストリビューション
    Arch, CachyOS, EndeavourOS
  • initramfs-tools

    drop-in ファイル
    /usr/share/initramfs-tools/modules.d/gpu-unlock.conf
    主なディストリビューション
    Debian、Ubuntu 25.04 まで
  • dracut

    drop-in ファイル
    /usr/lib/dracut/dracut.conf.d/gpu-unlock.conf
    主なディストリビューション
    Fedora、RHEL、openSUSE、Ubuntu 25.10 と 26.04
  • UKI / 自動生成エントリ

    drop-in ファイル
    /etc/kernel/cmdline, then rebuild
    主なディストリビューション
    統一カーネルイメージ(UKI)で起動するインストール

罠は3行目にあります。gpu-unlock の Ubuntu インストールが、何も言わずに失敗する最も多い原因です。gpu_unlock の Debian パッケージが書くのは initramfs-tools 向けの drop-in だけです。Ubuntu 25.10 や 26.04 は起動が dracut 経由なので、モジュールはイメージに入りません。

インストール時にエラーは出ません。ログに gpu_unlock の行がまったくない状態が、そのサインです。手動の drop-in は issue #54 にあり、インストールコマンド1つで済みます。

dracut でのインストール

Arch で人を困らせる生成ツールの細かい点が、もう1つあります。mkinitcpio -c <config> と、_config を含む preset ファイルは、drop-in を完全に無視します。preset がそうなっていると、zz-gpu-unlock.conf に何を書いてもモジュールは入りません。

gpu unlock を有効にするカーネルパラメータ

gpu-unlock の Ubuntu インストールは、対象のカードを指定するまで何もしません。これは意図的な設計です。このモジュールは、既定では何もしないのが前提のマシンにも入るからです。

カーネルコマンドライン
gpu_unlock.targets=all                          # every supported, unbound card
gpu_unlock.targets=0000:21:00.0                 # one card
gpu_unlock.targets=0000:21:00.0,0000:22:00.0    # two cards
  • アドレスは lspci -D の完全な名前です。GPU の番号や、画面を駆動しているカードとは関係ありません。
  • 対応リストにない指定は、ログに残してスキップします。all と明示アドレスを混ぜた場合も同じです。
  • サスペンドとレジュームの後の再実行は既定で有効です。gpu_unlock.resume=0、または /sys/module/gpu_unlock/parameters/resume に 0 を書くと無効になります。再実行が失敗の原因になっているマシン向けです。

パラメータの書き方はブートローダーで変わります。この違いは見た目以上に重要です。実行中のセッションに追加したパラメータは、次の起動には効きません。

ディストリビューション別
# Debian / Ubuntu / Mint  ->  /etc/default/grub, then update-grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash gpu_unlock.targets=all"

# Arch / CachyOS
sudo grub-mkconfig -o /boot/grub/grub.cfg

# Fedora / RHEL
sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all"

# systemd-boot: edit the options line (bootctl status shows the path)
# UKI: write /etc/kernel/cmdline, then rebuild

信じる前に gpu unlock を確認する

gpu-unlock の Ubuntu インストールは、2つの確認で検証します。まずモジュールがイメージ内にあるか、次に実際に実行されたかです。

確認
lsinitramfs /boot/initrd.img-$(uname -r) | grep gpu_unlock
journalctl -k -b | grep gpu_unlock
  1. インストールの問題

    1つ目のコマンドが何も出力しない

    インストールの問題です。モジュールがイメージにありません。ほかを調べる前に、drop-in のパスを直して再ビルドしてください。
  2. タイミングの問題

    1つ目がパスを出し、2つ目が何も出さない

    タイミングの問題です。モジュールはありますが、実行されていません。-16 のページを参照してください。
  3. 正常

    正常な起動では gpu_unlock: unlocked の後に連鎖がログに出る

    claim、layout、dma、gfw、fwsec、publish、pass、host、flr、handoff ret=0 と続きます。この連鎖がどこで止まるかが診断になります。

    [issue #258]

gpu unlock を3つの手順でロールバックする

  1. カーネルコマンドラインからパラメータを外す

    gpu_unlock.targets がモジュールを有効にしている指定です。ほかを変える必要はありません。
  2. ブートローダーの設定を作り直す

    自分の起動方法に合わせて、update-grub、grub-mkconfig、grubby、UKI の再ビルドのいずれかを使います。
  3. コールドブート

    カードは変更していないので、これで足ります。パッケージも消したいときは、ファイルを削除せずアンインストールしてください。モジュールと drop-in はパッケージが管理しています。

例外は、失敗した実行でファームウェアが落ち着かないまま残ったマシンです。その場合、モジュールは次の電源断まで DMA バッファを保持します。同じ状態で再起動せず、シャットダウンして電源を抜き、もう一度起動してください。

カーネル更新後に gpu unlock を再ビルドする

gpu-unlock の Ubuntu マシンでは、カーネルか initramfs を変えたら再ビルドが必要です。そうしないと、モジュールはビルドしたカーネルと一緒に消えます。

  • initramfs-tools と dracut では、パッケージを入れておけば hook が新しいカーネルを処理します。
  • mkinitcpio では preset 次第です。前述の _config のケースがまた当てはまります。

症状はエラーメッセージではありません。カードがロックされたままになり、起動ログに gpu_unlock: unlocked の行がないことだけが手がかりです。

バージョン、コミット、この確認の日付は、このサイトのすべてのページにあります。 [公式 README] が最新の手順を示しており、上のパスはそれに照らして確認しました。

次に読む: モジュールがイメージにあり、ログに gpu_unlock の行がまだない場合は、-16 のページです。ログに -2 が出る場合は、ファームウェアが入っていません。

確認日 バージョン 2.0.0コミット 1fc6d62