#!/bin/bash rmmod nvidia if lsmod | grep -q nvidia; then echo "Error: could not unload nvidia module, leaving card turned on" exit 1 fi modprobe acpi_call if ! lsmod | grep -q acpi_call; then echo "Error: acpi_call module not loaded" exit 2 fi acpi_call () { echo "$*" > /proc/acpi/call cat /proc/acpi/call } PSC=$(acpi_call "\_SB.PCI0.P0P4.GFX0._PSC") case "$PSC" in Error*) echo "Error: could not read card state ($PSC)" exit 3 ;; 0x3) echo "Card already disabled" ;; *) DSM=$(acpi_call "\_SB.PCI0.P0P4.GFX0._DSM" \ "{0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47," \ "0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0}" \ "0x100 0x1A {0x1,0x0,0x0,0x3}") case "$DSM" in Error*) echo "Error: could not prepare card disabling ($DSM)" exit 4 ;; esac PS3=$(acpi_call "\_SB.PCI0.P0P4.GFX0._PS3") case "$PS3" in Error*) echo "Error: could not put card to sleep ($PS3)" exit 5 ;; esac PSC=$(acpi_call "\_SB.PCI0.P0P4.GFX0._PSC") case "$PSC" in Error*) echo "Error: could not read card state ($PSC)" exit 6 ;; 0x3) echo "Disabled nVidia card" ;; *) echo "Disabling nVidia card failed ! _PSC returned $PSC" exit 7 ;; esac ;; esac