I have a dual-boot Mac OS X 10.8 and Kubuntu 12.10 64x on my white MacBook from mid-2010 installed. (Model identifier: MacBook7,1 . I have upgraded my RAM from 2GB to 8GB, if that matters.) I have the proprietary NVIDIA drivers installed on my Kubuntu.

Judging from the temperature monitor widget in Kubuntu, my temperature seems to be ~10℃ hotter compared to under Mac OS X. In Mac OS X I use Temperature Monitor. I'm comparing the CPU Core 0 and CPU Core 1 values in Kubuntu to the CPU Core 1 and CPU Core 2 values in Mac OS X.

10℃ more may be not a very big overheating disaster, but when I do really intense things on my computer (such as playing Team Fortress 2 a while) my CPU is at ~70℃ on OSX, and when playing it a while on Kubuntu, my CPU is ~80℃. I worry that the higher temperature may shorten the lifetime of my laptop.

I did some research and found out that it may be that I installed it in BIOS mode, which causes the heat. I can't install it in EFI mode, because the propietary NVidia drivers don't work then (already tried that, it gave a black screen). Does anyone know how to get the propietary NVidia drivers work in EFI mode?

Edit: Ok, even if there isn't a way to use the proprietary nvidia drivers in EFI mode (doesn't seem like there is a way to do it, I'm not getting any answers), I would already be happy if the heating could be fixed in BIOS mode. How can I at least fix the heating in BIOS mode? I tried putting this in my xorg.conf in the Device section to enable power saving:

     Option         "DPMS" "1"
     Option         "RegistryDwords" "EnableBrightnessControl=1; PowerMizerEnable=0x1; PerfLevelSrc=0x2233; PowerMizerDefault=0x3"

...but that didn't work.

Oh, and I'm not using rEFIt by the way, could it be that?


For me, booting Ubuntu in UEFI mode with the Nvidia drivers loaded, also always resulted in the well-known black screen when X was started.

That was until yesterday!

After running into some very promising info in another thread about installing Windows 7 in UEFI mode on a Mac. Folks over there struggled with Windows 7's required int 10h legacy support and found out that in order to work around that, one can perform an unattended installation (because display doesn't work during install). The crucial information to successfully boot Ubuntu in UEFI mode even with Nvidia drivers was that upon start of EFI boot (while handing over to grub), Apple's firmware does not actually activate the VGA card as PCI-E bus master. The Windows' guys explained how to circumvent this using an EFI shell which chainloads the Windows boot manager in order to at least run the setup in unattended mode. And here is the good news: it's easy to do this in GRUB!

In fact, I am right now typing this on a MacBook Pro 7,1 (mid-2010) running Ubuntu Vivid booted in UEFI mode (Xorg.0.log). However, it should be easy to run on or adapt this to any Linux distribution providing an EFI version of GRUB, e.g. Ubuntu 14.04.2 LTS.

~$ dmesg | grep -i efi
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-15-generic.efi.signed root=UUID=7843c644-e6f4-4d64-9317-0b854cb524f2 ro quiet splash intremap=off acpi_osi=! acpi_osi=Darwin nomodeset vt.handoff=7
[    0.000000] efi: EFI v1.10 by Apple
[    0.000000] efi:  ACPI=0xbf96a000  ACPI 2.0=0xbf96a014  SMBIOS=0xbf71a000

To cut the long story short, we have to set two PCI-E registers: one that enables bus-mastering on the video card and the other one enabling VGA support on the PCI-E bridge of the video card. So it has actually nothing to do with the Nvidia drivers and depending on the viewpoint, not even with Apple's outdated/crippled/you name it EFI implementation.

This is how I solved it. Of course, the kudo's go primarily to the guys on the MacRumors forum. DISCLAIMER The following instructions are provided as is, without guarantees nor do I assume any liability. DO THIS AT YOUR OWN RISK!

1. Install Ubuntu in UEFI mode with the Nvidia drivers

I will not go into details here because there are lots of articles on the web showing you how to do this and end up with the nouveau drivers running your machine hot or with the black screen after installing the Nvidia drivers (e.g. www.rodsbooks.com/ubuntu-efi).

Please note however that the following instructions assume you have successfully installed and booted in UEFI mode. You can verify that by checking for existence of the directory /sys/firmware which is only created after booting in EFI mode.

2. Find the right PCI-E bus identifiers

We need both the IDs for the graphics card and the PCI-E bridge that it is connected to. Issue the following command in a shell:

~$ sudo lshw -businfo -class bridge -class display
pci@0000:00:00.0              bridge         MCP89 HOST Bridge
pci@0000:00:03.0              bridge         MCP89 LPC Bridge
pci@0000:00:0e.0              bridge         NVIDIA Corporation
pci@0000:00:15.0              bridge         NVIDIA Corporation
pci@0000:00:16.0              bridge         NVIDIA Corporation
pci@0000:00:17.0     >!!<     bridge         MCP89 PCI Express Bridge
pci@0000:04:00.0     >!!<     display        MCP89 GeForce 320M

Have a look at (1) the line saying display and (2) the line with bridge right before that display line. Write down the PCI-E bus ids (format XX:YY.Z) of the bridge device (here 00:17.0) and the display device (here 04:00.0) and remember which is which. Note: Those IDs may be different on your machine, depending on your Mac model and revision.

3. Create a GRUB script for setting the PCI-E registers during boot

Fire up a text editor with sudo nano /etc/grub.d/01_enable_vga.conf and copy/paste the content below. Replace 00:17.0 with the PCI-E ID of your bridge device noted in step 2. Replace 04:00.0 with the PCI-E ID of your display device noted in step 2.

cat << EOF
setpci -s "00:17.0" 3e.b=8
setpci -s "04:00.0" 04.b=7

Finally, make the created file executable and update your grub config files using the following TWO commands.

~$ sudo chmod 755 /etc/grub.d/01_enable_vga.conf
~$ sudo update-grub

4. Reboot and check

If, after rebooting, the register values have been set to 8 (bridge device) and 7 (display device), everything went fine:

 ~$ sudo setpci -s "00:17.0" 3e.b
 ~$ sudo setpci -s "04:00.0" 04.b

5. Install Nvidia drivers and enjoy!

Use Ubuntu's Additional drivers GUI to install the Nvidia drivers. I recommend following this article on how to enable brightness controls because it doesn't work out of the box.

| improve this answer | |
  • Any chance you could link to your /etc/X11/xorg.conf file? – Patrick Apr 4 '16 at 22:09
  • Sorry, I sold the machine a few months after writing this article. But you might try asking on this Arch forums thread: bbs.archlinux.org/viewtopic.php?id=162289&p=4. – Andreas Apr 7 '16 at 4:44
  • This totally worked for my 2010 macbook air, I was getting a black screen after suspend, and the performance was crappy. This solved my issue thank you ! – pyrho Jun 2 at 12:28

I had a similar problem with my laptop the following worked for me I hope it helps you out.

firstly using Jupiter helped solve most over heating and battery life problems.
My Laptop runs on average 50 degrees Celsius and was running at 68 degrees Celsius before installing Jupiter.

sudo add-apt-repository ppa:webupd8team/jupiter
sudo apt-get update
sudo apt-get install jupiter

After I installed Jupiter, I installed Bumblebee to get my nvidia card to work and switch between intel and nvidea as needed to save battery life and run cooler.

add-apt-repository ppa:bumblebee/stable
sudo apt-get install nvidia-current
sudo apt-get install bumblebee bumblebee-nvidia


Then Test to see if it works with

optirun glxspheres

To install Bumblebee GUI: https://askubuntu.com/a/170596/207851

After this My Laptop runs on average 47 degrees Celsius and my battery lasts on average 3 hours (This is with listening to music and developing/3D work like Using Blender).

