Arch Linux no MacBook
Fiz essa instalação em 2014 e estou postando aqui a pedidos de um membro do grupo Arch Linux Brasil no Facebook. O processo é muito parecido com o detalhado no meu tutorial de 2012, mas o MacBook requer uma atenção especial. O artigo está um pouco incompleto, mas provavelmente não irei editá-lo tão cedo.
Eu não uso mais essa configuração em dualboot, pois não achei o resultado muito satisfatório; o Wi-Fi falhava às vezes, o touchpad não funciona tão bem quanto no OS X (cheguei até a editar o código fonte dos drivers em vão), a bateria durava menos e ele estava ocupando muito espaço do meu SSD de apenas 128GB.
Agora tenho um desktop com Arch, um HD externo com vários Live CDs e algumas máquinas virtuais no OS X. Até agora essa configuração tem dado conta de tudo o que eu preciso.
Por que um Macbook?
O meu Acer, que já estava velhinho e devagar, teve outro problema na tela, portanto resolvi que estava na hora de trocar de notebook.
Eu ainda morava na Alemanha e encontrei um MacBook Air 13" sendo leiloado no Ebay. Fiz uma oferta até que baixa, mas consegui ganhar. O teclado é alemão, mas foi tranquilo para acostumar.
Apesar de fazer algumas críticas aos produtos da Apple, eu tenho que reconhecer que a qualidade do hardware é excelente, assim como a possibilidade de revenda. Também há uma possibilidade de desenvolver para iOS.
Em termos de software, o OS X até que não são decepciona. Desde que comprei, já rodei o Mavericks, o Yosemite e o El Capitan sem problemas. Muitos dos FOSS também estão disponíveis, pois o Darwin é Unix-like (e POSIX!).
Backup e Atualização do OS X
Para reduzir o risco de problemas, faça backup dos seus arquivos, libere espaço no disco e atualize o OS X.
Particionamento do disco
Divida o Macintosh HD
em duas partições utilizando o Disk Utility
. Usei só 23GB para o Arch,
pois o SSD do meu MacBook possui apenas 128GB.
Archboot por USB
Baixe a última versão do Arch em https://www.archlinux.org/download/ e grave o .iso em um pendrive:
sudo dd if=archlinux-2014.10.01-dual.iso of=/dev/rdisk2 bs=1m
UEFI Boot Manager
Desde o kernel 3.3, é possível dar boot no Linux sem utilizar bootloaders como o GRUB devido ao EFISTUB.
Precisamos apenas de um boot manager para selecionar os diferentes sistemas operacionais.
Systemd-boot
Antes chamado gummiboot
, é o boot manager mais simples e com menos recursos. Não usarei ele.
rEFInd
O rEFInd é um fork do rEFIt. Ele basicamente exibe um menu durante o boot que te permite escolher o sistema operacional a ser inicializado.
No El Capitan, é necessário executar csrutil disable
em Recovery Mode antes.
Baixe a última versão disponível no site e instale com as seguintes opções:
sudo ./install.sh --alldrivers
Estou instalando na ESP, pois utilizo Whole-Disk Encryption no OS X.
diskutil list
mkdir /Volumes/ESP
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP
Renomeie a pasta e o arquivo .efi
caso tenha um delay de 30s durante o boot:
# mv /Volumes/ESP/EFI/refind /Volumes/ESP/EFI/BOOT
# mv /Volumes/ESP/EFI/BOOT/refind_x64.efi /Volumes/ESP/EFI/BOOT/bootx64.efi
Adicione a seguinte linha em refind.conf
:
dont_scan_volumes ""
(Essa linha está comentada como #dont_scan_volumes "Recovery HD"
).
Instalação
Conecte o pendrive a uma porta USB e reinicie o computador. Um dos ícones no rEFInd
deverá dar
boot pelo pendrive. Aqui é exibido Boot Legacy OS from FAT volume
.
O Wi-Fi não funcionará, portanto tenha um adaptador USB-Ethernet ou coloque o driver broadcom-wl-dkms no pendrive.
Siga a instalação normalmente, mas não instale nenhum bootloader. Minha instalação, com um disco criptografado é mais ou menos o seguinte:
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
Se quiser uma swap:
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
Vários programas usam diretórios e variáveis de ambiente padrões. Os seguintes comandos criam esses diretórios:
$ 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
O que eu faço é colocar essas variáveis em /etc/profile
e ~/.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
Sem nenhum gerenciador
Cabo
Para conectar apenas uma vez à rede por DHCP:
dhcpcd enp0s20u1
Wifi
Driver: https://aur.archlinux.org/packages/broadcom-wl/.
O driver broadcom-wl-dkms
também funciona bem.
sudo pacman -S wpa_supplicant
packer broadcom-wl
sudo wifi-menu wlp3s0
Networkd
Configuração estática. Não é recomendado para notebooks, mas sim para servidores e desktops que se conectam sempre às mesmas redes.
> 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
Existe também o Netctl.
Grupos de usuários e ativação do sudo
useradd -m -g users -G wheel -s /bin/zsh julio ### Talvez audio também
passwd julio
EDITOR=nvim visudo
Descomente a linha %wheel ALL=(ALL) ALL
Backlight:
echo "255" > /sys/class/leds/smc\:\:kbd_backlight/brightness
ou
cp /sys/class/leds/smc\:\:kbd_backlight/max_brightness /sys/class/leds/smc\:\:kbd_backlight/brightness
Audio
Adicione seu usuário ao grupo audio: $ sudo gpasswd -a julio audio
.
Inicie o Pulseaudio: $ pulseaudio --start
.
Controle as saídas pelo pavucontrol
.
Ative execução simultânea pelo paprefs
.
Video
Driver de vídeo: xf86-video-intel
.
Adicione seu usuário ao grupo video: $ sudo gpasswd -a julio video
.
X11
Teclado alemão e natural scrolling com o 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
Adicione keyboard
aos HOOKS após autodetect em /etc/mkinitcpio.conf
.
Touchpad
Adicione seu usuário ao grupo input: $ sudo gpasswd -a julio input
.
Eu testei várias drivers e configurações diferentes. Infelizmente nenhuma opção funciona tão bem quanto no OS X.
xf86-input-synaptics-mtpatch
Edite o arquivo /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
Configurações: /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
Gestos com o Touchégg
:
Instale o touchegg disponível no
AUR: $ packer touchegg
.
Copie o arquivo de configuração:
cp -r /usr/share/touchegg/ ~/.config
Edite-o manualmente:
vim ~/.config/touchegg/touchegg.conf
Ou com a GUI disponível no AUR.
xSwipe
A wiki também sugeriu o xSwipe, mas eu não consegui fazer ele funcionar. Ele pede para ativar o
SHMConfig
, mas acho que isso é deprecated.
Desativar o touchpad enquanto digita
Adicione syndaemon -t -k -i 2 &
ao ~/.xinitrc
.
Webcam
Descobrir versão do Mac:
$ sudo dmidecode -s system-product-name
MacBookAir6,2
Suspend, Resume e Hibernate
Hibernate:
Adicione resume
aos HOOKS em /etc/mkinitcpio.conf
:
HOOKS="base udev autodetect modconf block resume filesystems keyboard fsck"
Rode o mkinitcpio: # mkinitcpio -p linux
Calibrar cores do monitor
Salve os ICC Profiles do OS X em algum lugar que possa ser acessado pelo Linux:
cp -r /Library/ColorSync/Profiles /Volumes/Externo
Instale o xcalib diponível no AUR:
packer xcalib
Copie os ICC Profiles para /usr/share/color/icc
, /usr/local/share/color/icc
ou
/home/USER_NAME/.color/icc
:
sudo cp -r /mnt/externo/Profiles /usr/share/color/icc/Profiles_Mac
Teste a nova configuração com o seguinte comando:
xcalib -d :0 /usr/share/color/icc/Profiles_Mac/Displays/Color\ LCD-933C106C-08BC-09AA-F750-C2A74A119DEF.icc
Se ficou bom, adicione o comando ao .xinitrc
.
Segurança
Adicionar senha de firmware
Desativar login por ssh como root
Edite o arquivo sshd_config
: $ sudo vim /etc/ssh/sshd_config PermitRootLogin no
Se quiser o Grub
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