Cet article explique pourquoi et comment j’ai supprimé le système macOs de mon MacBook Pro pour installer GNU linux à la place. Cela fait suite à ce tweet datant d’il y a déjà plus d’un an ! Il est donc temps de rédiger ce qui me reste encore en tête et d’y inclure les liens qui m’ont été utiles. En espérant que cela puisse servir à d’autres…
Contexte
J’ai dû jouer avec des distributions GNU linux à partir des années 2000-2003, en testant divers live cd. Pour autant, étant musicien et très attiré par certains logiciels dont je ne pouvais retrouver d’alternative libre (Antescofo par exemple), je choisis de tester l’univers « Mac » en achetant un MacBook Pro. Ne crachons pas dans la soupe, le matériel est d’excellente qualité (le chassis tout alu ne chauffe quasiment pas par exemple) et macOs, une fois la logique acquise, apporte – je le concède – confort et simplicité. Et 5 années passent… Mais ce qui ne passe pas, c’est l’envie de « bidouiller » comme auparavant avec les distributions GNU linux que je passais au crible : interconnecter les programmes audio via Jack, configurer son environnement de travail exactement comme on le souhaite ; et utiliser des logiciels libres qui fonctionnent moins… « naturellement » sous macOs (Inkscape pour n’en citer qu’un). Mais surtout, mes aspirations relatives aux libertés numériques n’ont fait que se renforcer, jusqu’à ne plus pouvoir supporter un système propriétaire qui me prive de certaines possibilités d’action et qui m’impose une logique commerciale et d’obsolescence programmée ! De là à tenter un GNU linux sur le MacBook, il n’y avait plus qu’un pas. Allons-y !
Pour info, installez le système macOs sur un matériel autre qu’Apple et vous obtenez un hackintosh. Comme souvent, je fais donc l’inverse : je garde le matériel Apple et j’y installe un système libre. Je l’ai donc baptisé en toute logique librintosh 🙂
Choix de la distribution
Mon choix s’est porté sur deux distributions : Debian puis Ubuntu. Debian car c’est LA distribution éprouvée, non commerciale, et que je connais un peu. Je me dis que si Debian fonctionne sur le MacBook, alors ce sera gagné. Chose faite avec Debian 9 Stretch. J’ai ensuite installé Ubuntu (une dérivée de Debian) 19.04 puis 19.10 Eoan, pour sa version Studio qui correspond de très près à ce dont j’ai besoin comme configuration, notamment avec son noyau basse latence. Ubuntu comporte également une grande communauté, donc de nombreuses ressources disponibles et quelques pilotes propriétaires au cas où… La suite de l’article est basée sur Ubuntu Studio, mais le déroulement et les diverses issues sont, de mémoire, peu ou prou les mêmes que pour la première installation de test de Debian.
Quel MacBook ?
C’est un MacBook Pro de mi-2014, 13 pouces, processeur 3.0GHz Dual-core Intel Core i7, Ram 16GB 1600MHz DDR3L SDRAM, SSD 500Go, Écran Rétina, carte graphique Intel Iris, macOS 10.14 Mojave. Cette configuration d’origine est devenue après installation :
Résumé | |
Ordinateur | |
Processeur | Intel(R) Core(TM) i7-4578U CPU @ 3.00GHz |
Mémoire | 16304MB (2353MB utilisé) |
Machine Type | Notebook |
Systeme d’exploitation | Ubuntu 19.10 |
Utilisateur | skuntzmann (skuntzmann) |
Date/Heure | lun. 11 mai 2020 23:01:07 CEST |
Affichage | |
Résolution | 1440×900 pixels |
OpenGL Renderer | Mesa DRI Intel(R) Haswell |
X11 Vendor | The X.Org Foundation |
Audio Devices | |
Adapteur Audio | HDA-Intel – HDA Intel HDMI |
Adapteur Audio | HDA-Intel – HDA Intel PCH |
Systeme d’exploitation | |
Kernel | Linux 5.3.0-51-lowlatency (x86_64) |
Version | #44-Ubuntu SMP PREEMPT Wed Apr 22 21:54:38 UTC 2020 |
C Library | GNU C Library / (Ubuntu GLIBC 2.30-0ubuntu2.1) 2.30 |
Distribution | Ubuntu 19.10 |
Ordinateur | librintosh |
Utilisateur | skuntzmann (skuntzmann) |
Language | fr_FR.UTF-8 (fr_FR) |
Dossier Home | /home/skuntzmann |
durée de fonctionnent | 21 minutes |
Load Average | 0,53, 0,61, 0,50 |
Available entropy in /dev/random | 3889 bits (healthy) |
Modules du kernel | |
Loaded Modules | |
rfcomm | Bluetooth RFCOMM ver 1.11 |
cmac | CMAC keyed hash algorithm |
bnep | Bluetooth BNEP ver 1.3 |
joydev | Joystick device interfaces |
btusb | Generic Bluetooth USB driver ver 0.8 |
btrtl | Bluetooth support for Realtek devices ver 0.1 |
btbcm | Bluetooth support for Broadcom devices ver 0.1 |
btintel | Bluetooth support for Intel devices ver 0.1 |
bluetooth | Bluetooth Core ver 2.22 |
input_leds | Input -> LEDs Bridge |
ecdh_generic | ECDH generic algorithm |
bcm5974 | Apple USB BCM5974 multitouch driver |
intel_rapl_msr | Driver for Intel RAPL (Running Average Power Limit) control via MSR interface |
mei_hdcp | MEI HDCP |
snd_hda_codec_cirrus | Cirrus Logic HD-audio codec |
snd_hda_codec_generic | Generic HD-audio codec parser |
snd_hda_codec_hdmi | HDMI HD-audio codec |
ledtrig_audio | LED trigger for audio mute control |
snd_hda_intel | Intel HDA driver |
snd_intel_nhlt | Intel NHLT driver |
intel_rapl_common | Intel Runtime Average Power Limit (RAPL) common code |
snd_hda_codec | HDA codec core |
snd_hda_core | HD-audio bus |
snd_hwdep | Hardware dependent layer |
x86_pkg_temp_thermal | X86 PKG TEMP Thermal Driver |
snd_pcm | Midlevel PCM code for ALSA. |
intel_powerclamp | Package Level C-state Idle Injection for Intel CPUs |
snd_seq_midi | Advanced Linux Sound Architecture sequencer MIDI synth. |
snd_seq_midi_event | MIDI byte <-> sequencer event coder |
applesmc | Apple SMC |
input_polldev | Generic implementation of a polled input device |
coretemp | Intel Core temperature monitor |
snd_rawmidi | Midlevel RawMidi code for ALSA. |
irqbypass | IRQ bypass manager utility module |
snd_seq | Advanced Linux Sound Architecture sequencer. |
snd_seq_device | ALSA sequencer device management |
snd_timer | ALSA timer interface |
cfg80211 | wireless configuration support |
snd | Advanced Linux Sound Architecture driver for soundcards. |
bdc_pci | BRCM BDC USB3 PCI Glue layer |
mei_me | Intel(R) Management Engine Interface |
sbs | Smart Battery System ACPI interface driver |
mei | Intel(R) Management Engine Interface |
acpi_als | ACPI Ambient Light Sensor Driver |
soundcore | Core sound module |
industrialio | Industrial I/O core |
sbshc | ACPI SMBus HC driver |
apple_bl | Apple Backlight Driver |
cuse | Character device in Userspace |
parport_pc | PC-style parallel port driver |
ip_tables | IPv4 packet filter |
x_tables | {ip,ip6,arp,eb}_tables backend module |
dm_crypt | device-mapper target for transparent encryption / decryption |
hid_generic | HID generic driver |
usbhid | USB HID core driver |
crct10dif_pclmul | T10 DIF CRC calculation accelerated with PCLMULQDQ. |
ghash_clmulni_intel | GHASH Message Digest Algorithm, accelerated by PCLMULQDQ-NI |
i915 | Intel Graphics |
aesni_intel | Rijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized |
aes_x86_64 | Rijndael (AES) Cipher Algorithm, asm optimized |
cryptd | Software async crypto daemon |
i2c_algo_bit | I2C-Bus bit-banging algorithm |
drm_kms_helper | DRM KMS helper |
syscopyarea | Generic copyarea (sys-to-sys) |
i2c_i801 | I801 SMBus driver |
sysfillrect | Generic fill rectangle (sys-to-sys) |
sysimgblt | 1-bit/8-bit to 1-32 bit color expansion (sys-to-sys) |
ahci | AHCI SATA low-level driver |
lpc_ich | LPC interface for Intel ICH |
fb_sys_fops | Generic file read (fb in system RAM) |
libahci | Common AHCI SATA low-level routines |
drm | DRM shared core routines |
video | ACPI Video Driver |
DualBoot ou table rase ?
L’idée de départ était de conserver macOs et d’installer GNU linux en dualboot. Mais c’était sans compter la gestion calamiteuse de BootCamp, l’utilitaire de partitionnement qui refuse obstinément de récupérer la place disponible une fois libérée. Je n’irais pas jusqu’à dire qu’Apple rend la tâche impossible, mais cela y ressemble fortement. Cette difficulté m’a donc convaincu que je n’avais aucun intérêt à conserver une partition macOs sur cette machine. Qu’elle aille au diable !
N’étant pas un spécialiste, j’ai dû me faire épauler par macomaniac du forum macg.co pour arriver à débloquer la situation et bien repartitionner le disque dur (le fil de discussion est ici). Un grand merci à lui !
Avec le premier test d’installation de Debian, j’avais installé au préalable rEFInd, un boot loader. L’installation d’Ubuntu se fait avec GRUB.
Pour rappel, pour choisir sur quoi booter avec un macbook, pressez la touche C au démarrage.
Liens utiles :
https://wiki.debian.org/MacBookPro
https://doc.ubuntu-fr.org/macbook_pro_11.1
https://doc.ubuntu-fr.org/installation_macbook_sans_macosx
https://ipom.fr/2019/05/31/comment-installer-ubuntu-sur-un-macbook-pro/
https://www.lifewire.com/dual-boot-linux-and-mac-os-4125733
https://doc.ubuntu-fr.org/dual_boot_macos_x_ubuntu (pour un dualboot)
https://www.dz-techs.com/fr/install-linux-macbook-pro
Installer GNU linux
Sous mac, avec UNetbootin, je prépare une clé USB d’Ubuntu Studio, puis je boot dessus lors du prochain démarrage. Il n’y a plus qu’à suivre les étapes de l’installateur.
Précédemment, l’installation de Debian s’était appuyée sur l’expérience de Jean-Baptiste Fabre : https://blog.jbfavre.org/2015/03/06/Debian-Jessie-sur-un-Macbook-Pro-11-1/. Merci à lui pour ce tutoriel.
Autre liens utiles :
https://www.cberner.com/2017/12/03/installing-ubuntu-17-10-macbook-pro-retina-mid-2012/
Configuration
Une fois la distribution installée, voici ce qui fonctionne tout de suite : mappage du clavier et rétro-éclairage, luminosité de l’écran, bluetooth, usb, thunderbold. L’autonomie de la batterie est de 5h45 en moyenne. Le niveau de batterie diffère d’environ 5% avec macOs, la charge complète est même indiquée à 86% (lien utile si besoin concernant la gestion de l’énergie).
- Mappage du clavier
Le fichier de configuration est ici : /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE XKBMODEL="pc105" XKBLAYOUT="fr" XKBVARIANT="mac" XKBOPTIONS="" BACKSPACE="guess"
- Luminosité de l’écran
Liens utiles
https://doc.ubuntu-fr.org/retro-eclairage (paquet xbacklight, non utilisé dans mon cas)
https://debian-facile.org/viewtopic.php?id=20310
Ce qui nécessite une action particulière :
- Wifi
Pour Ubuntu, à l’installation (de mémoire), on peut installer un pilote additionnel. Pour Debian, il faudra le faire manuellement.
La carte wifi est une Broadcom BCM4360. Pour identifier la carte :
lspci -vvnn | grep -A 9 Network
Liens utiles :
https://orville.thebennettproject.com/articles/installing-ubuntu-14-04-lts-on-a-2011-macbook-pro/
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx
- TouchPad
Voir ces deux liens pour bien le configurer :
https://wiki.debian.org/MacBook#For_MacBook_Aluminum_.28late_2008.29
https://wiki.debian.org/fr/SynapticsTouchpad#libinput
- Sortie SPDIF allumée en permanence
Pour l’éteindre, lancer dans un terminal (et l’ajouter à votre fichier /etc/rc.local pour rendre ce réglage permanent) :
/usr/bin/hda-verb /dev/snd/hwC1D0 0x0e SET_POWER_STATE 0x03
- Magic mouse
Liens utiles
https://wiki.ubuntu.com/Multitouch/AppleMagicMouse
https://askubuntu.com/questions/261791/how-to-set-the-scroll-speed-of-apple-magic-mouse (vitesse du scroll)
https://www.shareannonce.com/david/tutorial/2c7 (si besoin)
- Gestion du lecteur SuperDrive
Pour le faire fonctionner, il faut installer le paquet sg3-utils et lancer cette commande pour l’activer :
sg_raw /dev/sr0 ea 00 00 00 00 00 01
Le paquet Pommed permet également de gérer le lecteur, aisni que les raccourcis clavier, rétroéclairage, etc.
Lien utile
https://apple.stackexchange.com/questions/135757/will-superdrive-work-on-macbook-air-with-ubuntu
Ce qui n’est pas entièrement résolu :
- Webcam – non reconnue nativement par Ubuntu – On attaque un point noir !!
Le point de départ est encore une fois le blog de Jean-Baptiste Favre (lien). L’idée est d’installer un driver pour la caméra du MacBook FacetimeHD (Broadcom 0x1570) PCIe. La procédure est décrite pour Debian, mais elle peut s’appliquer également à Ubuntu. Attention toutefois à l’étape de génération des paquets, avec les commandes suivantes :
git clone https://github.com/jbfavre/bcwc_pcie.git cd bcwc_pcie git clone debian gbp buildpackage -us -uc --git-debian-branch=debian
À la 3ème commande, j’obtenais une erreur :
:fatal: le dépôt 'debian' n'existe pas
L’auteur m’a précisé alors de remplacer cette 3ème commande par :
git checkout debian
Si cela ne fonctionne pas de suite comme ce fut mon cas, visitez ce lien sur Github, qui est une mine d’or pour débugger comme dans mon cas avec ce qui suit. Bravo et merci à Patrik Jackobsson au passage.
Une fois ce pilote installé et chargé, la caméra ne fonctionne toujours pas. On réussie à l’activer en déchargeant le module bcd_pci :
modprobe -r bdc_pci
Pour le décharger à chaque démarrage, on ajoute un nouveau fichier dans /etc/modprobe.d :
# ne charge pas automatiquement au démarrage le module facetime d'origine blacklist bdc_pci
Et pour charger le module facetimehd à chaque démarrage, on ajoute la ligne suivante au fichier /etc/modules-load.d/modules.conf :
facetimehd
Pour des raisons que je ne saurais expliquer, la caméra ne fonctionne pas avec tous les logiciels. Ainsi, on peut régler deux « états » différents en fonction que l’on souhaite activer la caméra pour tout ce qui fonctionne avec le webRTC ou avec des programmes tels que Cheese par exemple. Cela se fait en changeant la valeur par 0 ou 1 dans le fichier : /etc/modprobe.d/facetimehd.conf
options facetimehd enable_chromium_workaround=1
- Sortie de veille / hibernation
Si le librintosh a le malheur de se mettre en veille, alors le redémarrage ressemblera à une roulette russe, mais avec aucune balle manquante : ça freeze à l’écran de connexion, quasiment à chaque fois 🙁 Redémarrer en appuyant sur la touche esc durant le son de démarrage affiche l’écran de Grub. On choisit démarrer avec options, on appuie deux fois sur la flèche du bas puis Entrée et on obtient la restauration. On redémarrage ensuite normalement et c’est reparti. Je n’ai pas pour le moment pas su améliorer ce point.
Conclusion
En mettant un peu les mains dans le cambouis comme on dit, on arrive à obtenir un GNU linux tout à fait fonctionnel sur le MacBook Pro. Avec sa configuration matérielle, l’ensemble est très réactif. Cette installation nécessite tout de même d’être à l’aise avec les distributions linux en général et la ligne de commande en particulier. Le partitionnement du disque au préalable, le pilote de la webcam et la sortie de veille sont les trois points noirs que je retiens et qui ont nécessité d’y passer beaucoup de temps. J’espère que cet article vous en fera gagner ! Pour le reste, cela fonctionne à merveille !
N’hésitez pas à réagir à ce retour d’expérience, les commentaires sont ouverts !