web-dev-qa-db-fra.com

Comment désactiver le nvidia 9600M GT sur un Macbook Pro 5,1 / 5,2 / 5,3

J'ai un MacbookPro 5,1/5,2/5,3 qui vient avec deux cartes graphiques, et par défaut j'obtiens le 9600M GT qui consomme plus de batterie que l'autre. Je ne sais pas comment le désactiver et activer le second.

Plus de détails après la réponse de Bruno:

J'utilise Ubuntu:

  • 11.10 64 bits avec noyau 3.0.0-15-générique (Zegnus, MBP 5,1)
  • 12.04 64 bits avec noyau 3.2-0-24-générique (Megagolgoth, MBP 5,3)

J'ai installé rEFIt 0.14 et GRUB2 EFI64

J'ai modifié l'entrée du fichier /boot/grub/grub.cfg en ajoutant

outb 0x750 0

même si en haut du fichier, il est dit:

DO NOT EDIT THIS FILE

It is automatically generated by grub-mkconfig using templates
from /etc/grub.d and settings from /etc/default/grub

J'enregistre le fichier, démarre, sélectionne l'entrée puis j'ai un écran noir et rien de plus ne se passe.

J'ai essayé https://help.ubuntu.com/community/UEFIBooting#Selecting_the_graphic_card aussi, avec le même résultat.

Je vous remercie.

1
zegnus

Pour désactiver le Nvidia 9600M GT, vous devez ajouter ce qui suit à l'entrée du menu grub outb 750x0, c'est à dire:

menuentry 'Ubuntu, with Linux 3.0.0-12-generic' --class ubuntu --class gnu-linux     --class gnu --class os {
    outb 0x750 0
    recordfail
    set gfxpayload=$linux_gfx_mode
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='(hd0,gpt5)'
    search --no-floppy --fs-uuid --set=root bc495raf-515r-4r2b-b3de-0ec679a7303a
    linux   /boot/vmlinuz-3.0.0-12-generic root=UUID=bc495raf-515r-4r2b-    b3de-0ec679a7303a ro hpet=force
    initrd  /boot/initrd.img-3.0.0-12-generic
}

De plus pour la mise hors tension après la reprise après la suspension:

À la reprise, le contrôleur graphique discret sera allumé et actif. Nous devons l'éteindre et revenir au GPU intégré.

Cela peut être fait avec un petit programme très simple:

#include <stdio.h>
#include <sys/io.h>

#define PORT_SWITCH_DISPLAY 0x710
#define PORT_SWITCH_SELECT 0x728
#define PORT_SWITCH_DDC 0x740
#define PORT_DISCRETE_POWER 0x750

static int gmux_switch_to_igd()
{
outb(1, PORT_SWITCH_SELECT);
outb(2, PORT_SWITCH_DISPLAY);
outb(2, PORT_SWITCH_DDC);
return 0;
    }

    static void mbp_gpu_power(int state)
{
    outb(state, PORT_DISCRETE_POWER);
    }

int main(int argc, char **argv)
{
if (iopl(3) < 0) {
perror ("No IO permissions");
return 1;
}
mbp_gpu_power(0);
gmux_switch_to_igd();
return 0;
}

Enregistrez cela dans un fichier appelé igd.c. Compilez-le avec gcc -O2 igd.c -o igd. Cela créera un exécutable appelé igd. Exécutée avec des privilèges de superutilisateur, elle éteindra le contrôleur discret et basculera vers le contrôleur intégré.

Maintenant, nous devons l'exécuter à la reprise. Créez un fichier appelé /etc/pm/sleep.d/10igd

Il doit contenir:

#!/bin/sh
#
/path/to/igd

Où/chemin/vers est le chemin vers lequel vous placez l'exécutable igd que nous avons créé à l'étape précédente.

chmod +x /etc/pm/sleep.d/10igd

Ce fichier sera exécuté lors de la suspension et de la reprise. Bien fait, ce script 10igd vérifierait s'il s'agit d'une suspension/reprise/gel/dégel et ne s'exécuterait qu'en cas de besoin. En l'état, il s'exécute sur chacun d'eux. Ce n'est pas grave, cela ne fera pas de mal de l'exécuter pendant le gel ou la suspension.

J'ai tout fait fonctionner sur mon mbp5,1: son, LCD rétro-éclairage, rétro-éclairage du clavier, ventilateurs bas (depuis la désactivation du 9600M GT), Apple comme raccourci (CMD + C pour copier), Flash (presque stable) ... Alors demandez simplement si vous avez besoin de plus d'aide

3
remi