Arch Linux auf dem MacBook

Mai 1, 2016·
Julio Batista Silva
Julio Batista Silva
· 9 Min Lesezeit
Hinweis
Achtung: Ich schreibe alle Tutorials für mich selbst, nach meinen eigenen Vorlieben und Anforderungen. Folge diesem „Tutorial“ nicht blind und führe keine Befehle aus, ohne genau zu wissen, was sie tun.

Ich habe diese Installation 2014 durchgeführt und poste sie hier auf Wunsch eines Mitglieds der Arch‑Linux‑Brasil‑Gruppe auf Facebook. Der Ablauf ist dem in meinem Tutorial von 2012 sehr ähnlich, aber das MacBook erfordert besondere Aufmerksamkeit. Der Artikel ist etwas unvollständig; ich werde ihn wahrscheinlich nicht bald überarbeiten.

Ich nutze diese Konfiguration nicht mehr im Dual‑Boot, da mich das Ergebnis nicht überzeugt hat: WLAN fiel gelegentlich aus, das Touchpad funktioniert nicht so gut wie unter OS X (ich habe sogar Treiberquellcode bearbeitet – ohne Erfolg), die Akkulaufzeit war geringer und es belegte zu viel Platz auf meiner nur 128‑GB‑SSD.

Heute habe ich einen Desktop mit Arch, eine externe Festplatte mit mehreren Live‑CDs und ein paar virtuelle Maschinen unter OS X. Diese Kombination deckt bislang alles ab, was ich brauche.

Warum ein MacBook?

Mein Acer war bereits alt und langsam und hatte erneut ein Problem mit dem Display, also war es Zeit für ein neues Notebook.

Ich lebte noch in Deutschland und fand ein MacBook Air 13" bei eBay. Ich gab ein eher niedriges Gebot ab – und gewann. Die Tastatur ist deutsch, aber das Umgewöhnen war kein Problem.

Trotz mancher Kritik an Apple‑Produkten muss ich anerkennen, dass die Hardwarequalität ausgezeichnet ist – ebenso der Wiederverkaufswert. Außerdem kann man damit für iOS entwickeln.

Was Software angeht, enttäuscht OS X keineswegs. Seit dem Kauf liefen Mavericks, Yosemite und El Capitan bei mir problemlos. Viele FOSS sind verfügbar, denn Darwin ist Unix‑ähnlich (und POSIX!).

Backup und Update von OS X

Um Risiken zu minimieren: Lege ein Backup an, gib Speicherplatz frei und aktualisiere OS X.

Festplattenpartitionierung

Teile Macintosh HD mit dem Disk Utility in zwei Partitionen. Ich habe für Arch nur 23 GB verwendet, da die SSD meines MacBooks nur 128 GB hat.

Arch‑Installer per USB

Lade die aktuelle Arch‑ISO unter https://www.archlinux.org/download/ herunter und schreibe sie auf einen USB‑Stick:

sudo dd if=archlinux-2014.10.01-dual.iso of=/dev/rdisk2 bs=1m

UEFI‑Boot‑Manager

Seit Kernel 3.3 kann Linux dank EFISTUB ohne Bootloader wie GRUB starten.

Wir brauchen lediglich einen Boot‑Manager, um zwischen den Betriebssystemen zu wählen.

Systemd-boot

Früher „gummiboot“ – der einfachste Boot‑Manager mit wenig Extras. Ich verwende ihn hier nicht.

rEFInd

rEFInd ist ein Fork von rEFIt. Er zeigt während des Bootens ein Menü an, mit dem du das zu startende Betriebssystem auswählst.

Unter El Capitan musst du zuvor im Recovery‑Modus csrutil disable ausführen.

Lade die neueste Version von der Website und installiere sie mit folgenden Optionen:

sudo ./install.sh --alldrivers

Ich installiere auf der ESP, da ich unter OS X Whole‑Disk‑Encryption verwende.

diskutil list
mkdir /Volumes/ESP
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP

Benenne Ordner und .efi‑Datei um, falls ein 30‑Sekunden‑Delay beim Boot auftritt:

# mv /Volumes/ESP/EFI/refind /Volumes/ESP/EFI/BOOT
# mv /Volumes/ESP/EFI/BOOT/refind_x64.efi /Volumes/ESP/EFI/BOOT/bootx64.efi

Füge folgende Zeile in refind.conf ein:

dont_scan_volumes ""

