Macbook без батареи и управление кулером
Умерла очередная батарея Macbook Pro, а замена еще не пришла. Батарея умерал полностью, то есть она тепреь неопределяется и ссистема пишет что она не подключена, при этом она перодически активируется что приводит систему в ступор, так как она пытается брать оттуда питание, а там его нет, - система выключавется или впадает в sleep mode.
В Macbook Pro все устроено так если вынуть батарею и использовать только A/C питание то EFI уменьшает частоту считая что система работает в некоем “Безопасном режиме” Таким образом пользоваться с полной нагрузкой комьютером нельзя, он просто начинает торомозить из за недостатка производительсности. Смотреть ютуб и писать тексты конечно можно, но запускать более производительный софт неполучится.
Решения этой проблемы несуществует и все что мне удалось найти это выключения модуля ядра который управляет частотой в зависимости от нагрузки, но в случае отказа батареи уменьшение частоты происходит на более низком уровне (EFI).
В процессе “гугления” я в очередной раз нашел smcFanControl Внутри которого есть утилита smc который позволяет выставлять различные флаги SMC (System Management Controller) там ~380 ключей или правильнее сказать регистров в которые могут быть записны разные параметры. Несколько параметров управляют частотой вращений кулера.
1
2
3
4
5
6
7
8
9
To read data from each fan:
F0Ac - Fan actual speed
F0Mn - Fan minimum speed
F0Mx - Fan maximum speed
F0Sf - Fan safe speed
F0Tg - Fan target speed
FS! - See if fans are in automatic or forced mode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
To set a fan to a specific speed:
FS! - Sets "force mode" to fan. Bit 0 (right to left) is fan 0, bit 1
is fan 1, etc
F0Tg - Sets target speed, make sure you fp78 encode it (left shift by 2)
For example, to force both fans to 3500 RPM:
# python -c "print hex(3500 << 2)"
0x36b0
# smc -k "FS! " -w 0003
# smc -k F0Tg -w 36b0
# smc -k F1Tg -w 36b0
..to force fan 0 to 4000 RPM and leave fan 1 in automatic mode:
# smc -k "FS! " -w 0001
# smc -k F0Tg -w 3e80
..to return both fans to automatic mode:
# smc -k "FS! " -w 0000
Полный список флагов и описание найти для долго не искал, но за то нашел хороший guide по Apple SMC и как с ним работаьт на Objective C https://jrw01.github.io/Articles/smc.html С помошью утилиты smc можно получать много интересных показателей и использовать их например для построения виджета с этой информацией внутри.
Под катом список всех регистров SMC.