Arch Linux をクリーンインストールした

年に一回はやるよね

愛機である System76 の Lemp10 (Lemur Pro 10)に Arch Linux をクリーンインストールした。そのときに色々な学びがあったので、メモしておく。

なぜやったのか

理由は下記。

  • サスペンド時になんかバグることが増えた
  • SSD の容量が 1TB あったらいいなと思うことが増えた
  • Wayland/Sway が安定しているので、 xorg/i3 無しでどこまでいけるか試したい

最初の理由が最も大きく、 systemctl suspend して CPU が暴れてファンがフル回転する、みたいな事象が多く、無駄なストレスを感じていた。 System76 に見切りをつけて、 Thinkpad X1 Carbon に乗り換えようとも思ったが、10 万円を超える支出はやはり躊躇してしまった(会社の決算前なら良かったかもだが)。諦めずにソフトウェア的な解決を模索していて、そのためには現状のシステムの上で色々やるより、クリーンインストールした方が問題を特定しやすいのではないかと思った。

何かあったらすぐに戻せるように、現状の SSD をキープしたかったので、新しい SSD を調達することにした。 System76 はその辺がかなりフレキシブルで、 SSD が自由に交換できるだけではなく、2 つ挿して併用することも可能だ。今後、 PC を乗り換えるにしても、 1TB くらいの SSD があって困ることは無いと思ったので、Amazon で新しく購入した。

調べてみたが、 SSD は 1TB で約 14,000 円くらいで買えた。新しい PC を買うより相当安い: トランセンドジャパン トランセンド 1TB SSD M.2(2280) NVMe PCIe Gen4×4

Arch Linux をクリーンインストール

もう UEFI ブートが当たり前の世の中になっているので、特に特殊なことはしなかった。一応、手順を Dotfiles の README に残しているが、 ArchWiki を見るほうが良いかもしれない。

https://github.com//acro5piano/dotfiles/blob/51fd7488443a64ab558b4bb16bebcd01efd9d825/README.md#L9

基本的にはそこまで問題なかったが、色々と詰まったことがあったので、メモしておく。特にカーネルパラメーター周りを触ることに抵抗がなくなったのが、今回の成果ではある。

ブートできない

まず、 systemd-boot でのインストール中、 bootctl install する箇所で No space left on device が出た。 調べたところ、Manjaro などのフォーラムで efibootmgr -b xxxx -B という、 EFI ブートのエントリを消すという方法にたどり着いてしまった。 (xxxx には実際の値が入る)

efibootmgr -b xxxx -B をとりあえず適用し続けたら、ハードディスクにブートできなくなってしまって、焦った。No BootOrder is set; firmware will attempt recovery というエラーが出た。 USB ドライブにはブートできる。

結論、 System76 のファームウェアが破損していることが原因だったっぽい。 UEFI のエントリは、おそらく SSD とは無関係の場所にも存在しているようだ。Pop!_OS の Live USB を使い、ファームウェアのアップグレードをすると解決した。色々と壊れていたので、下記の方法で USB メモリ経由でファームウェアをアップデートしたところ、正常にブートできるようになった。

https://support.system76.com/articles/open-firmware-smmstore/

んで、大元の bootctl install が失敗するのは、 SSD のソケットを変更して解決した。 SSD1 じゃなくて SSD2 にしたら成功した。謎。

Fcitx5 で、 Brave で日本語入力できない

これはうっかりミス。

1
sudo pacman -S fcitx5-gtk

画面が明るすぎる

アーカイブされた haikarainen/light: GNU/Linux application to control backlights を使い続けているのだが、明るさを最小にしても明るすぎるという問題があった。カーネルパラメーターに acpi_backlight=native を設定したら、直った。

1
2
~> cat /boot/loader/entries/arch.conf
options root=UUID=... acpi_backlight=native rw

ref: https://bbs.archlinux.org/viewtopic.php?id=282805

カーネルパラメーターって聞くと恐ろしいと思ってたけど、別に大したこと無い、テキストファイルだということが分かって安心した。

Sleep できない

System76 のファームウェアを System76 Lemur Pro/Lemur Pro, BIOS 2022-11-21_b337ac6 11/14/2022 にアップデートしたら、なぜか systemctl suspend してもサスペンドされない状態になってしまった。そこで、Hibernate で代用した、というか、もともと Hibernate のほうが電池減らないから良いよなーと思っていたが、今回やっと対応できた感じ。

Suspend は RAM に電源を送り続けるので、(System76 Lemur 10 の場合は)だいたい 1 時間で 2% くらい電池が減ってしまうが、 Hibernate の場合は一切減らない。電源ボタンを押したときの挙動、筐体を折りたたんだときの挙動などを Hibernate に統一することで、電源を消費せずに一時停止できるようになった。代償として、

  • 復帰時に時間がかかる
  • SSD の寿命が縮む

というのがあるが、前者は全然許容できそうだなと思ったのと、後者は System76 の強みである複数 SSD に対応しているというのを活かし、メインではない SSD にスワップ領域を設定すれば良いかなと思った。プリインストールされていた Western Digital の SSD にスワップ領域を作り、実現している。

ちなみに、最初は スワップ パーティションではなく スワップファイルを作ることで Hibernate を実現していたが、なぜか復帰時に inconsistent memory map detected というエラーが出て復元に失敗するという現象に悩まされていた。 suspend - What causes hibernation image to swap file not getting loaded? - Ask Ubuntu を参考に、スワップパーティションにして、今のところはうまく動いている… ものの、やや不安は残る結果となってしまっている。

追記: なんか電源を供給していない状態の方が安定して Hibernate できている気がする。逆に言うと、電源指しっぱで systemctl hibernate すると、再起動したときに復元できなくなる…?

さらに追記: 下記 2 つにより、安定してハイバネートできるようになった。

  • 復帰時、Bios のブート画面が出るが、そこで何もキーを押さないようにする
    • 多分 Coreboot や System76 特有の現象だと思われる。
  • systemctl hibernate コマンドに sudo をつけると、なぜか安定する(失敗しない。)
    • ヒンジを閉じたり電源ボタンを押すと自動的に Root で実行されるので、今はそうしている

新たに得た知見

Google Meet などの画面共有

これ、ずっとやりたかった。というか、これができないから i3 使い続けてた。

音が出ないなと思って Pipewire の Arch Wiki を見ていたら、 pipewire-media-session は非推奨で、今は Wireplumper というのが推奨されているらしい。いい感じだなーと思ってみていたら、その下に Wayland 環境における WebRTC での画面共有の手順が書いてあった。 Wayland/Sway ではどうせ無理だろうと思っていたので、ダメ元で試してみたら、これが拍子抜けするくらい簡単にできた。

1
2
3
sudo pacman -S xdg-desktop-portal-wlr
systemctl --user enable xdg-desktop-portal
systemctl --user start xdg-desktop-portal

もっと早く知っておきたかった…

Ref: https://wiki.archlinux.jp/index.php/PipeWire#WebRTC_.E7.94.BB.E9.9D.A2.E5.85.B1.E6.9C.89

https://wiki.archlinux.jp/index.php/%E3%82%B5%E3%82%B9%E3%83%9A%E3%83%B3%E3%83%89%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%90%E3%83%8D%E3%83%BC%E3%83%88#initramfs_.E3.81.AE.E8.A8.AD.E5.AE.9A

TLP

linrunner/TLP: TLP - Optimize Linux Laptop Battery Life

Linux Laptop はすぐ電池へたるなーと思っていたのだが、上記ソフトウェアでけっこう寿命が延長できるっぽい。まあ、本当に必要なら System76 に問い合わせて新しいバッテリーを買えば良いので、とりあえず tlp は入れておいて損は無さそう。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy