Libérer son Mac – Présentation du librintosh

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…

Debian 9 Stretch sur MacBook Pro

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
ProcesseurIntel(R) Core(TM) i7-4578U CPU @ 3.00GHz
Mémoire16304MB (2353MB utilisé)
Machine TypeNotebook
Systeme d’exploitationUbuntu 19.10
Utilisateurskuntzmann (skuntzmann)
Date/Heurelun. 11 mai 2020 23:01:07 CEST
Affichage
Résolution1440×900 pixels
OpenGL RendererMesa DRI Intel(R) Haswell
X11 VendorThe X.Org Foundation
Audio Devices
Adapteur AudioHDA-Intel – HDA Intel HDMI
Adapteur AudioHDA-Intel – HDA Intel PCH
Systeme d’exploitation
KernelLinux 5.3.0-51-lowlatency (x86_64)
Version#44-Ubuntu SMP PREEMPT Wed Apr 22 21:54:38 UTC 2020
C LibraryGNU C Library / (Ubuntu GLIBC 2.30-0ubuntu2.1) 2.30
DistributionUbuntu 19.10
Ordinateurlibrintosh
Utilisateurskuntzmann (skuntzmann)
Languagefr_FR.UTF-8 (fr_FR)
Dossier Home/home/skuntzmann
durée de fonctionnent21 minutes
Load Average0,53, 0,61, 0,50
Available entropy in /dev/random3889 bits (healthy)
  Modules du kernel
Loaded Modules
rfcommBluetooth RFCOMM ver 1.11
cmacCMAC keyed hash algorithm
bnepBluetooth BNEP ver 1.3
joydevJoystick device interfaces
btusbGeneric Bluetooth USB driver ver 0.8
btrtlBluetooth support for Realtek devices ver 0.1
btbcmBluetooth support for Broadcom devices ver 0.1
btintelBluetooth support for Intel devices ver 0.1
bluetoothBluetooth Core ver 2.22
input_ledsInput -> LEDs Bridge
ecdh_genericECDH generic algorithm
bcm5974Apple USB BCM5974 multitouch driver
intel_rapl_msrDriver for Intel RAPL (Running Average Power Limit) control via MSR interface
mei_hdcpMEI HDCP
snd_hda_codec_cirrusCirrus Logic HD-audio codec
snd_hda_codec_genericGeneric HD-audio codec parser
snd_hda_codec_hdmiHDMI HD-audio codec
ledtrig_audioLED trigger for audio mute control
snd_hda_intelIntel HDA driver
snd_intel_nhltIntel NHLT driver
intel_rapl_commonIntel Runtime Average Power Limit (RAPL) common code
snd_hda_codecHDA codec core
snd_hda_coreHD-audio bus
snd_hwdepHardware dependent layer
x86_pkg_temp_thermalX86 PKG TEMP Thermal Driver
snd_pcmMidlevel PCM code for ALSA.
intel_powerclampPackage Level C-state Idle Injection for Intel CPUs
snd_seq_midiAdvanced Linux Sound Architecture sequencer MIDI synth.
snd_seq_midi_eventMIDI byte <-> sequencer event coder
applesmcApple SMC
input_polldevGeneric implementation of a polled input device
coretempIntel Core temperature monitor
snd_rawmidiMidlevel RawMidi code for ALSA.
irqbypassIRQ bypass manager utility module
snd_seqAdvanced Linux Sound Architecture sequencer.
snd_seq_deviceALSA sequencer device management
snd_timerALSA timer interface
cfg80211wireless configuration support
sndAdvanced Linux Sound Architecture driver for soundcards.
bdc_pciBRCM BDC USB3 PCI Glue layer
mei_meIntel(R) Management Engine Interface
sbsSmart Battery System ACPI interface driver
meiIntel(R) Management Engine Interface
acpi_alsACPI Ambient Light Sensor Driver
soundcoreCore sound module
industrialioIndustrial I/O core
sbshcACPI SMBus HC driver
apple_blApple Backlight Driver
cuseCharacter device in Userspace
parport_pcPC-style parallel port driver
ip_tablesIPv4 packet filter
x_tables{ip,ip6,arp,eb}_tables backend module
dm_cryptdevice-mapper target for transparent encryption / decryption
hid_genericHID generic driver
usbhidUSB HID core driver
crct10dif_pclmulT10 DIF CRC calculation accelerated with PCLMULQDQ.
ghash_clmulni_intelGHASH Message Digest Algorithm, accelerated by PCLMULQDQ-NI
i915Intel Graphics
aesni_intelRijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized
aes_x86_64Rijndael (AES) Cipher Algorithm, asm optimized
cryptdSoftware async crypto daemon
i2c_algo_bitI2C-Bus bit-banging algorithm
drm_kms_helperDRM KMS helper
syscopyareaGeneric copyarea (sys-to-sys)
i2c_i801I801 SMBus driver
sysfillrectGeneric fill rectangle (sys-to-sys)
sysimgblt1-bit/8-bit to 1-32 bit color expansion (sys-to-sys)
ahciAHCI SATA low-level driver
lpc_ichLPC interface for Intel ICH
fb_sys_fopsGeneric file read (fb in system RAM)
libahciCommon AHCI SATA low-level routines
drmDRM shared core routines
videoACPI 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"
 

Clavier librintosh

  • 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 ! ​

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *