MacBook Pro (13-inch, 2017) にArch Linuxを入れたときに引っかかったこと
もうmacOSを動かすには老朽化してしまったMacBook ProにArch Linuxを入れてみました.
基本的にはインストールガイドと一般的な推奨事項を見ながらインストールしたのですが,引っかかった部分があったのでメモしておきます.
とりあえずコンソールが使えるところまでで,xorgなどはまた別で記事書きます(書かないかも).
環境
- MacBook Pro: 13-inch, 2017, Thunderbolt 3ポートx2 (A1708, MacBookPro14,1)
- Arch Linux
- Linux Kernel: 6.16.6-arch1-1
reboot後にネットワークに繋がるようにしておく
インストールメディアでインストールしてrebootする前までに,iwdパッケージをインストールしておくとよいです. このパッケージはインストールガイドの方法では入らないので,reboot後にネットワークに繋がらず,繋がらないのでpacmanでインストールもできなくなりました.(再度インストールメディアで起動してインストールした.)
pacman -S iwdまた,DHPCが自動で有効になるように,インストールメディアのものをコピーしました.
cp /etc/systemd/network/* /mnt/systemd/network/*さらに/etc/resolve.confを作りました.(覚えていないのですが,もしかしたらsystemctl enable systemd-resolvedもしたかも.)
ln -sf /run/systemd/resolve/stub-resolve.conf /etc/resolve.conf解像度が正しくセットされるようにする
MacBook Proの実際の解像度とOSが認識している解像度が違い,コンソールの下部何行が見えない状態でした.
とりあえずはstty rows 50 cols 150などとすることで回避できます.
(ちょっと思い出せないのですが,以下の作業前にpacman -S fbsetでfbsetをインストールしたかもしれません.)
根本解決方法は,まず/etc/fb.modesにモードを追加します.
mode "macbookpro13"
geometry 2560 1600 2560 1600 32
timings 0 0 0 0 0 0 0
endmodeその後sudo fbset macbookpro13で正常化することを確認したので,/etc/systemd/system/screen-resolution.serviceを作成してサービスを有効化しました.
[Unit]
Description=Screen resolution.
After=systemd-udev-settle.service
[Service]
Type=oneshot
ExecStart=fbset macbookpro13
[Install]
WantedBy=multi-user.targetこれで再起動後も解像度が正しく認識するようになりました.
cf. [SOLVED] Macbook Pro 13,1 - Wrong Resolution in TTY / Newbie Corner / Arch Linux Forums
GRUBの文字を大きくする
これも解像度に関する問題で,GRUBの画面がHiDPIを認識できていないのか,非常に小さい文字で表示されていました. これについては,GRUB用のビットマップフォントを作成して,それを使うことで対応しました.
cf. HiDPI - ArchWiki
私の場合はnoto-fontsパッケージをインストールし,grub-mkfontでサイズ36のフォントを作成し,それを/etc/default/grubに記載してGRUB設定を更新しました.
$ file /boot/grub/fonts/NotoSansMono-Regular36.pf2
/boot/grub/fonts/NotoSansMono-Regular36.pf2: GRUB2 font "Noto Sans Mono Regular 36"
$ grep GRUB_FONT /etc/default/grub
GRUB_FONT=/boot/grub/fonts/NotoSansMono-Regular36.pf2ちなみにGRUBのコンソールでvideoinfoを実行するとフレームバッファが2880 x 1800 x 32になっているように見えましたが,これはそのままでも大丈夫でした.
また,grub-mkfont実行時にWARNING: unsupported font feature parameters: 460といったワーニングが出ましたが,これも無視して特に問題はありませんでした
NTPを同期させる
インストール後,なぜかNTPが同期していませんでした.
sudo timedatectl set-ntp trueを実行することで同期するようになりました.
initramでキーボード入力ができるようにする
LUKSでディスク暗号化をしたのですが,起動時にinitramでパスワードを入力する画面でキーボード入力が効かず,パスワード入力ができませんでした.
これに対して,/etc/mkinitcpio.confを以下のように変更してinitfamfsを再作成することで治りました.
-
keyboardをautodetectより前に配置する
-
MODULESにmac_hid applespi spi_pxa2xx_platform intel_lpss_pciを入れる(全部が必要なのかはわかってないです)
-
[SOLVED] Macbook pro keyboard unavailable during boot / Kernel & Hardware / Arch Linux Forums
$ cat /etc/mkinitcpio.conf | grep -v "^#"
MODULES=(mac_hid applespi spi_pxa2xx_platform intel_lpss_pci)
BINARIES=()
FILES=()
HOOKS=(base udev modconf keyboard keymap autodetect microcode kms consolefont block encrypt filesystems fsck)
$ mkinitcpio -Pサスペンドからの復帰が早くなるようにする
systemctl suspendなどでサスペンドはできるのですがが,復帰がものすごく遅かったです(1-2分?).
さらに,遅いだけでなく,復帰後にストレージ(NVMe)の認識がおかしくなっているようで(?)ディスクアクセスができなくなりました.
これについては調査してまとめてくれている方がいます.
cf. MacBook Pro 2017でLinuxを使う場合のSuspend/Resumeの設定について | mbp2017-linux-note
私の場合はd3cold_allowedの対応だけで復帰は10秒くらいになったので,カーネルパラメタはいじりませんでした.
/usr/local/lib/systemd/system-sleep/disable-d3coldを作って/usr/lib/systemd/system-sleepとしてシンボリックリンクを作りました.
$ cat /usr/local/lib/systemd/system-sleep/disable-d3cold
#!/usr/bin/bash
# disable d3 cold sleep for PCI devices
case $1 in
pre)
for f in $(find /sys/devices -name d3cold_allowed); do
echo 0 > "$f"
done
for device in \
0000:01:00.0 \
0000:1c:00.0 \
0000:05:00.0 \
0000:05:01.0 \
0000:05:02.0 \
0000:06:00.0
do
if [ -e /sys/bus/pci/devices/$device/d3cold_allowed ]; then
echo 0 > /sys/bus/pci/devices/$device/d3cold_allowed
fi
done
;;
post)
;;
esac
$ ls -ld /usr/lib/systemd/system-sleep/disable-d3cold
lrwxrwxrwx 1 root root 50 Sep 15 14:24 /usr/lib/systemd/system-sleep/disable-d3cold -> /usr/local/lib/systemd/system-sleep/disable-d3cold*ただし,これでも復帰後にwifiが繋がらなくなる問題があり,あとで調査しようと思っています.
2025-10-22 追記
こちらに続編を書きました.
その他
キーボードレートの変更
コンソールでのキーボードレートはxorgとは別に設定が必要で,サービスを作成しました.
[Unit]
Description=Keyboard repeat rate in tty.
[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=tty
StandardOutput=tty
ExecStart=/usr/bin/kbdrate --silent --delay 250 --rate 50
[Install]
WantedBy=multi-user.targetCtrl/CapsLockの入れ替え
※ こちらは後にxremapに代えたので,この記事も参照してください.
これも,コンソール用に設定が必要でした.
これは/usr/share/kdb/keymaps/i386/qwerty/us.map.gzをコピーして/usr/share/kdb/keymaps/personal.map.gzを作成し,/etc/vconsoleを変更することで変更できました.
diff -u <(zcat /usr/share/kbd/keymaps/i386/qwerty/us.map.gz) <(zcat /usr/share/kbd/keymaps/personal.map.gz)--- /proc/self/fd/11 2025-09-20 22:24:03.784730701 +0900
+++ /proc/self/fd/12 2025-09-20 22:24:03.786730730 +0900
@@ -31,7 +31,7 @@
keycode 27 = bracketright braceright asciitilde Control_bracketright
keycode 28 = Return
alt keycode 28 = Meta_Control_m
-keycode 29 = Control
+keycode 29 = Caps_Lock
keycode 39 = semicolon colon
keycode 40 = apostrophe quotedbl
control keycode 40 = Control_g
@@ -49,6 +49,6 @@
keycode 56 = Alt
keycode 57 = space
control keycode 57 = nul
-keycode 58 = Caps_Lock
+keycode 58 = Control
keycode 86 = less greater bar
keycode 97 = ControlKEYMAP=personal