Solist Work Blog

Software engineer note

ThinkPadのWindowsを消す理由

ThinkPad X1 Carbonが届いたので、さっそくWindowsを消してArch Linuxをインストールしました。 この記事ではThinkpadにインストールされているWindowsを消す理由について書いていきたいと思います。

Windowsを消す理由について、Windowsに触れたくないほど嫌いというわけでもないのですが、特に使う目的がない1のでたんすの肥やしになるだけですし、SSDフォーマットしてArch Linuxだけで使うほうがシンプルで、特にブート絡みの問題が起きにくいのでそうしています。一回も起動しないとWindowsがかわいそうな気がしたので一回だけWindowsを起動してコルタナとおしゃべりした後、SSDフォーマットしてWindowsを消しました。無益な殺生2をしたくないのでOSがインストールされていないThinkPadが発売されることを願ってやみません。

多くの人がデュアルブートやVirtual machineでLinuxを使う理由として、UEFI BIOSのアップデートとバッテリーの管理があると思います。 それらがLinuxだけでできるようになるとデュアルブートやVirtual machineでLinuxを使う理由はなくなるので、気兼ねなくWindowsをフォーマットして消すことができます。こうすることによって、SSDがUEFI boot領域と / だけになりシンプルで整理整頓された部屋のようで気持ちが良いです。トラブルやバグを減らす最善の方法はなるべくシンプルに保つこと以外にないでしょう。

Arch LinuxでThinkPad X1 carbonのUEFI BIOSをアップデート

対応するハードはLinux Vendor Firmware Service(LVFS)で確認してください。 対応するハードの一覧はこちらのページにあります。 Linuxをインストールするハードを買う時はLinux Vendor Firmware Service(LVFS)をチェックしてから買うとよいと思います。 LinuxでUEFI BIOSをアップデートするために必要なものをインストールします。

sudo pacman -S fwupd dmidecode

UEFI BIOSのバージョンがあっているか確認します。

sudo dmidecode -s bios-version

Updateされるデータをとってくる

fwupdmgr refresh

アップデートを利用可能なデバイスを確認する

fwupdmgr get-updates

UEFI BIOSアップデートする。

fwupdmgr update

UEFI BIOSをアップデートしている画像

UEFI BIOSを更新した場合、次回の起動時にgrubを再設定する必要があります。 grubの設定がとんでしまうのでArch Linuxを起動できなくなります。 Arch Linux USBメモリで起動し、次のように実行します。 この作業は2回目以降のUEFI BIOSアップデートでは不要です。 Arch Linuxをインストールしたときと同じ方法でgrubを再設定してください。 私の場合は以下のようにするとうまくいきました。

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot
arch-chroot /mnt /bin/bash
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
grub-mkconfig -o /boot/grub/grub.cfg
exit
reboot

詳細なドキュメントはArchWikiにあるので作業する前に目を通しておいたほうがよいでしょう。

ちなみに、UEFI BIOSは以下のように設定しています。

Security > Secure Boot: Disable (Arch Linuxをインストールするのに必要)
Set Config -> Sleep State: "linux" (System Firmware0.1.30以降でlinuxにするとS3 Suspendできる)
Set Config -> Thunderbolt BIOS Assist Mode: "Enabled" (S3 Suspend時の電力を最小化)
Security > I/O Port Access > Wireless WAN: Disable (SIMは不要なので節電のため切る)
Security > I/O Port Access > Memory Card Slot: Disable (不要なので節電のため切る)
Security > I/O Port Access > Fingerprint Reader: Disable (不要なので節電のため切る)
Config -> Network -> Wake On LAN: Disabled (不要なので節電のため切る)
Config -> Network -> Wake On LAN from Dock: Disabled (不要なので節電のため切る)

ThinkPad X1 Carbon のIntelスロットル問題の回避策で以下も適応する

sudo pacman -S throttled
sudo systemctl enable --now lenovo_fix.service

バッテリーを長持ちさせる方法

以前よりノートパソコンのバッテリーは長持ちするようになってきましたが、最近のThinkPadはバッテリーが本体と一体型になった関係でバッテリーの交換が気軽にできなくなりました。 一般的にノートパソコンのバッテリーを長持ちさせるにはバッテリーを満充電しないで80%くらいで充電を終えるのが良いようです。人間と同じで腹八分目がよいということなのでしょうか。 ノートパソコンのバッテリーの性能が良くなっているとはいえ、500〜1000回くらいの充電サイクルを繰り返すとバッテリーの性能が落ちてきて実用的ではなくなります。ですから充電サイクルを最小にしながら利用する必要があります。 つまりバッテリーが20%以下のときに電源をつないだときだけ充電を開始し、バッテリーが20%〜80%の間は電源をつないでも充電しないようにし、満充電しても80%以上は充電しないようにする必要があります。 この機能があるThinkPadはWindows上でこれらの機能が動くように実装されています。これらがLinux上で実現できればWindowsは不要ということになります。

