Arch Linux auf dem MacBook

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
- http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- https://wiki.archlinux.org/index.php/Xdg_user_directories
- https://wiki.archlinux.org/index.php/XDG_Base_Directory_support
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
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
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
Links
- http://blog.juliobs.com/instalacao-do-arch-linux/
- http://architectlinux.boardhost.com/index.php
- http://bmccarthy.net/2014/08/02/touchegg-on-archlinux/
- http://dabase.com/blog/Macbook_Air_Early_2014_Archlinux/
- http://loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/
- http://ryangehrig.com/index.php/arch-linux-on-macbook-air-2013/
- http://www.frankshin.com/installing-archlinux-on-macbook-air-2013/
- http://www.frankshin.com/macbook-air-62-2013-setting-it-up-with-archlinux/
- http://www.linuxveda.com/2015/04/20/arch-linux-tutorial-manual/
- http://www.rodsbooks.com/refind/
- https://bbs.archlinux.org/viewtopic.php?id=150276
- https://bbs.archlinux.org/viewtopic.php?id=165854
- https://bbs.archlinux.org/viewtopic.php?id=165899
- https://bbs.archlinux.org/viewtopic.php?id=171883
- https://code.google.com/p/touchegg/issues/detail?id=178
- https://code.google.com/p/touchegg/issues/detail?id=203
- https://github.com/BlueDragonX/xf86-input-mtrack
- https://help.ubuntu.com/community/MacBookAir6-2/Trusty
- https://news.ycombinator.com/item?id=8904213
- https://wiki.archlinux.org/index.php/Apple_Keyboard
- https://wiki.archlinux.org/index.php/Beginners'_guide
- https://wiki.archlinux.org/index.php/ICC_Profiles
- https://wiki.archlinux.org/index.php/Installation_guide
- https://wiki.archlinux.org/index.php/MacBook
- https://wiki.archlinux.org/index.php/MacBookPro11,x
- https://wiki.archlinux.org/index.php/Touchegg
- https://www.reddit.com/r/linux/comments/2srkva/arch_linux_on_macbook_pro_retina_2014_with/
- https://kroweer.wordpress.com/2011/09/07/creating-a-custom-arch-linux-live-usb/
- http://works13.com/blog/mac/the-best-way-of-running-arch-linux-on-a-mac.htm
- https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
- https://wiki.archlinux.org/index.php/Neovim
- https://support.apple.com/en-us/HT201255
- https://help.ubuntu.com/community/Byobu

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! 🙂