Как Apple (некоторые) MacBook’и сломали

Привет. В этой статье я хотел бы рассказать вам о том, как Apple некоторое время назад незаметно нарушила регулировку яркости и спящий режим для некоторых MacBook с gMux, что по какой-то причине осталось относительно незамеченным, а также задать несколько вопросов, так как у меня есть некоторые основания полагать, что это было сделано намеренно.

В конце статьи есть обновление.

Как все это началось?

Некоторое время назад мне подарили старый MacBook 2010 года с диагональю экрана 15 дюймов на процессоре Core i7 (с интегрированным в процессор видеоядром Intel HD Graphics 1-го поколения) с проблемным дискретным видеоядром, поэтому мне пришлось долго искать, можно ли повысить яркость в спящем режиме без изменений железа и перепрошивки контроллера. Мне нужно было понять причину, по которой это не работает.

В чем же сама проблема, сэр?

У некоторых MacBook с дискретным видеоядром была досадная ошибка в виде отслаивания кристалла видеоядра от подложки, которая припаяна к материнской плате. Это привело к тому, что в народе называют "свалкой". MAC начинает работать/прекращает загрузку на этапе инициализации драйвера для дискретного ядра самой операционной системой. В некоторых случаях гарантийного ремонта не было либо из-за окончания гарантии, либо из-за того, что это не является признанным гарантийным случаем для конкретной модели, а ремонт в неофициальных сервисах обходится дорого из-за их специфики (это видеоядерное ядро припаяно с использованием пайки BGA). Все ли ужасно и мрачно?

Нет, пользователь, если есть видео, интегрированное в процессор Intel, имеет возможность отключить дискретное видеоядро с помощью аргументов NVRAM, которые считывает прошивка.

Для этого в однопользовательском режиме (⌘+С после запуска Mac) просто введите эту длинную строку в NVRAM:

‘ nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00"

После изменений в NVRAM MacBook начнет загружаться на встроенное видеоядерное ядро и будет работать полностью правильно. Или нет?

Здесь что-то сломано?

После этих изменений вы *скорее всего * поймете, что ваш спящий режим не работает по какой-то неизвестной причине, а также вы не можете отрегулировать уровень яркости дисплея, который характеризуется резким потеканием глаз в темноте. Многие (включая досдуде1) принимали это как должное, не обращая внимания на причину. Но почему это происходит?

Из того, что мне удалось выяснить, AppleGraphicsControl.За такое поведение отвечает Kext, внутри которого находится плагин AppleMuxControl, управляющий аппаратным переключателем графики gMux, который, помимо прочего, отвечает за настройку яркости на компьютерах MacBook с дискретным видео.

Начиная с одной из версий macOS Sierra, при загрузке с Intel Graphics вы увидите одну незаметную строку в журнале загрузки системы (или в подробном режиме, ⌘+V):

"AGC: загружено в IG, политика отключена!!"Это значит это для тебя:
Вы полностью теряете возможность полноценно использовать режим сна (подсветка экрана просто не включится, но матрица продолжит отображать изображение, что можно заметить, посветив фонариком в яблоко за матрицей, так как оно пропускает свет), вы полностью теряете возможность изменять уровень яркости экрана.

Что, если я скажу тебе, что так было не всегда?

В ОС ниже определенной версии этот плагин не выдавал эту строку, а регулировка яркости и режим сна работали спокойно. Это произошло из-за того, что в коде плагина еще не было проверки загрузки со встроенного видеоядерного ядра.

El Capitan на MBP2010 с отключенной выборкой. Регулировка яркости и режим сна-работают стабильно. Дискретность скрыта мной, чтобы не разогреваться в простое.

Однако в macOS Sierra и выше разработчики Apple внедрили там проверку, которая работает исключительно при загрузке без dGPU. Все, что он делает, — это меняет политику на 0, что приводит к абсолютной невозможности регулировки яркости экрана в macOS. Даже установка политики на желаемую (извлеченную из того же kext) с помощью аргумента ядра" agc=<политика> " вам не поможет, потому что она все равно изменит ее на 0.

macOS Mojave на MBP2010 с отключенной выборкой, как вы можете видеть-регулировка яркости не работает, ее ползунок даже не отображается. Кроме того, сон не работает нормально.

Примечание: снимок экрана был сделан с macOS Mojave, который официально не поддерживает этот MacBook, но я могу заверить вас, что на Sierra и High Sierra (которые официально поддерживают этот MacBook) поведение абсолютно идентично, что вы можете увидеть сами, если хотите.

И что дальше?

Из всего вышесказанного мы можем сделать следующие выводы:

  1. Такое поведение было намеренно введено Apple в драйвер gMux, о чем свидетельствует тот факт, что плагин от AGC даже выдает журнал отключения регулировки яркости (политика отключения из-за загрузки графикой от Intel).

  2. На этих макбуках технически возможно регулировать яркость даже без исправлений прошивки gMux/модификаций железа, что, по-видимому, намеренно нарушено Apple.

Это приводит к следующим вопросам:

  1. По какой причине программное обеспечение Apple предоставляет пользователям возможность, которая для многих версий macOS / Mac OS X никому не мешала и работала стабильно, позволяя нормально использовать MacBook с неисправным дискретным видеоядром?

Стоит учитывать, что в некоторых ноутбуках Apple вероятность обнаружения дефекта дискретного видеоядерного ядра после окончания поддержки довольно велика, так что необходимость использовать эту возможность может возникнуть в любой момент.

  1. Является ли это попыткой заставить пользователей перейти на более новое оборудование/оплатить гарантийный ремонт вместо использования компьютера в любой форме? Позвольте мне напомнить вам, что в случае владения утюгом apple, купленным вашей собственной кровью, это право пользователя, особенно с учетом того факта, что существует регулярная возможность отключения видеоядра через прошивку с одним аргументом NVRAM.

Я ничего не утверждаю, но это абсолютно не похоже на несчастный случай.

Поэтому я хотел бы вынести в Интернет более подробную информацию об этой забавной особенности аппаратного обеспечения Apple, с которой, возможно, некоторые из вас даже сталкивались. Я не мог повысить яркость и спать в ОС выше El Capitan, потому что AppleGraphicsControl kext не совместим с новыми версиями macOS.

P.S. Если бы кто-то когда-то копнул дальше меня , мне было бы интересно услышать, что вы сделали и к чему это в конечном итоге привело. Спасибо.

  • Обновление от 28 июля 2021 года*:

Честно говоря, я думаю, что необходимо отметить, что было убедительное объяснение того, что это, вероятно, досадная ошибка, которая выглядела как довольно странная модификация кода драйвера. Я отзываю свои претензии к Apple. Однако из-за этой ошибки пострадали пользователи Mac с неисправной графикой. Я считаю необходимым оставить эту статью, чтобы прояснить суть ошибки и более полную информацию об этом случае.

PriceMedia