UEFI の起動エントリに Linux 環境を追加する

この記事を作った動機 CMOS リセット時に GRUB インストール時にデフォルトで作成される UEFI 設定が一緒に消えてしまう。結果として、はじめから Linux 環境を起動してほしいときに、意図した通りに起動しないことがあった。 そこでしばらくは BIOS から直接 Linux 環境がインストールされた環境をわざわざ選択して起動したり、UEFI設定から直接エントリを作成して、Linux を起動するようにするなど、面倒くさい事を繰り返していた。 今回は、それに対してefibootmgrというコマンドを使い、systemd によって一度起動したら自動でエントリがない場合に起動エントリを追加するようにした。その内容について記録を取りたい。 efibootmgr の使い方 インストール yay -Sy efibootmgr # sudo pacman -Sy efibootmgr エントリを追加する例 ブートローダである UEFI アプリケーションのパスを指定するとき注意が必要である。Linux 環境側から見て、/bootに EFI パティーションをマウントしていて、/boot/EFI/arch/grubx64.efi に対象のアプリファイルが配置されている場合の例について考える。この場合、efibootmgr で指定すべきパスは、/boot/EFI/arch/grubx64.efi ではなく /EFI/arch/grubx64.efi である。もしここで間違ったパスを指定していると、UEFI アプリケーションの起動に失敗し、UEFI の設定画面に飛ばされるなどの症状になる。 sudo efibootmgr -c -L ArchLinux -l /EFI/arch/grubx64.efi -d /dev/nvme0n1p1 fdisk で Linux 環境がインストールされたディスクを確認 sudo fdisk -l # Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors # Disk model: SAMSUNG MZVKW512HMJP-000H1 # Units: sectors of 1 * 512 = 512 bytes # Sector size (logical/physical): 512 bytes / 512 bytes # I/O size (minimum/optimal): 512 bytes / 512 bytes # Disklabel type: gpt # Disk identifier: # # Device Start End Sectors Size Type # /dev/nvme0n1p1 2048 2097152 2095105 1023M EFI System # /dev/nvme0n1p2 2099200 964689920 962590721 459G Linux filesystem # /dev/nvme0n1p3 964691968 1000214527 35522560 16.9G Linux swap ...

2026年7月5日

UEFI 変数を書き込む (ReSizebleBar)

この記事を作った動機 最近GitHub - xCuri0/ReBarUEFI: Resizable BAR for (almost) any UEFI systemを使って、Intel Arc A770 を Windows 11 で運用していたが Linux 環境を使うようになって、新たに対応が必要なことが分かった。 具体的には、Windows 利用時は、GitHub - xCuri0/ReBarUEFI: Resizable BAR for (almost) any UEFI systemで提供されている、ReBarState.exeを使うことで Bar サイズを自分で指定すれば勝手に UEFI 変数が必要な分設定されたが、Linux 環境にそのような専用ツールはないと思っていたので、自分で UEFI 変数を書こうとしていた。 その過程で、UEFI 変数を書き込むことに苦戦したんのでその記録を取る。またあとから気づいた ReSizebleBar の UEFI ドライバが使う変数を書き込む専用ツールをソースコードからコンパイルすることについても記録する。基本的にGitHub - xCuri0/ReBarUEFI: Resizable BAR for (almost) any UEFI system関して UEFI 変数を設定する必要がある場合は、ツールを使う方法を推奨する。 環境 System Details Report Report details Date generated: 2026-03-01 13:39:42 Hardware Information: Hardware Model: HP ProLiant ML150 Gen9 Memory: 80.0 GiB Processor: Intel® Xeon® E5-2667 v4 × 32 Graphics: Intel® Arc™ A770 Graphics (DG2) Disk Capacity: 1.5 TB Software Information: Firmware Version: P95 OS Name: Arch Linux OS Build: (null) OS Type: 64-bit GNOME Version: 49 Windowing System: Wayland Kernel Version: Linux 6.18.6-arch1-1 ツールを使う GitHub - xCuri0/ReBarUEFI: Resizable BAR for (almost) any UEFI systemでReSizebleBar のためにUEFIの設定が必要な場合について記録する。すでに作業ディレクトリを作成し、移動していることを前提として想定している。 ...

2026年3月1日

変数

この記事を作った動機 全然まだ私は使い方とか概念をわかってないと思うが、とにかくよく使う hooks について記録を取りたいので、記事を書くだけ。思考の整理とかって感じで書いていて、普通に間違い混ざってると思うし、他の人に参考になるかは怪しい。 react とデータの関係性 React では、データが変更されると UI が連動して更新されたりするという仕組みになっているので、普通の変数ではなく、データのありように合わせて、状態変数と呼ばれるものを使い分ける必要がある。 環境 Vite React TypeScript Tailwind CSS zustand 普通の変数 概要 普通に TypeScript や JavaScript で宣言するような let や var などと書いて宣言する変数たちのことである。これら変数の内容は基本的に React が再描画をかけると内容が初期化されて元の再描画前のデータは消えてしまう。 これを防ぎ、UI 再描画をまたいで変数の値を保持するためには、状態変数を useState なり、 useRef なり宣言して利用する必要があると思われる。 export default function Acompornent(){ // 再描画時には、x:100 y:100 にいちいち初期化されて変更内容が失われる let windowPos = { x: 100, y: 100 } // こちらは再描画時には内容は失われない const [style,setStyle] = useState({ top:0, left:0 }) // このようなコードを書くと windowPos は setStyle されたあと再描画で内容が初期値に戻ってしまう addEventListener("mousemove",(event:MouseEvent) => { // 何かしらのコード windowPos.x = event.screenX windowPos.y = event.screenY // 何かしらのコード setStyle({ top: windowPos.x, left: windowPos.y }) }) return <div style={style} className="fixed">This is styled text.</div> } useState 概要 オーソドックスな状態変数で、データが更新されたとき、UI を再描画させたいという場合に使う。 ...

2025年9月9日