Arch Linux Reinstall on MacBookPro11,3
Posted on Fri 17 April 2026 in Macbook
• [12 min read]
Cel: czysta reinstalacja Arch Linux na MacBookPro11,3 z układem ESP + LUKS2 + LVM + ext4, z działającą hibernacją, osobnym /home, szyfrowaniem całego systemu poza ESP i backupem na zewnętrzny dysk.
- Założenia
- Dlaczego ten układ
- Docelowy układ dysku
- Dlaczego root = 100 GiB
- Co z dawnych notatek nadal jest aktualne
- Wi-Fi na tym modelu
- Przebieg prac
- Faza 1: Backup starego systemu
- Faza 2: Przygotowanie do instalacji
- Faza 2A: Plan awaryjny dla Wi-Fi podczas instalacji
- Faza 3: Przebudowa dysku
- Faza 4: LUKS2 i LVM
- Faza 5: Montowanie i instalacja bazowa
- Faza 6: Konfiguracja systemu w arch-chroot
- Faza 7: mkinitcpio, resume i boot
- Faza 8: Wyjście, reboot i pierwszy start
- Faza 9: Odtworzenie pakietów i danych
- Faza 10: Konfiguracja suspend
- Faza 11: Konfiguracja hibernate
- Faza 12: Automatyka po zamknięciu pokrywy
- Faza 13: Sway i lock screen
- Skrypt: sanity check po instalacji
- Rzeczy, których nie robić
- Lista kontrolna
- Dalsze kroki po tej procedurze
Założenia
- Sprzęt: MacBookPro11,3, Intel i7-4960HQ, grafika Intel jako główna, sway/Wayland.
- Instalacja od zera, nie migracja istniejącego rootfs.
- systemd-boot jako bootloader.
- ESP pozostaje nieszyfrowane.
- Reszta dysku wewnętrznego jest zaszyfrowana jako jeden kontener LUKS2.
- Wewnątrz LUKS2 działa LVM.
- System plików dla root i home: ext4.
- Hibernacja jest realizowana przez osobny logiczny wolumen swap.
- Zewnętrzny dysk ~1 TB służy do backupu danych, konfiguracji i list pakietów.
Dlaczego ten układ
- ESP musi być widoczne dla firmware i bootloadera, więc pozostaje poza szyfrowaniem.
- Jeden kontener LUKS2 na całą resztę dysku daje prosty model bezpieczeństwa i prostą obsługę przy starcie.
- LVM pozwala oddzielić root, home i swap bez sztywnego dzielenia GPT na wiele partycji systemowych.
- ext4 jest prostsze operacyjnie niż btrfs i mniej problematyczne dla hibernacji.
- Dedykowany LV swap upraszcza resume i eliminuje komplikacje swapfile.
- Dla Wi-Fi Broadcom BCM4331 na tym konkretnym laptopie należy uwzględnić sterownik wl z pakietu broadcom-wl albo broadcom-wl-dkms, bo to właśnie ten sterownik działa na obecnym systemie.
Docelowy układ dysku
Zakładany dysk wewnętrzny: nvme0n1 ~447 GiB
- nvme0n1p1 1 GiB FAT32 ESP montowane jako /boot
- nvme0n1p2 reszta dysku jako LUKS2
Wewnątrz LUKS2:
- vg0/root 100 GiB ext4
- vg0/swap 32 GiB
- vg0/home reszta ext4
Dlaczego root = 100 GiB
100 GiB nie jest minimalnym wymaganiem. To świadomy zapas.
Powody:
- Na obecnym systemie samo /usr zajmuje około 31 GiB.
- Obecne /opt zajmuje około 7.7 GiB.
- Obecne /var zajmuje około 46 GiB, ale to jest mocno zawyżone przez cache i ślady starej instalacji.
- Po czystej reinstalacji realne zużycie świeżego systemu będzie dużo niższe, ale laptop developerski z GUI, przeglądarką, toolchainami, Flatpakami i dodatkowymi runtime'ami potrafi z czasem urosnąć.
100 GiB daje komfort:
- nie trzeba agresywnie czyścić cache po każdej większej aktualizacji,
- jest miejsce na kilka kerneli, initramfs i większe pakiety,
- jest zapas na narzędzia developerskie, build cache, logi i lokalne eksperymenty,
- nie trzeba szybko robić lvresize, jeśli system zacznie rosnąć.
Jeśli kiedyś uznasz, że to za dużo, LVM pozwala to skorygować. Przy nowej instalacji lepiej mieć umiarkowanie za dużo root niż za mało.
Co z dawnych notatek nadal jest aktualne
Twoje starsze artykuły o instalacji Linuksa na tym laptopie nadal są przydatne jako kontekst sprzętowy, ale nie jako dokładna instrukcja userspace dla nowego systemu.
Nadal przydatne:
- nie tworzyć drugiej partycji EFI, jeśli już istnieje jedna poprawna ESP,
- pamiętać o specyfice MacBookPro11,3 i pracy głównie na grafice Intel,
- testować usypianie i hibernację świadomie, po kolei,
- traktować hibernację jako osobny temat wymagający poprawnego resume.
Nie kopiować już bezpośrednio do nowego systemu:
- ścieżek opartych o Xorg, .xinitrc, .Xmodmap, xev,
- konfiguracji opartych o ly i klasyczny login X,
- przepisu na rEFInd albo GRUB jako domyślną ścieżkę,
- starego podejścia do blokady ekranu przez xscreensaver.
Nowy system budujemy wokół:
- systemd-boot,
- sway,
- swayidle,
- lockera zgodnego z Wayland,
- systemd-logind do obsługi pokrywy,
- systemctl suspend i systemctl hibernate jako interfejsów wysokiego poziomu.
Wi-Fi na tym modelu
Na tym egzemplarzu Wi-Fi to:
- Broadcom BCM4331 [14e4:4331]
- subsystem Apple AirPort Extreme [106b:00ef]
- obecnie działający sterownik: wl
Wniosek praktyczny:
- po świeżej instalacji nie należy zakładać, że sam linux-firmware wystarczy,
- w docelowym systemie trzeba doinstalować sterownik Broadcoma już na etapie pacstrap,
- najprostsza ścieżka to broadcom-wl,
- bardziej odporna na przyszłe aktualizacje kernela jest ścieżka broadcom-wl-dkms + dkms + linux-headers.
Dla tej instrukcji przyjmujemy prostszy wariant:
- broadcom-wl
Jeśli później będziesz używał wielu kerneli albo chcesz maksymalnie ograniczyć ryzyko chwilowego braku Wi-Fi po aktualizacji kernela, zamień go na:
- broadcom-wl-dkms
- dkms
- linux-headers
Przebieg prac
- Wykonać backup danych i konfiguracji na zewnętrzny dysk.
- Przygotować listy pakietów i eksport ustawień.
- Uruchomić Arch ISO.
- Przebudować dysk i stworzyć nowy układ ESP + LUKS2 + LVM.
- Zainstalować bazowy Arch ręcznie.
- Skonfigurować boot, initramfs, resume, użytkownika i sieć.
- Odtworzyć pakiety, konfiguracje i dane z backupu.
- Przetestować suspend.
- Przetestować hibernate.
- Dopiero po testach włączyć automatyczne akcje na zamknięcie pokrywy.
Faza 1: Backup starego systemu
Gotowe wersje skryptów z tej sekcji znajdują się tutaj:
Co backupować
Obowiązkowo:
- cały /home/paczor z wyłączeniem dużych cache, jeśli chcesz skrócić backup,
- /etc,
- listę pakietów pacmana,
- listę pakietów AUR, jeśli ich używasz,
- ważne lokalne skrypty i notatki spoza /home,
- wpisy bootloadera i bieżącą konfigurację zasilania do porównania,
- kopię tablicy partycji.
Opcjonalnie:
- ~/.ssh,
- ~/.gnupg,
- ~/.config,
- ~/.local/share,
- profile przeglądarek,
- niestandardowe fonty,
- eksport bazy aplikacji, jeśli masz takie dane poza home.
Jak przygotować zewnętrzny dysk
Załóżmy, że po podłączeniu jest widoczny jako /dev/sdX1 i montuje się pod /run/media/... albo ręcznie pod /mnt/backup.
Najpierw sprawdź:
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL
Jeśli trzeba zamontować ręcznie:
sudo mkdir -p /mnt/backup
sudo mount /dev/sdX1 /mnt/backup
Skrypt: eksport metadanych systemu
Ten skrypt nie robi kopii danych użytkownika. Zbiera listy pakietów i konfigurację referencyjną.
#!/usr/bin/env bash
set -euo pipefail
DEST="${1:?podaj katalog docelowy na dysku backupu}"
STAMP="$(date +%F-%H%M%S)"
OUT="$DEST/arch-migration-metadata-$STAMP"
mkdir -p "$OUT"
pacman -Qqe > "$OUT/pkglist-explicit.txt"
pacman -Qqm > "$OUT/pkglist-aur.txt" || true
cp -a /etc "$OUT/etc"
cp -a /boot/loader "$OUT/boot-loader" 2>/dev/null || true
cp -a /etc/mkinitcpio.conf "$OUT/" 2>/dev/null || true
cp -a /etc/fstab "$OUT/" 2>/dev/null || true
cp -a /etc/systemd "$OUT/systemd" 2>/dev/null || true
cp -a /etc/default "$OUT/default" 2>/dev/null || true
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,UUID,PARTUUID > "$OUT/lsblk.txt"
findmnt -R / > "$OUT/findmnt-root.txt"
swapon --show --bytes > "$OUT/swapon.txt"
cat /proc/cmdline > "$OUT/proc-cmdline.txt"
lscpu > "$OUT/lscpu.txt"
sudo sgdisk --backup="$OUT/nvme0n1.gpt.backup" /dev/nvme0n1
echo "Zapisano metadata w: $OUT"
Skrypt: backup home
Ten skrypt kopiuje katalog domowy przy użyciu rsync.
#!/usr/bin/env bash
set -euo pipefail
SRC="${1:-/home/paczor/}"
DEST="${2:?podaj katalog docelowy na dysku backupu}"
STAMP="$(date +%F-%H%M%S)"
OUT="$DEST/home-backup-$STAMP"
mkdir -p "$OUT"
rsync -aAXHv --numeric-ids \
--delete \
--exclude=".cache/" \
--exclude=".cargo/registry/" \
--exclude=".local/share/Trash/" \
--exclude="Downloads/" \
"$SRC" "$OUT/"
echo "Zapisano backup home w: $OUT"
--exclude="Downloads/" usuń, jeśli chcesz pełny backup bez wyjątków.
Zalecenie
Uruchom oba skrypty przed jakimikolwiek zmianami na dysku wewnętrznym. Po backupie ręcznie sprawdź, czy na dysku zewnętrznym faktycznie są:
- pkglist-explicit.txt
- kopia /etc
- backup home
- kopia GPT
Faza 2: Przygotowanie do instalacji
Przygotuj nośnik Arch ISO
Użyj aktualnego obrazu Arch Linux i przygotuj bootowalny pendrive.
Ważne: pacstrap nie zakłada pakietów z pendrive'a instalacyjnego
Nie zakładaj, że pacstrap weźmie broadcom-wl albo inne dodatkowe pakiety bezpośrednio z nośnika USB, z którego bootujesz live ISO.
W praktyce:
- domyślnie pacstrap pobiera pakiety z mirrorów zdefiniowanych w mirrorlist,
- live ISO nie przenosi automatycznie wszystkich swoich pakietów do nowej instalacji,
- jeśli chcesz doinstalować dodatkowe pakiety, takie jak broadcom-wl, najprościej zapewnić internet już w środowisku live,
- jeśli internetu nie będzie, potrzebujesz planu awaryjnego.
Dlatego poniżej są trzy warianty.
Sprawdź tryb bootu
Po uruchomieniu z ISO sprawdź:
ls /sys/firmware/efi/efivars
Jeśli katalog istnieje, system live działa w trybie UEFI.
Włącz sieć
Jeśli używasz Wi-Fi:
iwctl
W środku:
device list
station wlan0 scan
station wlan0 get-networks
station wlan0 connect NAZWA_SIECI
exit
Potem sprawdź:
ping -c 3 archlinux.org
timedatectl set-ntp true
Faza 2A: Plan awaryjny dla Wi-Fi podczas instalacji
Twoja karta Broadcom BCM4331 może nie działać od razu w środowisku live tak, jak w docelowym systemie z broadcom-wl. Nie planuj instalacji tak, jakby internet po Wi-Fi był gwarantowany bez dodatkowych kroków.
Wariant 1: internet działa już w live ISO
To jest wariant najlepszy.
Jeśli po starcie live środowiska masz internet:
- użyj go normalnie do pacstrap,
- dodaj broadcom-wl albo broadcom-wl-dkms do listy pakietów,
- po pierwszym boocie nowy system powinien mieć już właściwy sterownik.
Wariant 2: USB tethering z telefonu
To jest najlepszy plan awaryjny, jeśli live ISO nie ma działającego Wi-Fi.
Po stronie telefonu:
- włącz tethering USB,
- podepnij telefon kablem do MacBooka.
W live ISO sprawdź:
ip link
nmcli device status
Zwykle pojawi się nowy interfejs przewodowy albo USB-network i od razu dostanie IP z DHCP. Sprawdź:
ping -c 3 archlinux.org
Jeśli działa:
- kontynuuj instalację normalnie,
- zostaw broadcom-wl w pacstrap.
Wariant 3: instalacja offline z lokalnego pakietu
Jeśli nie chcesz polegać na sieci podczas instalacji, przygotuj wcześniej pakiety na drugim nośniku.
Na działającym Arch przed reinstalacją pobierz paczki do osobnego katalogu:
mkdir -p /tmp/arch-offline-pkgs
sudo pacman -Sw --cachedir /tmp/arch-offline-pkgs broadcom-wl
Jeśli wybierzesz wariant DKMS:
mkdir -p /tmp/arch-offline-pkgs
sudo pacman -Sw --cachedir /tmp/arch-offline-pkgs broadcom-wl-dkms dkms linux-headers
Potem skopiuj ten katalog na zewnętrzny dysk lub drugi pendrive.
Po pacstrap i wejściu do arch-chroot, zamontuj nośnik z pakietami i zainstaluj lokalnie:
pacman -U /ścieżka/do/pakietów/*.pkg.tar.zst
Ten wariant jest dobry jako zabezpieczenie, ale nie zastępuje pełnego internetu podczas instalacji, jeśli chcesz od razu zainstalować większą liczbę dodatkowych pakietów.
Zalecenie praktyczne
Najlepszy realny plan:
- Miej przygotowany live ISO.
- Miej przygotowany backup na dysku zewnętrznym.
- Miej przygotowany awaryjnie katalog z broadcom-wl na zewnętrznym dysku.
- Jeśli live ISO nie ma Wi-Fi, użyj USB tetheringu.
- Jeśli tethering nie zadziała, dokończ bazową instalację i doinstaluj broadcom-wl lokalnie w arch-chroot z przygotowanego nośnika.
Faza 3: Przebudowa dysku
Ostrzeżenie
Kolejne polecenia kasują obecny układ dysku. Nie wykonuj ich, jeśli backup nie został sprawdzony.
Docelowy schemat GPT
- p1 1 GiB EFI System
- p2 cała reszta Linux filesystem, później użyta jako LUKS2
Polecenia
Zakładam dysk /dev/nvme0n1.
wipefs -af /dev/nvme0n1
sgdisk --zap-all /dev/nvme0n1
sgdisk -n 1:0:+1G -t 1:ef00 -c 1:"EFI System" /dev/nvme0n1
sgdisk -n 2:0:0 -t 2:8309 -c 2:"Linux LUKS" /dev/nvme0n1
partprobe /dev/nvme0n1
lsblk -o NAME,SIZE,TYPE,FSTYPE,PARTLABEL /dev/nvme0n1
Format ESP
mkfs.fat -F32 -n EFI /dev/nvme0n1p1
Faza 4: LUKS2 i LVM
Utwórz kontener LUKS2
cryptsetup luksFormat --type luks2 /dev/nvme0n1p2
cryptsetup open /dev/nvme0n1p2 cryptroot
Utwórz LVM
pvcreate /dev/mapper/cryptroot
vgcreate vg0 /dev/mapper/cryptroot
lvcreate -L 100G -n root vg0
lvcreate -L 32G -n swap vg0
lvcreate -l 100%FREE -n home vg0
Utwórz systemy plików
mkfs.ext4 /dev/vg0/root
mkfs.ext4 /dev/vg0/home
mkswap /dev/vg0/swap
Faza 5: Montowanie i instalacja bazowa
Montowanie
mount /dev/vg0/root /mnt
mkdir -p /mnt/home /mnt/boot
mount /dev/vg0/home /mnt/home
mount /dev/nvme0n1p1 /mnt/boot
swapon /dev/vg0/swap
Instalacja pakietów bazowych
Minimalny zestaw:
pacstrap -K /mnt \
base base-devel linux linux-firmware \
lvm2 cryptsetup mkinitcpio \
networkmanager wpa_supplicant iwd \
broadcom-wl \
sudo vim git \
intel-ucode \
efibootmgr
Wariant alternatywny, jeśli wolisz DKMS:
pacstrap -K /mnt \
base base-devel linux linux-firmware linux-headers dkms \
lvm2 cryptsetup mkinitcpio \
networkmanager wpa_supplicant iwd \
broadcom-wl-dkms \
sudo vim git \
intel-ucode \
efibootmgr
Jeśli chcesz od razu dołożyć podstawy pod późniejszy desktop:
pacstrap -K /mnt \
sway swayidle foot kitty waybar \
xdg-desktop-portal-wlr \
pipewire wireplumber \
brightnessctl
Nie traktuj tego jako pełnej listy aplikacji użytkownika. To tylko pakiety startowe.
Generowanie fstab
genfstab -U /mnt >> /mnt/etc/fstab
cat /mnt/etc/fstab
Wejście do arch-chroot
arch-chroot /mnt
Faza 6: Konfiguracja systemu w arch-chroot
Strefa czasu i zegar
ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
hwclock --systohc
Locale
Odkomentuj potrzebne locale w /etc/locale.gen, np.:
en_US.UTF-8 UTF-8
pl_PL.UTF-8 UTF-8
Potem:
locale-gen
printf 'LANG=pl_PL.UTF-8\n' > /etc/locale.conf
Hostname i hosts
printf 'macbookpro11-3\n' > /etc/hostname
cat > /etc/hosts <<'EOF'
127.0.0.1 localhost
::1 localhost
127.0.1.1 macbookpro11-3.localdomain macbookpro11-3
EOF
Włącz usługi
systemctl enable NetworkManager
Hasło roota
passwd
Użytkownik
useradd -m -G wheel -s /bin/bash paczor
passwd paczor
EDITOR=vim visudo
Odkomentuj linię:
%wheel ALL=(ALL:ALL) ALL
Faza 7: mkinitcpio, resume i boot
Upewnij się, że HOOKS zawiera encrypt, lvm2, resume
W /etc/mkinitcpio.conf ustaw:
HOOKS=(base udev autodetect modconf block keyboard keymap consolefont encrypt lvm2 filesystems resume fsck)
Jeśli nie używasz consolefont, możesz go usunąć.
Ustal UUID kontenera LUKS i swap
blkid /dev/nvme0n1p2
blkid /dev/vg0/swap
Zbuduj initramfs
mkinitcpio -P
Zainstaluj systemd-boot
bootctl install
/boot/loader/loader.conf
default arch.conf
timeout 3
console-mode max
editor no
/boot/loader/entries/arch.conf
Podstaw właściwe UUID:
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options cryptdevice=UUID=LUKS_UUID:cryptroot root=/dev/vg0/root resume=UUID=SWAP_UUID rw loglevel=3 modprobe.blacklist=nouveau nouveau.modeset=0
Uwagi:
- cryptdevice= działa dobrze z mkinitcpio hookiem encrypt.
- resume= musi wskazywać UUID urządzenia swap.
- nouveau pozostaje wyłączone, jeśli chcesz iść drogą Intel-only jak obecnie.
Faza 8: Wyjście, reboot i pierwszy start
exit
umount -R /mnt
swapoff -a
reboot
Po restarcie:
- odblokuj LUKS,
- zaloguj się jako root albo paczor,
- upewnij się, że działa sieć,
- sprawdź, czy system bootuje z systemd-boot.
Szybki test Wi-Fi po pierwszym boocie
lspci -nnk | rg -A4 -i 'network|wireless|broadcom'
lsmod | rg 'wl|b43|bcma|brcm'
nmcli device status
Oczekiwany wynik:
- Kernel driver in use: wl
- moduł wl jest załadowany
- interfejs Wi-Fi jest widoczny dla NetworkManager
Jeśli moduł nie wstał od razu:
sudo modprobe wl
sudo depmod -a
Pakiet broadcom-wl dostarcza własną blacklistę konfliktujących modułów, więc przy instalacji z repo zwykle nie trzeba ręcznie dopisywać blacklist dla b43, bcma, brcm80211, brcmfmac, brcmsmac i ssb.
Faza 9: Odtworzenie pakietów i danych
Odtwórz podstawowe pakiety
Jeśli backup zawiera pkglist-explicit.txt, skopiuj go do nowego systemu i uruchom:
sudo pacman -S --needed - < pkglist-explicit.txt
W praktyce warto tę listę najpierw przejrzeć i usunąć:
- stare pakiety tylko do X11,
- pakiety, których już nie potrzebujesz,
- pakiety związane ze starą konfiguracją bootu lub sterownikami, których nie chcesz używać.
Odtwórz home
Najpierw zamontuj dysk zewnętrzny.
Potem:
sudo rsync -aAXHv --numeric-ids /mnt/backup/home-backup-YYYY-MM-DD-HHMMSS/paczor/ /home/paczor/
sudo chown -R paczor:paczor /home/paczor
Odtwarzanie konfiguracji
Nie kopiuj ślepo całego starego /etc.
Kopiuj wybiórczo:
- konfiguracje sieci,
- własne skrypty,
- wybrane pliki z /etc/systemd,
- wpisy dotyczące sway, terminala, fontów, audio, input,
- własne usługi user/systemd.
Nie kopiuj bezrefleksyjnie:
- starego mkinitcpio.conf,
- starego fstab,
- starego arch.conf,
- konfiguracji pod X11,
- rzeczy związanych ze starym układem partycji.
Faza 10: Konfiguracja suspend
Najpierw nie włączaj automatyki na pokrywę. Testujemy ręcznie.
Ustawienia neutralne na czas testów
W /etc/systemd/logind.conf ustaw:
[Login]
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
W /etc/systemd/sleep.conf ustaw tylko wtedy, jeśli chcesz jawnie wymusić głęboki sen:
[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=no
MemorySleepMode=deep
Przeładuj:
sudo systemctl restart systemd-logind
Test ręczny
systemctl suspend
Po wybudzeniu sprawdź:
journalctl -b -1 -u systemd-suspend.service --no-pager
journalctl -b --no-pager | rg -i 'suspend|resume|sleep'
Cel testu:
- system usypia się bez zawieszenia,
- wybudza się z klawiatury, touchpada albo myszki,
- ekran wraca poprawnie,
- sesja sway działa po wybudzeniu.
Faza 11: Konfiguracja hibernate
Sprawdzenie warunków
swapon --show
cat /proc/cmdline
grep '^HOOKS=' /etc/mkinitcpio.conf
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,UUID
Upewnij się, że:
- swap to vg0/swap,
- resume=UUID=... wskazuje właściwy swap,
- initramfs zawiera resume,
- system startuje z wpisu systemd-boot, który to zawiera.
Test ręczny
systemctl hibernate
Po wznowieniu sprawdź:
journalctl -b --no-pager | rg -i 'hibernate|resume'
nmcli device status
Cel testu:
- system wraca do tego samego stanu sesji,
- ekran się podnosi,
- Wi-Fi wraca poprawnie,
- sway i aplikacje nie są w stanie uszkodzonym.
Faza 12: Automatyka po zamknięciu pokrywy
Włącz to dopiero po pozytywnych testach ręcznych.
Opcja zalecana
Na początek ustaw zwykły suspend po zamknięciu pokrywy:
[Login]
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignore
To jest najbezpieczniejsze ustawienie na start.
Gdy suspend i hibernate są stabilne
Możesz rozważyć:
[Login]
HandleLidSwitch=suspend-then-hibernate
HandleLidSwitchExternalPower=suspend-then-hibernate
HandleLidSwitchDocked=ignore
oraz w /etc/systemd/sleep.conf:
[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
HibernateDelaySec=60min
MemorySleepMode=deep
To daje:
- szybkie uśpienie po zamknięciu pokrywy,
- automatyczne przejście w hibernację po godzinie.
Jeśli priorytetem jest prostota i przewidywalność, zostań przy samym suspend na pokrywie i używaj hibernate ręcznie albo przez timeout.
Faza 13: Sway i lock screen
systemd powinien odpowiadać za zasilanie i pokrywę. sway powinien odpowiadać za UX sesji: lock, wygaszanie, idle.
Przykład dla ~/.config/sway/config:
exec swayidle -w \
timeout 600 'swaylock -f -c 000000' \
before-sleep 'swaylock -f -c 000000'
Jeśli używasz własnego lockera albo pluginu, dopasuj komendy do niego.
Nie dubluj obsługi pokrywy w sway, jeśli robi to logind.
Skrypt: sanity check po instalacji
Ten skrypt nie zmienia konfiguracji. Tylko sprawdza kluczowe warunki.
#!/usr/bin/env bash
set -euo pipefail
echo '== lsblk =='
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,UUID
echo
echo '== swapon =='
swapon --show
echo
echo '== cmdline =='
cat /proc/cmdline
echo
echo '== mkinitcpio hooks =='
grep '^HOOKS=' /etc/mkinitcpio.conf || true
echo
echo '== boot entry =='
sed -n '1,200p' /boot/loader/entries/arch.conf
echo
echo '== sleep config =='
sed -n '1,200p' /etc/systemd/logind.conf
sed -n '1,200p' /etc/systemd/sleep.conf 2>/dev/null || true
echo
echo '== current mem_sleep =='
cat /sys/power/mem_sleep
echo
echo '== available sleep states =='
cat /sys/power/state
Rzeczy, których nie robić
- Nie kopiuj starego /etc hurtowo na nowy system.
- Nie konfiguruj pokrywy przed ręcznym testem suspend i hibernate.
- Nie mieszaj jednocześnie GRUB i systemd-boot.
- Nie wracaj do starych rozwiązań opartych o Xorg, jeśli nowy system ma być na sway/Wayland.
- Nie testuj hibernacji na za małym swapie.
- Nie zakładaj, że konfiguracja z poprzednich artykułów będzie działać 1:1 na obecnym Arch i systemd.
Lista kontrolna
- Backup danych wykonany i sprawdzony.
- Kopia GPT wykonana.
- Lista pakietów wyeksportowana.
- Arch ISO uruchomione w UEFI.
- Nowy układ ESP + LUKS2 + LVM utworzony.
- root, home, swap utworzone i zamontowane.
- Arch zainstalowany przez pacstrap.
- mkinitcpio, resume i systemd-boot skonfigurowane.
- System bootuje.
- Dane i konfiguracje przywrócone.
- suspend działa ręcznie.
- hibernate działa ręcznie.
- Dopiero potem włączona automatyka dla pokrywy.
Dalsze kroki po tej procedurze
Po zakończeniu reinstalacji warto zrobić osobny, mały dokument tylko dla:
- konfiguracji sway i lockera,
- doboru pakietów użytkownika,
- dostrojenia audio, jasności i input,
- ewentualnej kontroli dGPU i zasilania specyficznej dla MacBookPro11,3.