これらを実現するためにTLPをインストールします。

sudo pacman -S tlp

/etc/default/tlp

# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module
# required). Charging starts when the remaining capacity falls below the
# START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH value.
# Main / Internal battery (values in %)
# Default: <none>
START_CHARGE_THRESH_BAT0=20
STOP_CHARGE_THRESH_BAT0=80
# Ultrabay / Slice / Replaceable battery (values in %)
# Default: <none>
START_CHARGE_THRESH_BAT1=20
STOP_CHARGE_THRESH_BAT1=80

バッテリーの設定をします。この説明のために一部抜粋したものなので設定ファイルの全体はGitHubに置いておきます。 ファイルを用意したら起動します。 dotfilesのディレクトリで以下を実行してください。

sudo ln -vsf ${PWD}/etc/default/tlp /etc/default/tlp
systemctl enable tlp.service
systemctl enable tlp-sleep.service

Linuxカーネル4.17以降でCoffee Lake世代以降のCPUを搭載したThinkPadであればnatacpiがデフォルトでLinuxカーネルにマージされているのでこれだけで電池を管理できます。それより古い場合はacpi_callをインストールすればよいようですが試していないので他のサイトを参考にしてください。セキュリティ問題もありますし、なるべく新しいLinuxカーネルを利用したほうがよいでしょう。

sudo tlp-stat -b

電池を確認するコマンドを実行している画像

充電3回目のサイクルで現在のバッテリー残量は26.9%であることがわかります。 バッテリーが20%以下のときに電源をつないだときは充電を開始し、バッテリーが20%〜80%の間は電源をつないでも充電しないようにし、満充電しても80%以上は充電しないようにできました。 普段は電源のあるところでバッテリーが20%〜80%の状態で作業しているのでバッテリーはほとんど減りません。厳密に言うと毎日0.2%くらいは減っていますが、増えていることはないので充電は一切されていないように見えます。おそらく電源だけでほとんどまかなえているがごく稀に電源でまかなえていない状態のときがあり、電池を消費3しているのではないかと思います。とはいえ、電池の充電サイクルを最小にするという当初の目的は達成できています。 電源のないところでの作業前には80%に充電して出かけ、普段は20%〜80%の間で電源をつなぎながら利用することで充電サイクルを最小化し、20%以下になったら充電するという機能がLinuxだけで実現できています。これで気兼ねなくWindowsを消すことができました。

PD対応モバイルバッテリーのすすめ

Power Delivery 45W に対応しているモバイルバッテリーを買うとThinkPad X1 Carbonを充電できます。 私が購入したのはモバイルバッテリーcheero Power Plus 5 15000mAh with Power Delivery 45Wですが、 試してみたところThinkPad本体のバッテリーが20%以下のときにモバイルバッテリーをつないだときは充電を開始し、ThinkPad本体のバッテリーが20%〜80%の間はモバイルバッテリーをつないでも充電しないようにし、満充電しても80%以上は充電しない動作がモバイルバッテリーでも実現します。 つまりThinkPad本体のバッテリーの充電サイクルを消費することなく電源のない場所で作業できるようになります。 このモバイルバッテリーは5000円くらいで購入できるのでバッテリーが弱ったら気兼ねなく買い替えれますし、サイズも胸ポケットにはいるくらいの大きさなのでカバンに忍ばせておくのも苦ではないのでオススメです。

cheero Power Plus 5 15000mAh with Power Delivery 45W amazon.co.jp

  1. Microsoft Edgechromiumベースになるのでブラウザの動作確認をする必要性もあまりないと思います。動作確認する必要がある場合はAzureのWindowsを使えますし、continuous integrationするならAzureのほうが便利だと思います。あるいは、Microsoftが無償で提供しているEdgeとIEのvirtual machinesKVMで利用する方法があります。つまるところLinux版のEdgeを使えばよいと思います。 ↩︎

  2. 無益な殺生をしたくない時や、個人所有でないThinkPadを使うならデフォルトのSSDを取り出して保存しておいて、追加で買ってきたSSDにLinuxをインストールする方法が考えられます。しかし、SSDを追加で買って使わないSSDが存在することは資源の無駄使いのように思えます。自己所有でないパソコンでかつ、返却後にWindowsとして使われるなら資源の無駄使いではないと思いますが…。 ↩︎

  3. あるいはこれくらいは自然に減少していくのかもしれません。 ↩︎

タグ一覧

お仕事のご相談などはこちらからどうぞ

お仕事の依頼はこちらからどうぞ