Debian na Macbooku Pro Late 2013 (11,3)
Posted on Mon 08 February 2021 in Linux, Macbook • 10 min read
Mam nadzieję, że tytuł mówi o czym jest ten artykuł, do rzeczy więc…
Poniższe słowa powstały ponad rok temu i przeleżały wszystkie te miesiące w postaci szkicu, uzupełnianego o nowe pozycje. Wiele się w tym czasie zmieniło więc znajduje się tu mieszanina różnych wersji jądra i samego systemu. Na początku był Jessie, a teraz jest Buster. Wiele problemów rozwiązały kolejne edycje kernela - po prostu pojawiały się nowe sterowniki.
Dziś, czyli w połowie lutego 2021 roku, po ponad roku niby pandemii, nie działa klawiatura, jest problem z USB i HDMI - ewidentnie Macbook dożywa już ostatnich dni.
MacOS za to stał się fatalnym systemem, piszę „stał sięâ€? bo jeszcze parę wydań temu był mi miły ale ostatnie aktualizacje sprawiały, że coraz bardziej czułem się osaczony kolejnymi „ochronamiâ€? i „udogodnieniamiâ€?.
Wracając do artykułu, nowości pojawiały się tu w miarę jak dostrajałem Macbooka do swoich skromnych potrzeb, a były to:
- pozbycie się macOS, z powodów które już wyjaśniłem,
- działające X-y z możliwością przełączenia na konsolę (to się nie udało i raczej już nie uda),
- Xmonad jako Window Manager, xmobar jako centrum informacyjne,
- działające specjalne funkcje (regulacja podświetlenia klawiatury, monitora, regulacja dźwięku, itd.),
- trackpad działający równie gładko jak w macOS (udało się połowicznie),
- działające WiFi,
- działająca hibernacja
- drobne usprawnienia softwarowe.
Instalację wykonałem podobnie jak w opisie z (https://blog.jessfraz.com/post/linux-on-mac/), tzn. że również mam refinda jako boot managera, trochę tylko podkoloryzowanego, żeby robić wrażenie i udawać hakiera.
Pierwotnie zainstalowałem kernel 3.18.36. Włączyłem obsługę Thunderbolta. Kartę Ethernet mam na USB i działa z difoltu więc bez kłopotów mogłem od razu uaktualniać i instalować software. Przeboje z wbudowaną kartą WiFi zostawiłem ale są już passe.
Terminal
Zmieniłem fonty w konsoli na czytelne. Można jednorazowo:
setfont /usr/share/consolefonts/Lat7-Terminus28x14.psf
lub na stałe:
dpkg-reconfigure -plow console-setup
Kolory w konsoli ustawiłem wg tego linku: http://user.it.uu.se/~embe8573/cols/www/index.html:
Xorg
Nvidia
Możesz to czytać dla sportu, a dla niecierpliwych: skocz do następnego punktu.
do /etc/apt/sources.list dodałem:
deb http://httpredir.debian.org/debian jessie-backports main contrib non-free apt-get update apt-get install -t jessie-backports nvidia-driver
setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0
Aktualizacja: niestety, to nie działa.
Przełączenie na zintegrowaną kartę Intel:
Dlaczego w ogóle warto zawracać sobie tym głowę?
Po pierwsze, gdy używam opesource’owego sterownika do kart Nvidii - Nouveau - nie działa hibernacja. A właściwie działa ale po wyjściu z zamrożenia użycie procesora skacze do ponad 90%, kernel zaś pluje taką ilością ostrzeżeń, że po kilku minutach syslog może spuchnąć do wielu gigabajtów.
Po drugie, po przejściu na komercyjne sterowniki Nvidii traci się możliwość przejścia z X-ów do konsoli, ekran robi się czarny i… koniec. Trzeba restartować system na ślepo.
Po trzecie, Nvidia na komercyjnych sterownikach żre mnóstwo prądu, skracając czas działania na baterii.
Jak to zrobić?
W pliku /boot/efi/EFI/refind/refind.conf dodaj linię:
spoof_osx_version 10.9
która sprawia, że Macbook „myśliâ€?, że bootuje w macOS-ie.
Pobierz gpu-switch ze strony: https://github.com/0xbb/gpu-switch. Użyj go z przełącznikiem „-iâ€?:
gpu-switch -i
Spowoduje to przełączenie na kartę Intela. Teraz reboot.
Zainstaluj pakiet: xserver-xorg-video-intel i gotowe.
A teraz jazda bez trzymanki czyi próba wyłączenia Nvidii, mnie się nie udaje, mam błędy kernela i kończy się kompletnym zwisem. Lecz jeśli jej nie wyłączę to wszystko ładnie hasa.
Działa i hibernacja i komputer nie żre prądu ale.. patrz gdzieś na koniec artykułu wpisu dotyczącego problemów z przerwaniami.
i tu:
HiDPI
Mój Macbook to model 11,3 czyli posiada gęsty ekran o nazwie Retina. Pod poniższym linkiem jest genialny poradnik co włączyć, żeby tekst na taki ekranie był czytelny. Chyba jedyne co nie zadziałało, to programy napisane w Tkinterze.
Przejście na Display Managera: sddm
dpkg-reconfigure sddm
w /etc/sddm.conf dodać wpis:
[Theme] Current=debian-paczor FacesDir=/home/paczor/Pictures/faces
Ustawiam losową twarz skryptem ~/bin/change_face.sh:
A wywołuję go z pliku ~/.zlogout (bo używam zsh).
XSCREENSAVER
mkdir ~/.config/systemd/user
a w nim plik: xscreensaver.service z następującą zawartością:
[Unit] Description=XScreenSaver Daemon [Service] ExecStart=/usr/bin/xscreensaver --no-splash [Install] WantedBy=default.target
Następnie włączam serwis:
systemctl --user enable xscreensaver.service
i uruchamiam:
systemctl --user start xscreensaver.service
TOUCHPAD
Section "InputClass" Identifier "touchpad catchall" Driver "synaptics" MatchIsTouchpad "on" # Option "VertScrollDelta" "-111" # Option "HorizScrollDelta" "-111" # Option "MinSpeed" "0.5" # Option "MaxSpeed" "1.0" # Option "AccelFactor" "0.075" # Option "LBCornerButton" "8" # browser "back" btn # Option "RBCornerButton" "9" # browser "forward" btn EndSection
a w 60-synaptics.conf:
Section "InputClass" Identifier "touchpad" Driver "synaptics" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Option "FingerHigh" "50" Option "TapButton1" "1" Option "TapButton2" "2" Option "TapButton3" "3" Option "RTCornerButton" "0" Option "RBCornerButton" "0" Option "LTCornerButton" "0" Option "LBCornerButton" "0" Option "MinSpeed" "0.7" Option "MaxSpeed" "1.7" Option "SHMConfig" "on" Option "TapAndDragGesture" "off" Option "PalmDetect" "on" Option "PalmMinWidth" "8" Option "PalmMinz" "200" EndSection
apt-get install evtest evetet /dev/input/event8
(/dev/input8 to u mnie Touchpad)
WiFi
Ta część już się zdeaktualizowała, sterownik jest w nowym kernelu. apt-get install -t jessie-backports broadcom-sta-dkms
Ale nie kompiluje się sterownik do karty WiFi.
:(pactl set-sink-mute 1 toggle
Powrót do kernela 3.17.4.
I od razu skasowanie nieudanego 3.18.36:
ap-get purge -auto-remove linux-image-3.18.*
Jeśli robiło się już:
apt-get install firmware-linux-nonfree broadcom-sta-dkms to ponowna kompilacja modułów do kernela 3.17.4: dkms build broadcom-sta -v 6.30.223.248 -k 3.17.4
KLAWIATURA
Przełączenie klawiszy funkcyjnych w działanie podobne jak w macOS czyli tylko z wciśniętym kalwiszem Fn funkcyjny np. F1 daje dodatkową funkcję, np. zmniejszenie jasności ekranu. Doinstalowuję pakiet do systemu sysfs: apt-get install sysfsutils a do /etc/sysfs.conf dopisuję linię: module/hid_apple/parameters/fnmode = 2 (można to zrobić na kilka sposobów, tu jest dokładny opis: https://help.ubuntu.com/community/AppleKeyboard) Reboot i... wszystko na razie działa! Sysfs przyda się jeszcze do podpięcia klawiszy obsługujących funkcje specjalne, takich jak: jasność ekranu, podświetlanie klawiatury, głośność, hibernacja/wyłączenie. Najpierw kody klawiszy wyłapane za pomocą: xev | sed -n 's/^.*keycode *\([0-9]\+\).*$/keycode \1 = /p' Fn+F1 = 232 Fn+F2 = 233 Fn+F3 = 128 Fn+F4 = 212 Fn+F5 = daje nic Fn+F6 = daje nic Fn+Shift+F5 = 237 Fn+Shift+F6 = 238 Fn+F7 = 173 Fn+F8 = 172 Fn+F9 = 171 Fn+F10 = 121 Fn+F11 = 122 Fn+F12 = 123 Nie używam Capslocka więc go wyłączam w ~/.Xmodmap: keycode 66 = Podświetlanie Wpisy w ~/.Xmodmap: keycode 232 = XF86MonBrightnessDown keycode 233 = XF86MonBrightnessUp keycode 237 = XF86KbdBrightnessDown keycode 238 = XF86KbdBrightnessUp Wpisy w ~/.i3/config (używałem kiedyś window managera i3): bindsym XF86MonBrightnessUp exec sudo screen-backlight up bindsym XF86MonBrightnessDown exec sudo screen-backlight down bindsym XF86KbdBrightnessDown exec sudo keyboard-backlight down bindsym XF86KbdBrightnessUp exec sudo keyboard-backlight up Do /usr/local/bin skopiowałem dwa skrypty, których zadaniem jest wpisywanie odpowiednich wartości w sysfs. Jeden kontroluje jasność monitora, drugi jasność podświetlenia klawiatury. Ich nazwy to odpowiednio: screen-backlight: https://raw.githubusercontent.com/jessfraz/dotfiles/master/bin/screen-backlight i keyboard-backlight: https://raw.githubusercontent.com/jessfraz/dotfiles/master/bin/keyboard-backlight Za pomocą visudo dodaję odpowiednie wpisy by uruchamiać je na prawach roota bez podawania hasła: paczor ALL= NOPASSWD: /usr/local/bin/keyboard-backlight paczor ALL= NOPASSWD: /usr/local/bin/screen-backlight Klawiatura + dźwięk W ~/.Xmodmap keycode 121 = XF86AudioMute keycode 122 = XF86AudioLowerVolume keycode 123 = XF86AudioRaiseVolume W ~/.i3/config: # dla PulseAudio: bindsym XF86AudioMute exec pactl set-sink-mute 1 toggle # dla Alsa bindsym XF86AudioMute exec amixer -c 0 -- set Master toggle bindsym XF86AudioLowerVolume exec amixer -c 0 -- set Master 2- bindsym XF86AudioRaiseVolume exec amixer -c 0 -- set Master 2+ Mam problem z mute, zrobiłem to raz i karta już milczy. Musiałem zrobić reset SMC (wyłączony komputer i trzymając Shift+Alt+Command naciskam Power) i PRAM (wyłączony komputer, włączam i jak usłyszę dźwięk staru trzymam Alt+Command+P+R aż usłyszę drugi dźwięk startu i wtedy puszczam). Nie wiem czy to potrzebne ale wolałem zaczynać z czystym kontem. Musiałem też ponownie użyć Refinda. Zainstalowałem pulseaudio: apt-get install pulseaudio i zainstalowałem: apt-get install alsa-firmware-loaders Reboot i pomogło!
Hibernacja:
Najlepiej zacząć od zmiany domyślnej konfiguracji. Uwaga, gdy używałem zamkniętych sterowników Nvidii hibernacja zakończyła się ostatecznie całkowitą rozwałką sytemu. Po przejściu na Intela na razie nie miałem tak tragicznych konsekwencji ale system po zamknięciu klapy laptopa nie przechodził z trybu Suspend w Hibernate. Podejrzewam, że miałem źle skonfigurowane dwa główne pliki. Ale do rzeczy…
Konfigurujemy dwa pliki:
sudo vim /etc/systemd/sleep.conf sudo vim /etc/systemd/logind.conf
W sleep.conf zezwalamy zarówno na Suspend, jak i na Hibernate oraz ustalamy po jakim czasie system będący w Suspend przejdzie w Hibernate jeśli nie nastąpi jakieś przerywające uśpienie zdarzenie (u mnie jest to 10 minut):
[Sleep] AllowSuspend=yes AllowHibernation=yes AllowSuspendThenHibernate=yes #AllowHybridSleep=yes #SuspendMode= #SuspendState=mem standby freeze #HibernateMode=platform shutdown #HibernateState=disk #HybridSleepMode=suspend platform shutdown #HybridSleepState=disk HibernateDelaySec=10m
Natomiast w pliku logind.conf ustawiamy wybrane tryby i zdarzenia, które wyzwalają te tryby. Zdarzeniami są najczęściej: wciśniecie klawisza/przycisku albo zamknięcie pokrywy laptopa.
[Login] #NAutoVTs=6 #ReserveVT=6 #KillUserProcesses=no #KillOnlyUsers= #KillExcludeUsers=root #InhibitDelayMaxSec=5 HandlePowerKey=suspend-then-hibernate HandleSuspendKey=suspend-then-hibernate HandleHibernateKey=suspend-then-hibernate HandleLidSwitch=suspend-then-hibernate HandleLidSwitchDocked=ignore #PowerKeyIgnoreInhibited=no #SuspendKeyIgnoreInhibited=no #HibernateKeyIgnoreInhibited=no #LidSwitchIgnoreInhibited=yes #HoldoffTimeoutSec=30s IdleAction=suspend-then-hibernate IdleActionSec=10min #RuntimeDirectorySize=10% #RemoveIPC=yes #InhibitorsMax=8192 #SessionsMax=8192 #UserTasksMax=33%
Przydatne informacje są w manualach:
man systemd-sleep.conf man logind.conf
Polecenie uaktualniające po zmianie konfiguracji, może nastąpić uśpienie albo hibernacja - zależnie od wprowadzonych zmian:
sudo systemctl restart systemd-logind.service
Wyświetlenie statusu obsługi:
sudo systemctl status systemd-logind.service
U mnie zwraca to:
â systemd-logind.service - Login Service Loaded: loaded (/lib/systemd/system/systemd-logind.service; static; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 00:27:31 CEST; 11h ago Docs: man:systemd-logind.service(8) man:logind.conf(5) https://www.freedesktop.org/wiki/Software/systemd/logind https://www.freedesktop.org/wiki/Software/systemd/multiseat Main PID: 963 (systemd-logind) Status: "Processing requests..." Tasks: 1 (limit: 4915) Memory: 3.2M CGroup: /system.slice/systemd-logind.service ââ963 /lib/systemd/systemd-logind Jun 12 00:27:31 eclipse systemd-logind[963]: Watching system buttons on /dev/input/event0 (Lid Switch) Jun 12 00:27:31 eclipse systemd-logind[963]: Watching system buttons on /dev/input/event2 (Sleep Button) Jun 12 00:27:31 eclipse systemd-logind[963]: Watching system buttons on /dev/input/event7 (Apple Inc. Apple Internal Keyboard / Trackpad) Jun 12 00:27:31 eclipse systemd[1]: Started Login Service.
Jak widać obserwowane są:
- Lid Switch - czyli klapa lapa
- Sleep Button - czyli główny wyłącznik
- Apple Internal Keyboard/Trackpad - klawiatura i trackpad, po to żeby wybudzić z uśpienia czyli przerwać odliczanie do hibernacji (to ustawione wcześniej 10 minut)
Polecenie wyłączające suspend i hibernację:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
To raczej ostateczność: https://itsfoss.com/ubuntu-close-lid-suspend/
PROBLEMY
Problemy z X?
Problemy z dźwiękiem przez DisplayPort?
https://unix.stackexchange.com/questions/88118/alsa-how-to-temporarily-change-the-output-device
Problem z xscreensaver
https://bbs.archlinux.org/viewtopic.php?pid=1218771#p1218771
Problemy z przerwaniami
Chłodzenie Macbooka często „wietrzyłoâ€? komputer i pożerało cenne Ampery. Musiałem, jako root, dodać do crontaba linię wyłączającą przerwanie 06:
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe06
Pomogło!
https://unix.stackexchange.com/questions/242013/disable-gpe-acpi-interrupts-on-boot
Różne porady
SOFTWARE
MUTT (wolę Alpine)
Do mutta dołożyłem książkę adresową zasysaną z Ownclouda wg. tego przepisu: https://got-tty.org/mutt-kontakte-aus-owncloud-nutzen (po niemiecku ale wszystko zrozumiałe).
Oglądanie urli za pomocą linksa albo lynxa:
apt-get install urlview
Do ~/.muttrc:
macro pager \cu |urlview\n
Skopiowałem /etc/urlview/system.urlview i /etc/urlview/url_handler.sh lokalnie bo chciałem zmienić kolejność szukanych browserów, a nie chcę ustawiać zmiennej BROWSER.
p.s. Na koniec i tak wróciłem do Alpine i chwalę sobie. Działa przepięknie, konfigurację opisałem w innym artykule:
FIREFOX + VIMPERATOR (Tridactyl lepszy)
Vimperator ma buga: w trybie pełnoekranowym F11 znika statusbar i przestają działać hinty. Rozwiązaniem jest zablokowanie automatycznego
chowania się statusbaru. W vimperatorze wydajemy komendę:
:set statuslinevisibility=visible
i zachowujemy do pliku konfiguracyjnego:
mkvimperatorrc
p.s. Przerzuciłem się na Tridactyla: https://github.com/tridactyl/tridactyl
VPN:
Używam skomplikowanego systemu skryptów, który jest łatwy w obsłudze. Opiszę to kiedyś, jeśli pokonam uczucie żenady w jaki sposób to działa albo przepiszę pod Pythonem.
https://site.elastichosts.com/blog/linux-l2tpipsec-vpn-client/
Xmonad:
Używam xmonada bo jest szalenie piękny! Konfiguracja trwała długo i jeszcze nie jest pełna. Opis zajmie osobny wpis. Tutaj wstęp i sugestia:
Rofi i skrypty
Posiadam sporą kolekcję skryptów w Bashu wykorzystujących Rofi switcher: https://github.com/davatorium/rofi
khal, vdirsyncer oraz keyring
Używam khal do obsługi kalendarzy w chmurze, vdirsyncer synchronizuje zarówno kalendarze jak i książkę adresową, a keyring sprawia, że nie muszę wpisywać hasła. Polecam.
MariaDB
Po „sudo rebootâ€? bardzo długo zamyka się system, wyświetlając komunikat: “A stop job is running to …â€?. Pomaga to:
sudo dpkg-reconfigure tzdata
Nextcloud client:
cat /etc/apt/sources.list.d/nextcloud-devs-ubuntu-client-groovy.list deb http://ppa.launchpad.net/nextcloud-devs/client/ubuntu groovy main #deb-src http://ppa.launchpad.net/nextcloud-devs/client/ubuntu groovy main sudo gpg --keyserver keyserver.ubuntu.com --recv 60EE47FBAD3DD469 sudo gpg --export --armor 60EE47FBAD3DD469 | sudo apt-key add -
VirtualBox:
cat /etc/apt/sources.list.d/virtualbox.list deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian buster contrib wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - sudo apt-get update sudo apt-get install virtualbox-6.1 wget https://download.virtualbox.org/virtualbox/6.1.6/Oracle_VM_VirtualBox_Extension_Pack-6.1.6.vbox-extpack sudo virtualbox Downloads/Oracle_VM_VirtualBox_Extension_Pack-6.1.6.vbox-extpack sudo usermod -a -G vboxusers $USER
Partycje APFS:
Dostęp do partycji Apple Filesystem:
https://linuxnewbieguide.org/how-to-mount-macos-apfs-disk-volumes-in-linux
APFS z dysku: https://github.com/sgan81/apfs-fuse
sudo apt install fuse libfuse3-dev bzip2 libbz2-dev cmake git libattr1-dev zlib1g-dev git clone https://github.com/sgan81/apfs-fuse.git cd apfs-fuse git submodule init git submodule update mkdir build cd build cmake .. # jeśli chcesz zmienić ustawienia to: # sudo apt install cmake-curses-gui # ccmake . make sudo make install sudo cp apfsutil /usr/local/bin # wylistowanie dostępnych partycji i nazw woluminów sudo apfsutil /dev/sdc2 Volume 4 FD331FC1-1327-45D7-7538-E6B19B5139F6 --------------------------------------------- Role: No specific role Name: MEDIA-torba (Case-insensitive) Capacity Consumed: 18652901376 Bytes FileVault: No Volume 5 AA7F7F57-D871-4570-A6C9-CAC113F57167 --------------------------------------------- Role: No specific role Name: VIRT-torba (Case-insensitive) Capacity Consumed: 174489903104 Bytes FileVault: No i montując należy podać nazwę voluminu, np. żeby zamontować volume 5: sudo apfs-fuse -o uid=1000,gid=1000,allow_other -v 5 /dev/sdc2 /mnt/torba # opcje po -o, pozwalają na dostęp userom A na stałe dodać do /etc/fstab: mount.apfs#/dev/sdc2 /mnt/apple_hd fuse user,allow_other 0 0
an2linux
Bzdurki
Fortunki: https://github.com/maxieds/math-fortune-mod
Cool Rerto Term: https://github.com/Swordfish90/cool-retro-term