Good Luck and I hope This Helps

| improve this answer | |

I will try to assist.

First you are correct. You can not use EFI mode and the proprietary drivers. Not only that but a a lot of other things will get borked. For now your best option for support is to install in BIOS mode.

Now as to heat. Keep in mind that OS X runs cooler because they know their "crotch warmer" is unpleasant at higher temperatures. I.e. they over cool so you can sit still with a 17" heat sink on your lap. That said you can control things in Linux so you can over cool as well (and keep the temperature cooler).

This Code is pretty good. Compile it, run it, and set it to start on boot, and you should get "better" results.

You can also manually control fan speed.


echo 1 > /sys/devices/platform/applesmc.768/fan1_manual  
echo 1 > /sys/devices/platform/applesmc.768/fan2_manual  

Then echo a speed to the fan controller

echo 6000 > /sys/devices/platform/applesmc.768/fan1_input  
echo 6000 > /sys/devices/platform/applesmc.768/fan2_input  

6000 is the RPM speed your targeting (in the scripts above). 6000 is the "official" max. At that speed you will get the familiar take off sound, and your 17" heat sink will get quite chilly. You will also burn your fans out pretty quickly. 2000 is the minimum. I run at 2000 quite a bit a rarely see over 3000 even when gaming. Of course that means it runs warmer then in OS X.

The official max temp for the CPU in that model is 105 deg. Celsius. So you have plenty of wiggle room.

P.S. Clean your airways, just to make sure.

P.P.S. Here is my config for mbpfan it's one that I am using to overcool (by quite a bit) but it keeps the laptop cool to the touch, and much coooler then in OS X.

min_fan_speed = 3200    # default is 2000  
max_fan_speed = 6200    # default is 6200  
low_temp = 45       # try ranges 55-63, default is 63  
high_temp = 60          # try ranges 58-66, default is 66  
max_temp = 62           # do not set it > 90, default is 86  
polling_interval = 7    # default is 7  

What I do is run something that is going to really heap up my CPU and run the CPUs at 100%. Then run the fans at 6000 RPM and see where the temperature settles. Then set that temperature as my "high_temp".

Set the "max_temp" to something a little bit beyond that. Not to far, but further then the over cooling example.

Next Turn the CPU to power save. And let it sit idle with the fans still at 6000. Set that temperature to your "low_temp".

Finally for min fan speed, set it to something "you like". Basically just low enough that you can't hear it.

Then you run it for a while and see. Again, the CPU max temperature for the model is 105 degrees, so Linux is not wrong for letting it get into the 80s. It won't harm a thing. Change the fan speed however does keep the casing cooler (which because it's the heat sink for the CPU and GPU can get quite warm on your lap), and that is pure preference.

For me, A low of 50, a high of 60 and a max of 70 works quite well. But again this level of tweaking is all to taste. With that over cooling config My CPU never gets above 59. Of course it's quite loud as well.

| improve this answer | |
  • "You will also burn your fans out pretty quickly." Does that mean this will break my fans? Or did I misunderstood? Otherwise, I'll try this. – stommestack Jun 11 '13 at 16:38
  • Running at 6000 full time will burn them out pretty fast. Running them at a more normal speed (say 3000-4000) will be fine. The fans are meant to peak at 6000 not run there full time. – coteyr Jun 11 '13 at 21:00
  • I tried installing that, but no results. My MacBook is still hotter. I can feel the heat. – stommestack Jun 12 '13 at 16:12
  • Did you try running your fans manually at 6000 and clearing your air flow path? My CPU temp is currently at 59.5 and all four cores are at 100% It's not going to be much cooler then that. – coteyr Jun 21 '13 at 19:40
  • It can't be my air flow path because under Mac OS X it is really cool. When I hold my finger against the left alt key, I can feel heat in Ubuntu. But not in Mac OS X. – stommestack Jun 22 '13 at 7:29

Not the answer you're looking for? Browse other questions tagged or ask your own question.