(Diese Zeile ist dort als #dont_scan_volumes "Recovery HD" auskommentiert.)

Installation

USB‑Stick einstecken und neu starten. Im rEFInd sollte ein Icon erscheinen, das vom USB bootet. Bei mir hieß es „Boot Legacy OS from FAT volume“.

WLAN funktioniert nicht; nutze daher einen USB‑Ethernet‑Adapter oder lege den Treiber broadcom-wl-dkms auf den Stick.

Folge der Standard‑Installation, aber installiere keinen Bootloader. Meine Installation mit verschlüsseltem Datenträger sah ungefähr so aus:

loadkeys i386/qwertz/de-latin1.map.gz             # ou br-abnt2
timedatectl set-ntp true
fdisk -l /dev/sda                                 # ou lsblk
cryptsetup benchmark
cryptsetup -v --cipher aes-xts-plain64 --key-size 256 --hash sha1 --iter-time 1000 --use-urandom --verifiy-passphrase luksFormat /dev/sda4
cryptsetup luksDump /dev/sda4
cryptsetup luksOpen /dev/sda4 arch-luks
mkfs.ext4 -L arch /dev/mapper/arch-luks

Wenn du Swap möchtest:

mkswap -L swap /dev/sdXY && swapon /dev/sdXY
mount /dev/mapper/arch-luks /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
pacstrap /mnt base{,-devel}
genfstab -U -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt
echo "air" > /etc/hostname
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
sed -i -e 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/#pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo -e "KEYMAP=de-latin1\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
sed -i -e '/^#\[multilib\]$/,+1s/#//' /etc/pacman.conf
sed -i -e '/# Misc options/a ILoveCandy' /etc/pacman.conf
sed -i -e 's/^# Color/Color/' /etc/pacman.conf
pacman -Sy reflector
reflector --verbose -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist
$ vi /etc/mkinitcpio.conf
  HOOKS="base udev autodetect modconf block encrypt filesystems keyboard keymap consolefont fsck"
mkinitcpio -p linux
passwd
pacman -S \
  sudo zsh alsa-utils alsa-oss xbindkeys feh imagemagick wget \
  firefox htop python python2 python-pip python2-pip git ack openssh \
  apache postgresql rsync rxvt-unicode unrar zip p7zip gparted ntfsprogs \
  neovim python{,2}-neovim renameutils \
  mpd ncmpcpp xf86-video-vesa
# pacman -S pkgfile
# pkgfile --update
$ echo "source /usr/share/doc/pkgfile/command-not-found.zsh" >> ~/.zshrc
# amixer sset Master unmute
# amixer sset Master 50%
# speaker-test -c 2

XDG‑Benutzerverzeichnisse

Viele Programme verwenden Standard‑Verzeichnisse und Umgebungsvariablen. Mit diesen Befehlen werden sie angelegt:

$ sudo pacman -S xdg-user-dirs
$ nvim ~/.config/user-dirs.dirs
  XDG_CACHE_HOME="${HOME}/.cache
  XDG_CONFIG_HOME="${HOME}/.config
  XDG_DATA_HOME="${HOME}/.config
$ sudo -e /etc/xdg/user-dirs.conf
  Enabled = False
xdg-user-dirs-update

Ich setze diese Variablen in /etc/profile und ~/.profile.

Packer

sudo pacman -S jshon expac
wget https://aur.archlinux.org/cgit/aur.git/snapshot/packer.tar.gz
tar xvzf packer.tar.gz && cd packer && makepkg
sudo pacman -U packer-20150808-1-any.pkg.tar.xz
rm -rf ~/packer

Byobu

packer byobu
byobu-enable
echo 'set -g default-terminal "screen-256color"' >> ~/.byobu/profile.tmux

SSH

$ sudo -e /etc/ssh/sshd_config
  Edite o arquivo para melhorar a segurança
sudo systemctl enable sshd.socket --now
ssh-keygen -t rsa -b 4096 -f ~/.ssh/servidorx -C "pubkey para servidor X"
ssh-copy-id -i ~/.ssh/servidorx.pub '-p 2345 usuario@servidorx'
chmod 700 ~/.ssh && chmod 600 ~/.ssh/servidorx && chmod 400 ~/.ssh/authorized_keys
$ nvim ~/.ssh/config
  Host servidorx
    HostName        ssh.servidorx
    IdentityFile    ~/.ssh/servidorx
    User            usuario
    Port            2345

rEFInd.conf

$ vim /boot/EFI/refind/refind.conf
menuentry Arch {
  icon EFI/refind/icons/os_arch.png
  loader vmlinuz-linux
  initrd initramfs-linux.img
  options "cryptdevice=/dev/sda4 rw root=/dev/mapper/arch-luks"
}

Internet

Ohne Netzwerkmanager

Kabel

Für eine einmalige Verbindung per DHCP:

dhcpcd enp0s20u1

WLAN

Treiber: https://aur.archlinux.org/packages/broadcom-wl/.

Der Treiber broadcom-wl-dkms funktioniert ebenfalls gut.

sudo pacman -S wpa_supplicant
packer broadcom-wl
sudo wifi-menu wlp3s0

Networkd

Statische Konfiguration. Nicht für Notebooks empfohlen, sondern für Server und Desktops, die sich immer mit denselben Netzen verbinden.

> nvim /etc/systemd/network/enp2s2.network
[Match]
Name=enp2s2
[Network]
DHCP=yes
systemctl enable systemd-resolved --now
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl enable systemd-networkd --now

Es gibt auch Netctl.

Benutzergruppen und sudo aktivieren

useradd -m -g users -G wheel -s /bin/zsh julio ### Talvez audio também
passwd julio
EDITOR=nvim visudo

Die Zeile %wheel ALL=(ALL) ALL auskommentieren.

Hintergrundbeleuchtung

echo "255" > /sys/class/leds/smc\:\:kbd_backlight/brightness

oder

cp /sys/class/leds/smc\:\:kbd_backlight/max_brightness /sys/class/leds/smc\:\:kbd_backlight/brightness

Audio

Füge deinen Benutzer zur Gruppe audio hinzu: $ sudo gpasswd -a julio audio.

Starte Pulseaudio: $ pulseaudio --start.

Ausgänge mit pavucontrol steuern.

Gleichzeitige Ausgabe mit paprefs aktivieren.

Video

Grafiktreiber: xf86-video-intel.

Füge deinen Benutzer zur Gruppe video hinzu: $ sudo gpasswd -a julio video.

X11

Deutsches Tastaturlayout und „Natural Scrolling“ auf dem Touchpad

setxkbmap -layout de -model macbook79 -option caps:swapescape
$ cat ~/.Xmodmap
keycode  54 = c C c C ccedilla Ccedilla
keycode  57 = n N n N dead_tilde N dead_tilde

!Natural Scrolling
pointer = 1 2 3 5 4 7 6 8 9 10 11 12 13 14 15

Füge keyboard zu den HOOKS nach autodetect in /etc/mkinitcpio.conf hinzu.

Touchpad

Füge deinen Benutzer zur Gruppe input hinzu: $ sudo gpasswd -a julio input.

Ich habe mehrere Treiber und Konfigurationen getestet. Leider funktioniert keine Option so gut wie unter OS X.

xf86-input-synaptics-mtpatch

Bearbeite die Datei /etc/X11/xorg.conf.d/10-synaptics.conf:

Section "InputClass"
  Identifier "touchpad_catchall"
  Driver "synaptics"
  MatchIsTouchpad "on"
  MatchDevicePath "/dev/input/event*"
  Option "LeftEdge" "-3611"
  Option "RightEdge" "4246"
  Option "TopEdge" "517"
  Option "BottomEdge" "6108"
  Option "FingerLow" "25"
  Option "FingerHigh" "75"
  Option "FingerPress" "257"
  Option "MaxTapTime" "180"
  Option "MaxTapMove" "511"
  Option "MaxDoubleTapTime" "180"
  Option "SingleTapTimeout" "180"
  Option "ClickTime" "100"
  Option "FastTaps" "0"
  Option "EmulateMidButtonTime" "0"
  Option "EmulateTwoFingerMinZ" "283"
  Option "EmulateTwoFingerMinW" "7"
  Option "VertScrollDelta" "-220"
  Option "HorizScrollDelta" "-220"
  Option "VertEdgeScroll" "0"
  Option "HorizEdgeScroll" "0"
  Option "CornerCoasting" "0"
  Option "VertTwoFingerScroll" "1"
  Option "HorizTwoFingerScroll" "1"
  Option "MinSpeed" "1.03333"
  Option "MaxSpeed" "1.4"
  Option "AccelFactor" "0.017"
  Option "TrackstickSpeed" "40"
  Option "EdgeMotionMinZ" "30"
  Option "EdgeMotionMaxZ" "160"
  Option "EdgeMotionMinSpeed" "1"
  Option "EdgeMotionMaxSpeed" "929"
  Option "EdgeMotionUseAlways" "0"
  Option "TouchpadOff" "0"
  Option "LockedDrags" "0"
  Option "LockedDragTimeout" "5000"
  Option "RTCornerButton" "0"
  Option "RBCornerButton" "0"
  Option "LTCornerButton" "0"
  Option "LBCornerButton" "0"
  Option "TapButton1" "1"
  Option "TapButton2" "3"
  Option "TapButton3" "2"
  Option "ClickFinger1" "1"
  Option "ClickFinger2" "3"
  Option "ClickFinger3" "0"
  Option "CircularScrolling" "0"
  Option "CircScrollDelta" "0.1"
  Option "CircScrollTrigger" "0"
  Option "CircularPad" "0"
  Option "PalmDetect" "1"
  Option "PalmMinWidth" "9"
  Option "PalmMinZ" "180"
  Option "CoastingSpeed" "20"
  Option "CoastingFriction" "50"
  Option "PressureMotionMinZ" "30"
  Option "PressureMotionMaxZ" "160"
  Option "PressureMotionMinFactor" "1"
  Option "PressureMotionMaxFactor" "1"
  Option "GrabEventDevice" "1"
  Option "TapAndDragGesture" "1"
  Option "AreaLeftEdge" "0"
  Option "AreaRightEdge" "0"
  Option "AreaTopEdge" "0"
  Option "AreaBottomEdge" "0"
  Option "HorizHysteresis" "5"
  Option "VertHysteresis" "3"
  Option "ClickPad" "1"
  Option "RightButtonAreaLeft" "0"
  Option "RightButtonAreaRight" "0"
  Option "RightButtonAreaTop" "0"
  Option "RightButtonAreaBottom" "0"
  Option "MiddleButtonAreaLeft" "0"
  Option "MiddleButtonAreaRight" "0"
  Option "MiddleButtonAreaTop" "0"
  Option "MiddleButtonAreaBottom" "0"
  Option "SHMConfig" "on"
EndSection

xf86-input-mtrack-git

Konfiguration: /etc/X11/xorg.conf.d/10-mtrack.conf

Section "InputClass"
  MatchIsTouchpad "on"
  Identifier      "Touchpads"
  Driver          "mtrack"
  Option          "TrackpadDisable" "0"
  Option          "Sensitivity" "0.5"
  Option          "FingerHigh" "5"
  Option          "FingerLow" "1"
  Option          "IgnoreThumb" "true"
  Option          "IgnorePalm" "true"
  Option          "DisableOnThumb" "false"
  Option          "DisableOnPalm" "false"
  Option          "BottomEdge" "25"
  Option          "ButtonIntegrated" "true"
  Option          "ButtonMoveEmulate" "false"
  Option          "ClickFinger1" "1"
  Option          "ClickFinger2" "2"
  Option          "ClickFinger3" "3"
  Option          "TapButton1" "1"
  Option          "TapButton2" "3"
  Option          "TapButton3" "2"
  Option          "TapButton4" "0"
  Option          "ClickTime" "25"
  Option          "ScrollDistance" "75"
  Option          "SwipeUpButton" "8"
  Option          "SwipeDownButton" "9"
  Option          "SwipeLeftButton" "8"
  Option          "SwipeRightButton" "9"
EndSection

Gesten mit Touchégg

Installiere touchegg, verfügbar im AUR: $ packer touchegg.

Kopiere die Konfigurationsdatei:

cp -r /usr/share/touchegg/ ~/.config

Bearbeite sie manuell:

vim ~/.config/touchegg/touchegg.conf

Oder mit der GUI, verfügbar im AUR.

xSwipe

Die Wiki empfahl auch xSwipe, aber ich bekam es nicht zum Laufen. Es verlangt, SHMConfig zu aktivieren, was meines Wissens veraltet ist.

Touchpad beim Tippen deaktivieren

Füge syndaemon -t -k -i 2 & zu ~/.xinitrc hinzu.

Webcam

iSight.

Mac‑Version herausfinden:

$ sudo dmidecode -s system-product-name
MacBookAir6,2

Suspend, Resume und Hibernate

Hibernate

Füge resume zu den HOOKS in /etc/mkinitcpio.conf hinzu:

HOOKS="base udev autodetect modconf block resume filesystems keyboard fsck"

mkinitcpio ausführen: # mkinitcpio -p linux

Monitorfarben kalibrieren

Sichere die ICC‑Profile aus OS X an einem Ort, auf den Linux zugreifen kann:

cp -r /Library/ColorSync/Profiles /Volumes/Externo

Installiere xcalib aus dem AUR:

packer xcalib

Kopiere die ICC‑Profile nach /usr/share/color/icc, /usr/local/share/color/icc oder /home/USER_NAME/.color/icc:

sudo cp -r /mnt/externo/Profiles /usr/share/color/icc/Profiles_Mac

Teste die neue Konfiguration mit folgendem Befehl:

xcalib -d :0 /usr/share/color/icc/Profiles_Mac/Displays/Color\ LCD-933C106C-08BC-09AA-F750-C2A74A119DEF.icc

Wenn das Ergebnis gefällt, füge den Befehl in .xinitrc ein.

Sicherheit

Firmware‑Passwort setzen

SSH‑Login als root deaktivieren

Bearbeite sshd_config: $ sudo vim /etc/ssh/sshd_config PermitRootLogin no

Falls du GRUB möchtest

pacman -S grub os-prober
grub-install --recheck --debug /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Crypttab

$ /etc/crypttab
backup UUID=d85e844d-2233-45b1-baff-a4fa32a50d6c none luks,noauto,quiet

mpdscribble

packer mpdscribble
mkdir ~/mpdscribble
cp /usr/share/mpdscribble/mpdscribble.conf.example .mpdscribble/mpdscribble.conf
nvim .mpdscribble/mpdscribble.conf

Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus