Debian na Macbooku Pro Late 2013 cz.4

Posted on Tue 08 December 2020 in Shitz • 8 min read

Niniejszy artykuł powstał ponad rok temu i przeleżał wszystkie te mesiące w postaci szkicu, uzupełnianego o nowe pozycje. Nowości pojawiały się w nim w miarę jak dostrajałem Macbooka do swoich skromnych potrzeb, a były to:

  • pozbycie się macOS, systemu który przestał być wygodny,
  • 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świelenia 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 hibenacja
  • drobne usprawnienia software'owe.

Instalację wykonałem podobnie jak w opisie z (https://blog.jessfraz.com/post/linux-on-mac/), tzn. że również mam refinda jako bootmanagera, trochę tylko podkoloryzowanego, żeby robić wrażenie.

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.

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

Sprawdź jak ustawiać kolory w konsoli: http://user.it.uu.se/~embe8573/cols/www/index.html:

Linux VTs

    big Linux VT tutorial: COLORS with zsh tools
    ~/cols/ run - script to invoke (see the # comments)
    ~/cols/ set_cols.sed - sed program to set the colors
    color sets
    ls(1) colors (VTs and X) with dircolors(1)

xterm

    ~/.Xresources - invoke in ~/.xinitrc with xrdb

Emacs

    emacs-test-faces.el - looks like this
    captain-mr-king.el - looks like this

Xorg

Nvidia

Xorg działało od razu na driverze nouveau czyli opensourcowym sterowniku dla Nvidii.
Zachciało mi się jednak oryginalnego sterownika. Mimo wielu prób nie kopilowały mi się moduły jądra. Podczas kompilacji wyskakiwał błąd, że brak jest pliku include/generated/autoconf.h, chociaż plik jak najbardziej był na właściwym miejscu.
Nie chciało mi się kopać z koniem, inni też się wymęczyli, więc użyłem repozytorium jessie-backports (wg.: https://wiki.debian.org/NvidiaGraphicsDrivers#jessie-352):

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
Trzeba usunąć /etc/X11/xorg.conf, bez niego server X używa domyślnych ustawień i działa prawidłowo.
Na konfigurację przyjdzie jeszcze czas...
Przerzuciłem się na zamknięty sterownik od NVidii (ten z .run na końcu). Jest OK ale nadal nie działa przechodzenie między X-ami, a konsolą. Podobno ten trick załatwia sprawę:
setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0

Aktualizacja: niestety, to nie działa.


WiFi

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

Teraz przełączenie klawiszy funkcyjnych w działanie takie jak w PC czyli tylko z wciśniętym Fn funkcyjny daje dodatkową funkcję.

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 spacjalne, takich jak: jasność ekranu, podświetlanie klawiatury, głośność, hibernacja/wyłączenie.


KLAWIATURA
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
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 i 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  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!

TOUCHPAD

W /etc/X11/xorg.conf.d dodałem dwa pliki, właściwie to pozostałość po porzednich próbach i spokojnie można oba skonsolidować.
W 50-synaptics-clickpad.conf:
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
Ostatnie 3 linijki mają ogromne znaczenie przy pisaniu na klawiaturze ponieważ "PalmDetect" włącza wykrywanie przypadkowych dotknięć touchpadu przy pisaniu na klawiaturze. Pozostałe dwa to szerokość dotknięcia i siła nacisku.
Ustawienia te można obserwować za pomocą narzędzia: evtest.
apt-get install evtest evetet /dev/input/event8

(/dev/input8 to u mnie Touchpad)


MUTT (wolę Alpine)

Instalacja mutta i konfigurowanie wielu kont. Tu podparłem się doskonałą stroną: https://www.df7cb.de/blog/2010/Using_multiple_IMAP_accounts_with_Mutt.html
Wszystko pięknie zadziałało.

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.


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


XSCREENSAVER

Chcę, żeby startował automatycznie po zalogowaniu się do sesji X-ów.
Tworzę katalog:
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

Przejście na Display Managera: sddm

dpkg-reconfigure sddm
w /etc/sddm.conf dodać wpis:
[Theme]
Current=debian-paczor
FacesDir=/home/paczor/Pictures/faces
Tematy są w: /usr/share/sddm/themes/
Skopiowałem debian-breeze jako debian-paczor i zmieniam konfigurację jak chcę.

Pomocne linki:

Hibernacja:

Najlepiej zacząć od zminy 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. Podejrzewa, że miałem źle skonfigurwane 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/


rofi i skrypty

w ~/bin/ (przy okazji plugin do VIM-a do robienia tabelek)
rofi do VPN (skrypt wyświetlający połączone VPN-y),
rofi do Mikrotika
rofi do wyświetlania Helpa
rofi do qalc (opis qalc)

Opis khal, vdirsyncera oraz keyring.

alias khali='khalinteractive'
keyring set CalDAV paczor
podaję hasło
a pobranie: keyring get CalDAV paczor
w .vdirsyncer/config załatwia to potem linia:
password.fetch = ["command", "keyring", "get", "CalDAV", "paczor"]
i już nie pyta o hasło

MariaDB

po "sudo reboot" bardzo długo się zamyka, 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:

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-8538-F6B19B5139E6
---------------------------------------------
Role:               No specific role
Name:               MEDIA-torba (Case-insensitive)
Capacity Consumed:  18652901376 Bytes
FileVault:          No

Volume 5 AA7F7F57-D871-4870-A6C9-CAC003F57157
---------------------------------------------
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

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 go 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.

Po trzecie, Nvidia na komercyjnych sterownikach żre mnóstwo prądu, skracając czas działania na baterii

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.

TLPd (energia)

https://linrunner.de/tlp/

an2linux