Arch Linux auf dem MacBook

Mai 1, 2016·
Julio Batista Silva
Julio Batista Silva
· 9 Min Lesezeit
blog
Achtung: ich schreibe alle Anleitungen für mich selbst, nach meinen Vorlieben und

Bedürfnissen. Folge dieser “Anleitung” nicht blind und führe keinen Befehl aus, ohne genau zu wissen, was er tut.

Diese Installation habe ich 2014 gemacht und poste sie hier auf Bitten eines Mitglieds der Facebook-Gruppe Arch Linux Brasil. Der Ablauf ähnelt stark dem in meiner Anleitung von 2012, aber beim MacBook ist besondere Sorgfalt gefragt. Der Artikel ist etwas unvollständig, und ich werde ihn wohl so bald nicht überarbeiten.

Diese Dualboot-Konfiguration benutze ich nicht mehr, weil mich das Ergebnis nicht überzeugt hat: das WLAN setzte manchmal aus, das Touchpad läuft nicht annähernd so gut wie unter OS X (ich habe sogar vergeblich am Quellcode der Treiber herumgebastelt), der Akku hielt kürzer, und es belegte zu viel Platz auf meiner nur 128 GB großen SSD.

Inzwischen habe ich einen Desktop mit Arch, eine externe Platte mit mehreren Live-CDs und ein paar virtuelle Maschinen unter OS X. Bisher reicht mir das für alles, was ich brauche.

Warum ein MacBook?

Mein Acer war schon betagt und langsam, und dann hatte er wieder ein Problem mit dem Display — Zeit für ein neues Notebook.

Ich wohnte damals noch in Deutschland und fand ein MacBook Air 13" in einer Ebay-Auktion. Mein Gebot war recht niedrig, trotzdem habe ich den Zuschlag bekommen. Die Tastatur ist deutsch, daran habe ich mich problemlos gewöhnt.

Auch wenn ich einiges an Apples Produkten zu kritisieren habe, muss ich anerkennen: die Hardwarequalität ist ausgezeichnet, ebenso der Wiederverkaufswert. Und man kann für iOS entwickeln.

Softwareseitig enttäuscht OS X gar nicht. Seit dem Kauf habe ich Mavericks, Yosemite und El Capitan problemlos benutzt. Viel freie Software gibt es ebenfalls, da Darwin unixartig (und POSIX!) ist.

Backup und Update von OS X

Um das Risiko zu senken, sichere deine Dateien, schaffe Platz auf der Platte und aktualisiere OS X.

Die Platte partitionieren

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

Archboot per USB

Lade die neueste Arch-Version von https://www.archlinux.org/download/ und schreibe das .iso 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 lässt sich Linux dank EFISTUB ohne Bootloader wie GRUB starten.

Wir brauchen nur einen Boot-Manager, um zwischen den Betriebssystemen zu wählen.

Systemd-boot

Früher gummiboot genannt; der schlichteste Boot-Manager mit den wenigsten Funktionen. Ich nehme ihn nicht.

rEFInd

rEFInd ist ein Fork von rEFIt. Es zeigt beim Booten im Wesentlichen ein Menü an, in dem du das zu startende Betriebssystem auswählst.

Unter El Capitan musst du vorher im Recovery Mode csrutil disable ausführen.

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

sudo ./install.sh --alldrivers

Ich installiere in die ESP, da ich unter OS X Whole-Disk Encryption benutze.

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

Benenne den Ordner und die .efi-Datei um, falls es beim Booten 30 s Verzögerung gibt:

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

Ergänze refind.conf um die folgende Zeile:

dont_scan_volumes ""

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

Installation

Steck den USB-Stick an und starte den Rechner neu. Eines der Symbole in rEFInd sollte vom Stick booten. Bei mir steht dort Boot Legacy OS from FAT volume.

Das WLAN wird nicht funktionieren; halte also einen USB-Ethernet-Adapter bereit oder leg den Treiber broadcom-wl-dkms mit auf den Stick.

