※ Googlebook OS ではない
パソコン3台あります。mac 1台はともかく、Windows 実機が2台あっても持て余し気味だったので、何らか理由をつけて Linux デスクトップの実機にしたい気持ちが高まりました。思案して、
- Windows パソコンで 3D ゲームとかやらない
- Windows 11 は ROCm サポートが貧弱。PyTorch なアプリ動かせない。Linux にして Radeon AI PRO R9700 を使い倒したい
- Windows 11 では Docker が遅い。やっぱ Linux 実機にして高速にしたい
- 使ってるアプリの大多数が macOS/Windows/Linux で動作する (Electron製が多い)
納得して自作デスクトップPCの Windows を消し飛ばしました。
Ubuntu を選んだ
イキのいいディストリが揃ってますが、AMD GPU ドライバと ROCm の最新版を利用できるディストリに絞ると、大多数が選択肢から消えてメジャーどころだけ残ります。そこから、、、
- RedHat 系たとえば Fedora を選ぶ理由が特になかった
- RedHat系は仕事でも私用でも使うことがないので...
- Arch 系は小難しそうで、今回モチベーションはないので選ぶ理由が特になかった
- Omarchy は 試用してみたけど、合う人には合いそう。物事の考えかたは面白い
- Debian 系で、素直に Ubuntu にしとくか
- 昔は一時期 Kubuntu, Xubuntu で過ごしたけど結局 Ubuntu に戻った
- 仕事でも CI 環境の OS が Ubuntu だったり、 FROM:ubuntu なコンテナイメージを触れることは多いし
で Ubuntu 26.04 を選びました。
AMD GPU ドライバ, ROCm をインストールする
AMD GPU ボードを使っていて、ローカルLLMやるなら、AMD公式GPUドライバパッケージ、公式ROCmパッケージをインストールする。
- https://instinct.docs.amd.com/projects/amdgpu-docs/en/latest/install/detailed-install/package-manager/package-manager-ubuntu.html
- https://rocm.docs.amd.com/en/latest/install/rocm.html?fam=radeon&w=compute&os=ubuntu&ubuntu-ver=26.04&i=pkgman&gpu=amd-radeon-ai-pro-r9700&gfx=gfx1201
Ubuntu ディストリのバージョン、AMD GPU ドライババージョン、AMD ROCm バージョンは、サポートされてるバージョンがガチッと決められてるので、そのつもりで使う(Ubuntu の LTS 以外のバージョンはサポート外っぽい)。
なお AMD GPU ドライバインストール時に、 Ubuntu の Secure Boot と amdgpu-dkms の組み合わせで必要になる「MOK(Machine Owner Key)の登録」が要求される。良きように進めてください。
AMD GPU ドライバ、initramfs、ストレージ暗号化が絡まって遭難した
Windows なら TPM を利用して BitLocker。macOS なら FileVault。私物といえどストレージ暗号化やっとくかー、Ubuntu でやるには、と、インストール時に TPM によるストレージ暗号化を試みるも、どうやら技術的に困難な組み合わせの問題があって私の手元のパソコンでは無理らしい。
しゃーないのでパスワードによるストレージ暗号化「Encrypt with a passphrase」で我慢しました。
さて Ubuntu インストールを終えて AMD GPU ドライバインストールした後に面倒事に巻き込まれました。前提として Ubuntu 26.04 では initramfs の管理に dracut を用いてます。電源ONしたときブートローダーやら何やかやで、パスワードによるストレージ暗号化を通るためのパスワード入力画面があって、これは dracut が良きようにしてます。ところで AMD GPU ドライバの amdgpu-dkms パッケージは initramfs-tools パッケージに直接依存していて、dracut を削除して initramfs-tools に置き換える形で AMD GPU ドライバイインストールが進みました。initramfs-tools も、電源ON時のパスワードによるストレージ暗号化の解除画面を出してハンドリングできますが、それは追加で cryptsetup-initramfs をインストールしている場合に限ります。という全体像を私は把握しておらず cryptsetup-initramfs を当然ながら入れてない。そして起動不能になりました。
どうしましょうで、
- USB メモリで Ubuntu 再インストール。その後に AMD GPU ドライバインストールして、
cryptsetup-initramfsもインストールしてから、再起動やる。時間かかるが厄介事はない。 - 出たとこ勝負の対策前進でトラブルシュートしてリカバリを目指す。時間は見通せないし厄介事しなかい。
トイレで気張りながら思案して、週末だし道楽だと思って(2)でやってみるか!!した。ひとまずコピペもできやしないので、スマホカメラで画面撮影して、スマホから「チャッピーこれ何なのー」で「このコマンド叩いて結果を知らせてくれ」「あれを叩け」「これを叩け」と指示されて私はミートプロキシして、ひととおり情報収集したら、LiveUSB で Try Ubuntu に入って、1password を入れて Firefox で ChatGPT にログインして、これで Terminal は自在に叩けるしコピペできるので、ふたたび情報収集しながら、暗号化されてる SSD を cryptsetup でパスワード入力して開いてマウントして chroot して情報収集して apt install cryptsetup-initramfs して情報収集して、残ってる怪しげな warn を調べて解消して、なんとか生還しました。
そういう次第なので、パスワードによるストレージ暗号化して、AMD GPU ドライバをインストールしたときに dracut がアンインストールされて initramfs-tools が入ったら、再起動前に sudo apt install cryptsetup-initramfs も忘れずにやりましょう。
amd-smi で、ワット上限は設定できる。ファン制御は上書き不可
Windows では AMD Software で「最大消費電力を何ワットにする」「何度になったらファン回転数いくつにする」を設定できたので、Linux でもやれるのか調べました。結論 AMD Radeon AI PRO R9700 は amd-smi コマンドで、ワット上限は設定できて、ファン制御は上書きできないっぽい。
- https://github.com/sasasin/dotfiles/blob/master/linux/r9700-power-fan.install.sh
- https://github.com/sasasin/dotfiles/blob/master/linux/r9700-power-fan.service
- https://github.com/sasasin/dotfiles/blob/master/linux/r9700-power-fan.sh
もしかすると、ちゃんと調べて叩けば何かできるかもしれない。そのうち気が向いたらやるかな。
- https://rocmdocs.amd.com/projects/amdsmi/en/develop/index.html
- https://github.com/ROCm/rocm-systems/tree/develop/projects/amdsmi
アプリを入れる
昔は Ansible をローカルに向けてやってたけど、なんかもう面倒臭いのと、そんな繊細にセットアップしなくても足りており、いまのとこ数枚のシェルスクリプトで茶を濁してます。私がインストールしてるアプリは以下に列挙しました。
apt, snap, mise でドカドカ入れる
apt。GUIフロントエンド Synaptic で探してインストール/アンインストールします。
sudo apt install -y synaptic- https://ubuntu.com/server/docs/how-to/software
snap。もっぱら proprietary な GUI アプリの管理に使ってます。
- https://snapcraft.io/store で探してインストールする
- https://snapcraft.io/docs から漁ると操作やトラブルは概ね解決できる
mise。「apt, snap で配布されてないか、配布されてるが古い、誰か知らんやつが配布してる」「依存関係でガチャガチャしない」「GitHub repo の Release で、Linux 向け tar.gz が配布されてる」あたりを満たすアプリの管理に使います。
deb パッケージだけ配布されてるアプリを入れる
いくつか配布形態があります。
例1) 独自ドメインで配布してる。たとえば OpenAI ChatGPT デスクトップアプリ。頑張って wget して apt install します。
例2) GitHub repo の Release で配布してる。たとえば OpenLogi。GitHub repo の Release なら mise で扱えそうな気がするのですが、 deb パッケージは扱えないらしいです。
Release から latest で取れたらいいので gh で取ってきて apt install します。
gh release download \ -R AprilNEA/OpenLogi \ --pattern 'openlogi-*-linux-amd64.deb' \ --dir ./ sudo apt install ./openlogi-*-linux-amd64.deb
以上いずれも初回の apt install で source がセットアップされるなら、以降は apt update & apt dist-upgrade でアプデされていきます。そこまで気が利いてないアプリは、しかたないので
curl https://example.com/install | bash で入れる
わりと最終手段。なるべく apt, snap, mise で入れて、インストール/アップデート/アンインストールを綺麗に管理したいですが、そうもいかんこともあるし、しかたない。
PyTorch 利用アプリを入れる
PyTorch は PyTorch 公式 index では配信しておらず AMD の index らしい。
私は uv tool install ... で使いたい派なので、たとえばこのようにします。
sudo apt install python3-dev uv tool install --force \ --index https://stable.repo.amd.com/rocm/whl-next/ \ --with 'rocm[libraries,device-gfx1201]==10.0.0' \ --with 'torch[device-gfx1201]==2.13.0+rocm10.0.0' \ --with 'torchvision[device-gfx1201]==0.28.0+rocm10.0.0' \ 'yomitoku==0.15.0'
使うときはこのように。
yomitoku ./9784022732064.pdf \ --outdir ./ --format md --device cuda --ignore_line_break --ignore_meta --ignore_ruby; printf '%s\n' ./_9784022732064_p*.md | sort -V | xargs cat > ./9784022732064.md
ROCm は手順どおりインストールすると基本的なパッケージだけ入ります。PyTorch で ROCm の使用範囲が広いアプリは、ROCm の追加のライブラリが必要になる場合があります。Synaptic で探して入れたら動くようになります。
uv コマンドでのセットアップ手順を自力で調べていくのは心が折れたので、私はアプリを使いたいのであって開発したいわけではないと割り切って、コーディングエージェントにひたすらセットアップをやらせてます。
アプリランチャー Vicinae を入れる
macOS の Raycast 便利です。Windows ならスタートメニューが簡易なアプリランチャーとして機能します。機能的にアレくらいのものとして、Ubuntu の Gnome には Windows キー押下でパッと出る簡易なアプリランチャーが備わってます。apt, snap で入れた GUI アプリはインデックスされますが、 mise で入れた GUI アプリは射程外のため出てきません。
この厄介の対処方法はいくつか方法はあるようですが、今回アプリランチャー Vicinae を使います。
sudo apt install -y libopengl0 curl -fsSL https://vicinae.com/install | bash systemctl --user enable --now vicinae.service
インストールできたら、Ubuntuの「設定」-> キーボード -> キーボードショートカット -> ショートカットの表示とカスタマイズ -> カスタムショートカット -> ショートカット追加で、
- 名前
すきにしろ - コマンド
/usr/local/bin/vicinae toggle - ショートカット
すきにしろ
ここまで設定してログアウト/ログインすると、↑のショートカットに反応して Raycast っぽいアレが出てくるようになります。
Vicinae は素のままでは mise でインストールした GUI アプリをインデックスしません。が、いくつか約束事に乗っかることで良きようになります。その約束事に乗せるスクリプト mise-desktop-sync を実行すると良きようになります。何してるかはコードを眺めてください。
mise の postinstall hook に入れると完璧度が高まります。たとえばこのように記述します。
[hooks] postinstall = [ { run = "既存の処理", shell = "bash -c" }, { run = "$HOME/.local/bin/mise-desktop-sync", shell = "bash -c" }, ]
mise の hook の詳細は以下。
Vicinae の GNOME 拡張も入れると、GNOME との何かができるようになるらしいです(あまり活用しておらず、よくわかってない)。インストールには GUI アプリ gnome-shell-extension-manager の検索窓で探して入れるのが面倒がなくてよいです。 https://docs.vicinae.com/install/linux ではコマンドラインから入れられそうな風に書いてあるけど、記述が古いのか動作しませんでした。
sudo apt install -y gnome-shell-extension-manager
Docker Engine を入れる
Ubuntu の docker.io でよい。docker 配布の docker-ce でもよい。情報が集めやすいのは「docker 配布の docker-ce」かもしれない。
どちらで入れるにしても post install 作業をやるとよい。特に、普段使いの一般ユーザーに権限付与したほうが便利になります。
Windows/macOS と違って挟まるものがい少ないためか、やはり速い。速いは正義。
縦置き3画面配置、4k2k、150% を Ubuntu の「設定」だけで組めた
これは素直にイイネと思った。「縦置き3画面配置」はこういうことです。
https://x.com/sasasin_net/status/1401072283003674626?s=20
Windows や macOS でマルチディスプレイを構成しようとしたら、OS設定の「ディスプレイ」で、90度ずつ回転させたり、ディスプレイを任意のレイアウトで描画させたり、解像度と拡大率を設定して、といったことが普通にできますね。Ubuntu 26.04 の Ubuntu の「設定」で同じ操作感で構成できて良かった。
昔は Ubuntu ではマルチディスプレイを組む難易度が高く、/etc にある x11 の設定ファイル(?)と、NVIDIA の GPU ボードで NVIDIA の設定アプリで、壊れないよう整合させたら一応ギリ組めはしたが、拡大率設定は、100% と 200% はできるが 150% は beta で挙動が怪しくて Gnome 3 系アプリは対応してるが Gnome 2 系は怪しくて、 KDE/QT 系アプリは何だったか環境変数を設定する必要があって云々とか、まじカオスすぎて、ほんと厳しかった記憶があります。
コーディングエージェントに sudo な操作を任せて楽する
既にあれやこれやと任せまくっているのですが sudo な操作を任せるのは悩ましいものですが、任せたい場面はあります。入り組んだ設定変更とか、挙動不審で原因究明と対処方法を調査させたいとか。
この場合コーディングエージェントに sudo -A を実行させ、パスワード入力だけ GNOME のダイアログで人間が行う方式が良いです。パスワードそのものをエージェントに渡す必要がありません。sudo は -A 指定時、SUDO_ASKPASS で指定された GUI ヘルパーからパスワードを受け取れる仕組みを備えています。
sudo apt install ssh-askpass-gnome dpkg -L ssh-askpass-gnome | grep askpass # 実際のパスを確認
ChatGPT デスクトップアプリ or Codex なら ~/.codex/config.toml に以下を追加します。
[shell_environment_policy] set = { SUDO_ASKPASS = "/usr/lib/openssh/gnome-ssh-askpass" }
Claude Code なら ~/.claude/settings.json に以下を追加します。
{ "env": { "SUDO_ASKPASS": "/usr/lib/openssh/gnome-ssh-askpass" }, "permissions": { "ask": ["Bash(sudo *)"] } }
サンドボックスを有効にしている場合は、さらに次を足します。
"sandbox": { "excludedCommands": ["sudo *"] }
毎回の指示は ~/.codex/AGENTS.md および ~/.claude/CLAUDE.md に記載します。
# マシン全体に適用されるsudoポリシー コマンドの実行にsudoが必要な場合: - `sudo -A` を使用し sudo の認証は設定された askpass ヘルパー経由で行うこと。 - 会話の中で sudo パスワードの入力、貼り付け、タイピング、または開示を私に求めないこと。 - 標準入力(stdin)、コマンドライン引数、環境変数、ファイル、その他エージェントから参照可能な手段を通じて、sudo パスワードを取得しようとしないこと。 - サンドボックスで `no_new_privs` / `NoNewPrivs` が有効になっているために sudo が失敗した場合、その保護を回避したり弱めたりしようとしないこと。代わりに、必要なコマンドをサンドボックス外で実行する許可を求めること。 - 私が明示的に指示しない限り、サンドボックスの無効化、sudoers の変更、NOPASSWD 権限の追加、その他特権境界を弱めるような操作を行わないこと。 - 必要がない場合にはsudoを使用しないこと。
これで何やら壊れたり挙動不審な時に、コーディングエージェントに sudo を要する操作を任せられるようになります。
ローカルLLM
性能特性が変化するかもなので、llama.cpp のパラメータチューニングやりなおしですね。そのうちやる。llama.cpp は ROCm/HIP ビルドより Vulkan ビルドのほうが速いという真偽不詳な話も聞くので、これも試してみたい。推論エンジンは Windows で AMD で簡単で高速動作するから llama.cpp を使ってたけど、ROCm が動くから vLLM とか SGLang とか他も使える。いろいろ手を出してみたい。
Windows 11 Pro のライセンスが余った
自作 PC なんでライセンス買ってます。今回ので余っちゃったな。そのうち何かに使うでしょう。
〆
何をもって Linux デスクトップ元年と称するはか知らんですが、
- Ubuntu Desktop は便利になってる
- macOS や Windows で動いてるアプリは Linux にも移植されてる。 snap と mise で簡単にインストールできる
- いざとなればコーディングエージェントに泣き付けばどうにかできる
あたりに元年を感じました。良い。






