Arch Linux na Macbooku Pro Late 2013 (11,3)
Posted on Thu 25 May 2023 in Hardware, Linux, Macbook • 5 min read
Instalacja wg poniższych poradników:
https://wiki.archlinux.org/title/MacBookPro11,x
oraz z pomocą oficjalnego przewodnika:
https://wiki.archlinux.org/title/Installation_guide
Używałem również następującego obrazka ale ostrzegam, to jest dość stara instrukcja i nowicjusz, jak ja, może się przez nią zagubić.
Przy pierwszej próbie popełniłem błąd tworząc partycję EFI podczas gdy po instalacji macOS-a taka partycja już istniała. W efekcie nic nie działało, a mnie się grzebać nie chciało i zaczałem wszystko od nowa.
Na razie bootowanie jest za pomocą refinda ale chyba z niego zrezygnuję tylko wczytam się w dokumentację i zrobię porządny konfig bezpośrednio w
Karta graficzna (ma być tylko Intel, a NVidia wyłączona z prądu)
Macbook Pro ma 2 karty graficzne: dyskretną, mocną NVidii i słabą, intelowską. macOS radzi sobie doskonale z przełączaniem pomiędzy nimi, zależnie od potrzeby. W Linuksie nie ma łatwo. A robię to po to aby oszczędzać energię (i baterię), na Intelu laptop żre mniej energii i dłużej działa. Proste.
Tutaj opis: https://wiki.archlinux.org/title/MacBookPro11,x#Getting_the_integrated_intel_card_to_work_on_11,3
Można też pobrać spreparowany loader dla refinda i startować Archa z jego pomocą. Tutaj link: https://github.com/0xbb/apple_set_os.efi
Sprawdzenie, która karty są w systemie:
lspci -vnnn | perl -lne 'print if /^\d+\:.+(\[\S+\:\S+\])/' | grep VGA
W przypadku Nvidii zwraca to:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107M [GeForce GT 750M Mac Edition] [10de:0fe9] (rev a1) (prog-if 00 [VGA controller])
W przypadku Intela to:
00:02.0 VGA compatible controller [0300]: Intel Corporation Crystal Well Integrated Graphics Controller [8086:0d26] (rev 08) (prog-if 00 [VGA controller])
Na początek, po paru próbach, w końcu skopiowałem odpowiedni obraz efi (https://github.com/0xbb/apple_set_os.efi) i zainstalowałem Gruba.
Instalacja GRUB: https://wiki.archlinux.org/title/Mac#Using_the_native_Apple_boot_loader_with_GRUB
sudo su - pacman -S grub pacman -S efibootmgr grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=DUPA
DUPA to nazwa katalogu, który pojawi się w /boot i jednocześnie ID wpisu. Potem jeszcze trzeba wyprodukować konfigurację Gruba ale najpierw dopisać do pliku: /etc/grub.d/40_custom następującą zawartość:
search --no-floppy --set=root --label EFI chainloader (${root})/EFI/custom/apple_set_os.efi boot
Teraz tworzę konfig:
grub-mkconfig -o /boot/grub/grub.cfg
Po zbootowaniu, używam narzędzia gpu-switch (https://github.com/0xbb/gpu-switch) aby włączyć grafikę Intela:
gpu-switch -i
Robię reboot i sprawdzam, która karta jest aktywna:
cat /sys/kernel/debug/vgaswitcheroo/switch
Output wygląda podobnie:
0:DIS-Audio: :DynOff:0000:01:00.1 1:IGD:+:Pwr:0000:00:02.0 2:DIS: :Pwr:0000:01:00.0
Onacza to, że aktywna jest grafika intelowska ale NVidia nadal jest zasilana, a to mi się nie podoba. Należy ją wyłączyć następującym poleceniem:
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Po ponownym sprawdzeniu cat-em mam to o co chodziło:
0:DIS-Audio: :DynOff:0000:01:00.1 1:IGD:+:Pwr:0000:00:02.0 2:DIS: :Off:0000:01:00.0
WiFi
Pierwszą rzeczą, która nie działała po instalce była karta WiFi.
pacman -S networkmanager
Ciche bootowanie
Wyciszenie dzwieku przy bootowaniu, koniecznie jako root:
chattr -i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82 printf "\x07\x00\x00\x00\x00" > /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82
Zapamiętanie hasła (Nextcloud i inne programy)
Xorg
Informacje ogólne
Do wyłapywania kodów klawiatury znakomicie nadaje się program xev, używam go tak:
xev | sed -n 's/^.*keycode *\([0-9]\+\).*$/keycode \1 = /p'
W oknie które się pojawi wystarczy wciskać klawisze lub ich kombinacje, a w konsoli pojawiają się odpowiadające im kody.
Display manager
Klawiatura
Układ klawiatury X'ów zapisałem w .Xmodmap, który wczytuję w .xinitrc, linia:
xmodmap ~/.Xmodmap
zawartość .Xmodmap to:
# Rewers myszy pointer = 1 2 3 5 4 7 6 8 9 10 11 12 # Klawisze ciemniej / jasniej keycode 232 = XF86KbdBrightnessDown keycode 233 = XF86KbdBrightnessUp # Poswietlenie klawiatury F5 i F6 z Shiftem keycode 237 = XF86KbdBrightnessDown keycode 238 = XF86KbdBrightnessUp # Cisza / Ciszej / Glosniej F10/F11/F12 keycode 121 = XF86AudioMute keycode 122 = XF86AudioLowerVolume keycode 123 = XF86AudioRaiseVolume
następnie remapuję klawisze, np. żeby zamiast prawego Super mieć Alt do polskich liter, w .xinitrc:
/home/paczor/bin/klawisz_pl.sh
zawartość klawisz_pl.sh:
setxkbmap -model apple -layout pl -option caps:none #/usr/bin/xmodmap -e 'remove mod4 = Super_R' /usr/bin/xmodmap -e 'keycode 134 =' /usr/bin/xmodmap -e 'keycode 94 = grave asciitilde grave asciitilde' /usr/bin/xmodmap -e 'keycode 134 = ISO_Level3_Shift' /usr/bin/xmodmap -e 'clear mod4' #/usr/bin/xmodmap -e 'keycode 135 =' #/usr/bin/xmodmap -e 'keycode 135 = ISO_Level3_Shift'
Mam więc zamapowany lewe Jabłko (lewy Cmd) jako klawisz Super, prawe Jabłko jako prawy Alt, klawisze funkcyjne działają normalnie, a ich funkcje specjalne osiągalne są gdy trzymam wciśnięty Fn.
Screensaver
W pliku ~/.config/systemd/user/xscreensaver.service mam unit dla systemd do odpalania xscreensavera, jego zawartość:
[Unit] Description=XScreenSaver Daemon [Service] ExecStart=/usr/bin/xscreensaver --no-splash [Install] WantedBy=default.target
Włączam go przez:
systemctl --user enable xscreesaver.service
W ~/.xmonad/xmonad.hs mam linię mapującą Super+F12 na włączenie blokady ekranu, wygląda to tak:
, ((mod4Mask, 0xffc9), spawn "xscreensaver-command -lock")
Jak dodawać własne serwisy do systemd, tutaj: https://wiki.archlinux.org/title/Systemd/User.
Wiatraki
Laptop był/jest głośny, wiatraki kręcą się niemal cały czas na dużych obrotach chociaż load sytemu waha się wokół 10%, a temperatura CPU rzadko przekracza 70 st. Ej? To jest laptop, on tak może długo, nawet jeśli ma już ponad 8 lat (w 2022 r.). Powinien być cichy.
Zainstalowałem macfand-git, włączyłem ale wiatraki nadal szalały i zdarzało się pełne wyłączenie i włączenie - taki chwilowy suspend do RAM. Wyłączyłem.
Zainstalowałem mbfan-git
yay -S mbfan-git
I jest ciszej ale co kilka sekund wiatraki wchodzą na obroty, wnerwiające. Temperatura skoczyła do ponad 83 st.!
Hibernacja
Przed przejściem do stanu hibernacji dane z pamięci RAM powinny zostać gdzieś zapisane aby mogły być wczytane wraz z powrotem do stanu życia. U mnie jest to partycja swap.
Kernel musi "wiedzieć" gdzie szukać tych danych więc należy wskazać mu ww partycję. W przypadku używania GRUB-a polega to na edycji pliku /etc/default/grup i dodaniu wskazówki w linii:
GRUP_CMDLINE_LINUX_DEFAULT=""
ale wcześniej muszę znać UUID moje partycji swap, czyli:
sudo blkid -o full /dev/nvme0n1p4 /dev/nvme0n1p4: UUID="2004ae52-7d11-41a0-876d-4f3fa35ca2c4" TYPE="swap" PARTUUID="7853967f-c3fa-4183-9f9c-8d3fd9cee41f"
czyli linia ma wyglądać tak:
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=2004ae52-7d11-41a0-876d-4f3fa35ca2c4"
Następnie generuję konfig dla GRUB-a:
grub-mkconfig -o /boot/grub/grub.cfg
Pozostało jeszcze skonfigurować initramfs. W pliku /etc/mkinitcpio.conf dopisujemy hook o nazwie resume, przykładowa linia powinna wyglądać podobnie:
HOOKS=(base udev autodetect keyboard modconf block filesystems resume fsck)
I generujemy nowy initramfs:
mkinitcpio -P
Wprowadzone zmiany oczywiście zadziałają dopiero po restarcie.
Warto zajrzeć do plików znajdujących się w /sys/power oraz poczytać jak kernel zarządza energią:
Przy konfiguracji posługiwałem się tym linkiem: https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate