Mac OS X Отключаем видеокарту Nvidia в хакинтоше

Если вам взбрело в голову установить хакинтош на ноутбук с технологией Nvidia Optimus, на котором есть две видеокарты — Intel и Nvidia, то, скорее всего, вывод видео в Mac OS X работает исключительно благодаря встроенной видеокарте Intel. В случае с моим ноутбуком Asus N55SF — это Intel HD3000. Но так как полноценная поддержка технологии Nvidia Optimus, если верить официальному сайту, есть лишь для Windows 7 и выше, то в хакинтоше видеокарта Nvidia просто будет бесполезно работать и потреблять электроэнергию, что в конечном счете отрицательно скажется на продолжительности работы ноутбука от батарей. Для большинства задач встроенной видеокарты Intel в Mac OS X вполне хватает. Поэтому вторую видеокарту, то есть Nvidia, лучше отключить в Mac OS X.

Для этого нужно создать и отредактировать DSDT-файл для вашего ноутбука. Удобнее всего это сделать из самой Mac OS X с помощью программы DSDT Editor. Скачать ее можно из моего репозитория в GitHub.

Первым делом нужно получить оригинальный DSDT. Это легко сделать, выбрав пункт «Extract DSDT».

В результате мы получим примерно следующую картину в окне DSDT Editor.

Затем нужно найти методы _OFF() и _PS0() видеокарты Nvidia и определить Scope, в котором они находятся. Скорее всего они будут находиться в Scope _SB.PCI0.PEG0.GFX0, но лучше лишний раз в этом убедиться.

Далее все, что нам нужно сделать — это вызвать методы _OFF() и _PS0() при инициализации системы, что приведет к отключению видеокарты Nvidia. Для этого нужно вызвать их в двух местах: в методе _WAK() в Scope _SB и в методе _INI() в Scope _SB.PCI0. Но перед этим создадим вспомогательный метод PINI() со следующим содержимым:

Method (PINI, 0, NotSerialized)
{
    \_SB.PCI0.PEG0.GFX0._OFF ()
    \_SB.PCI0.PEG0.GFX0._PS0 ()
}

Если методы _OFF() и _PS0() в вашем DSDT находятся в Scope, отличном от _SB.PCI0.PEG0.GFX0, то пишем соответственно нужный Scope. Далее нужно вызвать наш вспомогательный метод PINI() внутри метода _WAK(). В конечном итоге это будет выглядеть так.

Кроме этого, как я уже упоминал выше, нужно поместить вызов метода PINI() и внутрь метода _INI() в Scope _SB.PCI0.

После этого компилируем наш DSDT как aml-файл и сохраняем его под именем DSDT.aml в каталог /Extra. В файл /Extra/org.chameleon.Boot.plist необходимо будет добавить следующие строки, если их там еще нет:

<key>DSDT</key>
<string>/Extra/DSDT.aml</string>
<key>GenerateCStates</key>
<string>Yes</string>
<key>GeneratePStates</key>
<string>Yes</string>

После этого перезагружаемся, заходим в «Сведения о системе» и убеждаемся, что теперь система видит только одну видеокарту Intel. А видеокарта Nvidia тем временем отключена, что поможет нам сэкономить заряд батарей ноутбука.