Arch Linux auf dem MacBook
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
- 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 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
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
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