Führe die Installation wie gewohnt durch, aber installiere keinen Bootloader. Meine Installation mit verschlüsselter Platte sieht 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 einen Swap willst:

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 user directories

Viele Programme benutzen vorgegebene Verzeichnisse und Umgebungsvariablen. Die folgenden Befehle legen diese Verzeichnisse an:

$ 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 trage diese Variablen in /etc/profile und ~/.profile ein.

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

Ganz ohne Verwaltungsprogramm

Kabel

Um sich einmalig per DHCP mit dem Netz zu verbinden:

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. Für Notebooks nicht zu empfehlen, wohl aber 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 ### Vielleicht auch audio
passwd julio
EDITOR=nvim visudo

Kommentiere die Zeile %wheel ALL=(ALL) ALL ein

Backlight:

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

Nimm deinen Benutzer in die Gruppe audio auf: $ sudo gpasswd -a julio audio.

Starte Pulseaudio: $ pulseaudio --start.

Steuere die Ausgänge über pavucontrol.

Aktiviere die gleichzeitige Wiedergabe über paprefs.

Video

Grafiktreiber: xf86-video-intel.

Nimm deinen Benutzer in die Gruppe video auf: $ sudo gpasswd -a julio video.

X11

Deutsche Tastatur 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

Ergänze in /etc/mkinitcpio.conf die HOOKS nach autodetect um keyboard.

Touchpad

Nimm deinen Benutzer in die Gruppe input auf: $ sudo gpasswd -a julio input.

Ich habe mehrere Treiber und Einstellungen ausprobiert. Leider funktioniert keine Variante 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

Einstellungen: /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 aus dem AUR: $ packer touchegg.

Kopiere die Konfigurationsdatei:

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

Bearbeite sie von Hand:

vim ~/.config/touchegg/touchegg.conf

Oder mit der GUI aus dem AUR.

xSwipe

Das Wiki schlug auch xSwipe vor, aber ich habe es nicht zum Laufen gebracht. Es verlangt, SHMConfig zu aktivieren, was meines Wissens veraltet ist.

Das Touchpad beim Tippen abschalten

Ergänze ~/.xinitrc um syndaemon -t -k -i 2 &.

Webcam

iSight.

Die Mac-Version herausfinden:

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

Suspend, Resume e Hibernate

Hibernate:

Ergänze die HOOKS in /etc/mkinitcpio.conf um resume:

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

Führe mkinitcpio aus: # mkinitcpio -p linux

Die Bildschirmfarben kalibrieren

Speichere 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 Einstellung mit dem folgenden Befehl:

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

Wenn es gut aussieht, trag den Befehl in .xinitrc ein.

Sicherheit

Ein Firmware-Passwort setzen

Den ssh-Login als root abschalten

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

Falls du Grub willst

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 Developer

Ich bin ein brasilianischer Computeringenieur mit Wohnsitz in Deutschland und begeistere mich für Technik, Wissenschaft, Fotografie und Sprachen.

Ich programmiere seit etwa zwei Jahrzehnten und habe dabei alles von mobilen Apps und Webentwicklung bis hin zu Machine Learning erkundet. Derzeit fokussiere ich mich auf Cloud‑SRE und Data Engineering.

Ich engagiere mich ehrenamtlich in den Open‑Source- und Python‑Communities, helfe bei der Organisation der PyCon DE und PyData Berlin, betreue als Mentor und trage mit Code und Übersetzungen bei.

In meinem Blog teile ich Linux‑Tipps, Einrichtungsanleitungen und persönliche Notizen, die ich als spätere Referenz geschrieben habe. Ich hoffe, dass sie auch anderen nützlich sind. Die Inhalte sind in mehreren Sprachen verfügbar.

Schau dir meine Galerie an, um einige meiner Fotografien zu sehen.

Abseits der Tastatur findest du mich auf Konzerten, beim Klarinettenspiel, Radfahren, Tauchen oder beim Erkunden neuer Orte, Kulturen und Küchen.

Ich freue mich immer über den Austausch! 🙂

comments powered by Disqus