愛機である 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 で日本語入力できない
これはうっかりミス。
|
|
画面が明るすぎる
アーカイブされた haikarainen/light: GNU/Linux application to control backlights を使い続けているのだが、明るさを最小にしても明るすぎるという問題があった。カーネルパラメーターに acpi_backlight=native
を設定したら、直った。
|
|
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 ではどうせ無理だろうと思っていたので、ダメ元で試してみたら、これが拍子抜けするくらい簡単にできた。
|
|
もっと早く知っておきたかった…
Ref: https://wiki.archlinux.jp/index.php/PipeWire#WebRTC_.E7.94.BB.E9.9D.A2.E5.85.B1.E6.9C.89
TLP
linrunner/TLP: TLP - Optimize Linux Laptop Battery Life
Linux Laptop はすぐ電池へたるなーと思っていたのだが、上記ソフトウェアでけっこう寿命が延長できるっぽい。まあ、本当に必要なら System76 に問い合わせて新しいバッテリーを買えば良いので、とりあえず tlp は入れておいて損は無さそう。