70 lines
1.7 KiB
Nix
70 lines
1.7 KiB
Nix
self: with self; ''
|
|
# Copyright (c) 2014-2015 Bruno Bierbaumer, Andreas Heider
|
|
|
|
readonly sysfs_efi_vars='/sys/firmware/efi/efivars'
|
|
readonly efi_gpu='gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9'
|
|
|
|
usage(){
|
|
cat <<EOF
|
|
Usage:
|
|
$(basename $0) --integrated # Switch to the integrated GPU
|
|
$(basename $0) --dedicated # Switch to the dedicated GPU
|
|
$(basename $0) --help # Show this message
|
|
|
|
Switches between the integrated and dedicated graphics cards of a dual-GPU
|
|
MacBook Pro for the next reboot.
|
|
|
|
Arguments:
|
|
-i, --integrated
|
|
-d, --dedicated
|
|
-h, --help
|
|
|
|
Tested hardware:
|
|
MacBook Pro 5,2 (Early 2009, Non-Retina)
|
|
MacBook Pro 5,3 (Mid 2009, Non-Retina)
|
|
MacBook Pro 8,2 (Late 2011, Non-Retina)
|
|
MacBook Pro 9,1 (Mid 2012, Non-Retina)
|
|
MacBook Pro 10,1 (Mid 2012, Retina)
|
|
MacBook Pro 11,3 (Late 2013, Retina)
|
|
MacBook Pro 11,5 (Mid 2015, Retina)
|
|
EOF
|
|
}
|
|
|
|
switch_gpu(){
|
|
if ! [ -d /sys/firmware/efi ]; then
|
|
printf "Fatal: $(basename $0) has to be run in EFI mode.\n" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! mount | grep -q $sysfs_efi_vars; then
|
|
if ! mount -t efivarfs none $sysfs_efi_vars; then
|
|
printf "Fatal: Couldn't mount ''${sysfs_efi_vars}.\n" 1>&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
chattr -i "''${sysfs_efi_vars}/''${efi_gpu}" 2> /dev/null
|
|
printf "\x07\x00\x00\x00\x''${1}\x00\x00\x00" > "''${sysfs_efi_vars}/''${efi_gpu}"
|
|
}
|
|
|
|
if [ $# -ne 1 ]; then
|
|
usage 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
-i|--integrated)
|
|
switch_gpu 1
|
|
;;
|
|
-d|--dedicated)
|
|
switch_gpu 0
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
;;
|
|
*)
|
|
usage 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
''
|