Jirōkaki, premier bilan et résumé
À la demande pressante de la foule (bon, n'exagérons rien, juste une poignée de geeks), je fais un bilan et un résumé de la vie avec un hackintosh. Pour ceux qui ont manqué les épisodes précédents, ils portaient sur le pourquoi de la chose et le choix du matériel.
Il ne s'agit pas d'un guide complet (je déconseille d'ailleurs formellement de cloner ma configuration sans avoir veillé à la comprendre suffisamment au préalable), mais plutôt d'un résumé de la façon dont j'ai abordé le sujet enrichi de remarques face à certaines difficultés particulières.
Le montage du matériel a été un peu laborieux (ça doit faire une vingtaine d'années que je n'avais pas monté un PC…), mais sans véritable histoire. Il faut néanmoins se méfier de l'électricité statique et être organisé dans la gestion des petites pièces.
J'ai vérifié que les choses fonctionnaient à peu près correctement avant de tout figer dans le boitier qui est arrivé quelques jours plus tard (oui, ça fait un peu fouillis, mais ce n'est pas dangereux !).
Le boitier Fractal Design est sensiblement plus gros que je ne l'imaginais, mais il est très pratique pour le montage et effectivement extrêmement silencieux.
1. La philosophie d'installation logicielle
La volonté délibérée était d'adapter le matériel à macOS, et non pas tenter d'adapter macOS au matériel. J'ai voulu et réussi à maintenir le système d'exploitation tel qu'il est mis en place par l'installateur Apple. L'idée était de pouvoir faire les mises à jour macOS sans se poser davantage de questions que sur un "vrai" Mac, et même de maintenir SIP actif.
Cela exigeait de comprendre autant que possible ce que je faisais, et de ne pas faire confiance à des outils automatiques qui auraient pu modifier des fichiers système ou installer des tas de choses à des endroits mystérieux. Les principaux outils qui ont été utilisés étaient Clover et de quoi éditer son fichier config.plist
: tout bêtement mon éditeur de texte préféré et, très occasionnellement, Xcode lorsqu'il fallait saisir une data sous forme de données hexadécimales. Ah, si, il faut aussi utiliser le terminal et la commande diskutil
….
Avec mes réflexes de programmeur, j'ai eu la bonne inspiration de suivre le dossier Clover avec un outil de gestion de version. C'était peut-être la meilleure décision de l'ensemble du montage, car il y eut quand même pas mal de remises en cause, de doutes et d'interrogation. Avoir un historique Git m'a encouragé à être plus aventureux et m'a fait gagner beaucoup de temps, mais montre aussi quelques errements sur lesquels je n'entrerai pas trop dans les détails ici.
Quoi qu'il en soit, le résultat actuel est à la hauteur de mes attentes, et je suis persuadé que sur le long terme, une telle approche méthodique et précautionneuse est la plus rentable.
2. Avertissement
Configurer un hackintosh, c'est s'obliger à s'appuyer sur la communauté de ceux qui savent. Mais il vaut mieux être prévenu que cette petite communauté n'est pas toujours facile à vivre. Sans surprise, elle est largement anglophone, avec cependant des niveaux de maîtrise de la langue de Mark Twain très variables, ce qui fait que les incompréhensions techniques et culturelles peuvent facilement proliférer. Cela contribue d'ailleurs à créer quelques querelles de chapelles dont certaines sont aujourd'hui irréconciliables, et cette communauté inclue aussi quelques nerds qui méprisent un peu les supposés débutants. Enfin, il vaut mieux prendre avec un peu de prudence les avis tranchés et définitifs qui ne manquent pas de fleurir… quitte à être démentis par la réalité plus tard.
Dans ces conditions, il est recommandé de lire beaucoup, en utilisant les moteurs de recherche, et d'écrire prudemment en privilégiant dans un premier temps les forums francophones un peu plus bienveillants de chez MacGeneration et de MacBidouille.
3. Mon principal regret
Reconnaissons le, je me suis un peu planté dans le choix de la mémoire vive. Faute de disponibilité en stock des mêmes Crucial que celles utilisées par Nicolas Furno, je m'était dit qu'un autre modèle d'une marque réputée ne poserait pas de problème ; mais visiblement il peut y avoir des incompatibilités avec certaines barettes de RAM non certifiées par Gigabyte, et je suis tombé en plein dedans.
Après plusieurs essais de versions de BIOS, je reste condamné à utiliser le BIOS F4 en montant les barrettes aux emplacements DDR4_2 et DDR4_4 (les deux les plus proches du processeur).
Bref, il aurait mieux valu se fier à la Memory Support List de Gigabyte ou attendre des retours d'autres utilisateurs. Mais bon, je m'en suis sorti dans ces conditions, et comme je n'ai pas de besoin immédiat de modification de la configuration, ne touchons plus à rien à ce sujet…
4. Deux points sur lesquels le doute persiste
Sur deux points, je pense avoir pris une bonne décision en fonction des paramètres du moment, mais je ne suis pas sûr que ces décisions soient les meilleures sur le long terme. Ces deux points ont en commun le fait d'être liés à la carte graphique.
La première concerne le choix du SMBios, une des décisions les plus importantes et structurantes de la post-installation. J'ai beaucoup hésité entre iMac14,2 et iMac17,1.
L'iMac17,1 (iMac Retina 27 pouces de fin 2015) est plus récent de deux ans, donc on peut spéculer qu'il pourrait être supporté un peu plus longtemps par les futures versions de macOS. Surtout, il est doté d'un processeur Skylake plus proche de celui du véritable matériel. L'avantage réel d'un tel choix reste cependant non démontré : j'ai été de toutes façons amené à faire une configuration manuelle "aux petits oignons" de l'économie d'énergie, et une fois que cela est fait, les capacités du Skylake sont semble-t-il également parfaitement exploitées avec le SMBios iMac14,2.
Par contre, choisir l'iMac17,1 comme base de configuration du SMBios présente l'inconvénient d'avoir à affronter un problème d'écran noir au démarrage de macOS. Ce problème se contourne par un rajout dans config.plist/KernelAndKextPatches/KextsToPatch, mais ce contournement1 représente un risque légèrement accru (est-ce que ça continuera de marcher à l'avenir ?) et pourrait me compliquer la vie en cas de réinstallation ou de démarrage sur la partition de secours Recovery HD.
Le second doute est lié au choix de la carte graphique elle-même. Mon choix s'était porté sur une carte silencieuse à base de chipset Nvidia GTX960 et j'en suis techniquement très satisfait. C'était aussi la solution de facilité pour un hackintosh, notamment pour avoir une veille qui fonctionne bien (dans ce domaine, il y a des problèmes connus et non encore résolus avec les cartes AMD ainsi qu'avec les GPU Intel HD530).
Mais il faut reconnaître que cette puissance est un peu sous-exploitée pour mon usage, et cette carte additionnelle m'oblige à attendre 24 ou 48 heures après la publication d'une mise à jour macOS afin que Nvidia fasse également les mises à jour de son driver, sous peine de retomber sur le driver d'origine Apple qui ne profite pas de l'accélération et provoque des petits problèmes d'affichage.
Sauf est que ma configuration est tellement stable que j'oublie très régulièrement cette précaution et effectue les mises à jour Apple comme sur un Mac ultra-basique… ce qui me confronte au problème ci-dessus et m'oblige alors à un hack temporaire pour retrouver toutes les fonctionnalités de ma machine.
Je ne voudrais pas cependant que ces problèmes potentiels effrayent outre mesure le débutant. En cas de problème, on peut toujours rajouter nv_disable=1
parmi les arguments de boot (il y a d'ailleurs une option pour cela directement dans les menus de Clover2) afin d'avoir une machine à peu près fonctionnelle. D'autres solutions de contournement existent, mais je n'insisterai pas dessus car la solution n'est jamais très lointaine et il est généralement moins fatigant d'attendre quelques heures la sortie du driver officiel Nvidia.
5. Ce qui ne marche pas
Deux points me gênent un peu.
La NVRAM physique : cette carte-mère a une NVRAM qui, à en croire la littérature, fonctionne parfaitement sous Linux et Windows. Pour sa part, macOS arrive à lire cette NVRAM. Mais, avec la carte mère que j'ai et comme sur la plupart des hacks à base de Skylake, pour des raisons qui restent pour l'heure mystérieuses, macOS n'arrive pas à écrire de manière permanente dans la NVRAM. Il y a une solution de contournement (EmuVariableUEFI), mais j'ai préféré m'en passer.
La deuxième fonction qui me manque est l'hibernation. À travers une ligne de commande, il est en principe possible d'activer une fonction de veille très profonde, dans laquelle la mémoire vive est sauvegardée sur le disque dur et l'ordinateur n'a alors strictement plus besoin d'électricité. Au réveil, la machine peut recharger la mémoire à partir de la sauvegarde disque (ce qui demande quelques secondes) et l'on se retrouve exactement dans la configuration initiale.
Sur mes "vrais" Macs de bureau, cette fonction d'hibernation avait marché un temps, puis les mises à jour logicielles ont cassé cette fonctionnalité. Malgré mes efforts et ma motivation3, je n'ai pas réussi à la faire fonctionner non plus sur mon hackintosh.
6. Installation initiale
Je me suis basé sur un tutoriel paru chez MacBidouille, mais en simplifiant drastiquement l'étape 3 en utilisant Flash Drive Maker.
Les drivers suivants, à installer dans EFI/CLOVER/kexts/Other, activent les cartes Ethernet : IntelMausiEthernet pour la LAN1 et AtherosE2200Ethernet pour la LAN2.
7. Contourner des bugs liés au BIOS
J'ai constaté deux bugs avec ma version de BIOS :
- il faut désactiver l'affichage de la jolie mais inutile LED rouge présente sur la carte mère,
- pour résoudre la multiplication sauvage d'entrées de boot dans le BIOS, il faut faire du ménage à travers le shell UEFI puis renommer le dossier EFI/BOOT (de façon à ce qu'il ne soit pas actif et qu'EFI/CLOVER prenne la main).
Your mileage may vary…
8. Sauvegarder et décompiler les DSDT/SSDT d'origine
C'est une étape préliminaire pour étudier l'état de sa machine et qui pourra servir de point de départ plus tard afin d'ajuster plus finement que ne le permet Clover certains réglages.
On se réfèrera au début de ce guide. En résumé :
- dans CLOVER, on sauvegarde les DSDT et SSDT d'origine avec la touche F4,
- on recopie les DSDT.aml et SSDT*.aml (et ceux là uniquement !!) de EFI/CLOVER/origin dans un dossier vide,
- on ajoute le fichier refs.txt,
- on décompile en bloc avec
iasl -da -dl -fe refs.txt *.aml
, - on obtient les fichiers .dsl qui pourront être utilisés avec MaciASL.
Note : cette étape est sans doute à recommencer si l'on flashe un autre BIOS.
9. La carte graphique
Rajouter ce patch dans config.plist/KernelAndKextPatches/KextsToPatch pour prévenir l'écran noir au démarrage avec le SMBios iMac17,1, forcer une reconstruction du cache du kernel système par un sudo touch /System/Library/Extensions/
suivi d'un redémarrage de l'ordinateur, puis télécharger les drivers de la carte sur le site de Nvidia et les installer.
10. Le son
En préambule, macOS s'attend à des noms de "devices" qui peuvent s'appeler différemment sur le PC. Pour cette carte-mère, il faut avoir le patch "Rename HDAS to HDEF". En ce qui me concerne, cela a été fait via config.plist/ACPI/DSDT/Patches.
On installe ensuite le kext AppleALC dans EFI/CLOVER/kexts/Other et on injecte le layout config.plist/Devices/Audio : 1.
Pour le son sur la sortie HDMI de la carte Nvidia, il m'a fallu compiler un SSDT trouvé chez Toleda.
11. L'USB
Il y a un long fil d'échanges sur MacGeneration qui a été consacré à ce sujet avec cette configuration. On retiendra ces deux posts récapitulatifs de Gradou sur la démarche et de votre serviteur sur le résultat final.
Il faut :
- télécharger le kext "maison" dont le rôle sera de contrôler l'injection des ports effectuée par Clover,
- choisir un maximum de 15 ports4 USB2 + USB3 à partir des schémas fournis dans cette archive,
- modifier le fichier Info.plist dans GA_Z170X_G5_Injector.kext pour supprimer les ports que vous avez décidé de sacrifier,
- pour faciliter la mise en veille, mettre UsbConnector à 255 pour les ports à usage interne (par exemple, celui qui me sert à connecter la carte Bluetooth),
- placer le .kext ainsi modifié dans EFI/CLOVER/kexts/Other.
12. iMessage, iCloud, AppStore…
En principe, votre interface réseau en0
correspond à la carte Intel. Informations Système d'Apple devrait afficher quelque chose comme cela :
Pour une fois, il faut faire une infidélité aux méthodes artisanales et télécharger Clover Configurator.
Lancez Clover Configurator, ouvrez le fichier config.plist du dossier EFI/Clover, cliquez la section SMBIOS et suivez ces instructions. À la différence près que j'ai choisi iMac17,1 comme ProductName, comme vous vous en doutez si vous avez bien suivi jusqu'ici.
Afin de lire certains contenus protégés, il faut vérifier que l'on a le renommage du device HECI en IMEI.
13. États du processeur et veille
L'économie d'énergie est peut-être le sujet qui m'a demandé le plus de temps et… d'énergie dans ce projet.
Beaucoup de monde semble se contenter d'avoir un processeur dont la vitesse varie en fonction de la charge, mais le sujet est bien plus riche que cela.
Pour s'assurer que la gestion native de l'énergie est complètement activée avec un chipset Skylake, il faut vérifier que 3 kexts se chargent correctement. Cela se fait en ligne de commande sous Terminal. Vous devriez obtenir quelque chose comme cela.
$ kextstat | grep -i applelpc
90 0 0xffffff7f8309a000 0x3000 0x3000 com.apple.driver.AppleLPC (3.1) F51595F0-F9B1-3B85-A1C3-F984DAD4107E <89 12 5 4 3>
$ kextstat | grep -i acpiplat
13 1 0xffffff7f8382f000 0x60000 0x60000 com.apple.driver.AppleACPIPlatform (5.0) 867C81BE-EA01-3A65-89F4-06D78E6514CA <12 11 7 6 5 4 3 1>
$ kextstat | grep -i x86platformplugin
103 1 0xffffff7f81cea000 0x17000 0x17000 com.apple.driver.X86PlatformPlugin (1.0.0) 782DA5F5-F9BB-3B75-B40D-EC8EFFCE89A8 <98 89 57 19 11 7 6 5 4 3 1>
$
Si au moins l'un des kexts est non chargé, il subsiste de la gestion non native de l'alimentation. Pour la CPU, je recommande le script ssdtPRGen.sh :
curl -o ~/ssdtPRGen.sh https://raw.githubusercontent.com/Piker-Alpha/ssdtPRGen.sh/Beta/ssdtPRGen.sh
chmod +x ~/ssdtPRGen.sh
~/ssdtPRGen.sh
On récupére dans ~/Library/ssdtPRGen le fichier ssdt.aml qui a été généré et on l'installe dans EFI/CLOVER/ACPI/patched. Vous pouvez ensuite supprimer le fichier ~/ssdtPRGen.sh et le dossier ~/Library/ssdtPRGen
Pour activer AppleLPC, ça a été plus compliqué. Il m'a fallu un patch du DSDT. Pour faire la même chose chez vous :
- téléchargez MaciASL ;
- ouvrir ses préférences et ajoutez le référentiel de RehabMan ayant comme URL http://raw.github.com/RehabMan/Laptop-DSDT-Patch/master ;
- ouvrir une copie du fichier DSDT.dsl (généré à l'étape 8 du présent document) et appliquer le patch nommé [Sys] Slylake LPC ;
- compiler et placer le nouveau fichier DSDT.aml ainsi généré dans EFI/CLOVER/ACPI/patched.
La difficulté suivante a été d'avoir une machine stable pendant les longues périodes de veille. J'y suis arrivé, mais il y a encore pas mal de choses qui méritent un peu de clarification là dedans. À mes yeux, les deux points les plus importants sont d'avoir l'argument de boot darkwake=1
dans config.plist/Boot/Arguments et de désactiver l'autoextinction de macOS :
sudo pmset autopoweroff 0
sudo pmset autopoweroffdelay 288000
Ceci étant, tout semble maintenant fonctionner normalement (avec les quelques exceptions déjà exprimées), y compris des fonctions comme Power Nap.
J'invite ceux que ça intéresse à regarder de plus près ma configuration de Clover et mes réglages de BIOS.
14. Bug nVidia avec iBooks
Dernier problème à signaler : iBooks et (plus gênant pour moi) Xcode/Developer Tool/Instruments affichent des fenêtres transparentes lorsque la carte graphique Nvidia est utilisée.
C'est un problème qui n'est pas spécifique aux hacks ; il apparaît avec les anciens MacPro et il paraît que Nvidia travaille dessus en liaison avec Apple, mais pour l'heure c'est assez agaçant…
La solution temporaire est de forcer l'activation de la carte graphique intégrée Intel (iGPU) pour qu'elle soit à la disposition de Metal :
- dans le BIOS : Onboard LAN controller: enabled (au lieu de auto),
- dans la configuration Clover :
- config.plist/Graphics/Inject/Intel : true,
- config.plist/Graphics/ig-platform-id : 0x19120000.
Pour ne pas avoir de problème de sortie de veille, mettre dans config.plist/KernelAndKextPatches/KextsToPatch des modifications de framebuffers trouvées chez Toleda pour macOS 10.11.4 ou supérieur avec la carte graphique Intel HD530.
15. Liens utiles
- Mes travaux en cours : https://github.com/barijaona/CLOVER_GA-Z170X-Gaming5/
- Configuration de BIOS et autres photos : https://www.flickr.com/photos/barijaona/albums/72157679912387936
- Clover : https://sourceforge.net/projects/cloverefiboot/
- Clover wiki : https://clover-wiki.zetam.org/Home
- Annonce des NVidia WebDrivers : http://www.insanelymac.com/forum/tags/forums/nvidia%2Bweb%2Bdriver/
- Annonce des drivers Cuda : http://www.insanelymac.com/forum/tags/forums/cuda/
- Forum customisation et hackintosh de MacGeneration : https://forums.macg.co/forums/customisation-et-hackintosh.121/
- Forum hackintosh de MacBidouille: http://forum.macbidouille.com/index.php?showforum=66
- Discussion en cours sur le problème de la NVRAM (très geek) : http://www.insanelymac.com/forum/topic/317802-EFI-Variable-Store-on-Aptio-V-%28Haswell-E-and-up%29#
- Discussion sur le développement de Clover (très geek également) : http://www.insanelymac.com/forum/topic/306156-Clover-Bug-Issue-Report-and-Patch
Suite : bilan performance/prix.
Information à l'usage des "sachants" : cette solution alternative à AGDPfix présente l'avantage de résider entièrement dans le dossier Clover :
- elle n'a donc pas besoin d'être réappliquée lors des mises à jour macOS,
- elle permet de maintenir actif en permanence la fonction SIP. ↩Sélectionner dans Clover l'icône du volume de démarrage, appuyer sur la touche Espace, activez l'option qui vous intéresse (Set Nvidia to VESA (nv_disable=1), puis l'option Return, avant de booter effectivement. ↩
Le contrôleur de macOS ne peut pas gérer plus de 15 ports, et une connexion physique USB3 prend deux ports logiques : une en USB2 et une en USB3. ↩