Debian on mackbook pro 8.2
About efi install
- NOTE: the actual efi installation results in a not working discrete (AMD) graphic card. However there is something new there for direct boot using efistub and get AMD work:
- https://help.ubuntu.com/community/MacBookPro8-2/Raring
- https://wiki.debian.org/MacBook#Double_boot_-_Mac_OS_X_.26_Debian
- https://wiki.debian.org/EFIStub
(The used references are at the end of the article)
Stretch-stable
- Installed from Debian 9 dvd image with non-free firmware (in this example, the 9.0.0+nonfree/amd64/iso-dvd/firmware-9.0.0-amd64-DVD-1.iso ] )
- The follow partition scheme was prepared using the Disk Utility of OSX:
+-------------+-------+-----+ |name |type |size | +-------------+-------+-----+ |CROSSMOUNT |vfat |25GB | |ROOT |xfs |25GB | |SRV |xfs |25GB | |SWAP |swap |4GB | |HOME |xfs |219GB| +-------------+-------+-----+
Install
- At installer boot, no changes to grub menu are needed, but is convenient to choice the non graphical install mode
- WARNING: in my tests, Grub efi boot loader will be installed without asking, overriding the default OSX boot loader (but that is what I want to do)
- NOTE: Grub menu will appears freaky
WARNING: problems with AMD discrete card
Please note: if you have any (future) problems with AMD discrete card, you can disable it for macOS from linux command line:
- 1, from linux, set to disable the card before boot
# do the follow (USING LINUX) ONLY if you have problems booting MACOS with discrete card printf "\x07\x00\x00\x00\x01\x00\x00\x00" > /sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9 chattr +i "/sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9"
- 2, from mac (starting in single mode), disable amd extensions
# do the follow (USING MACOS in single mode) ONLY if you have problems booting MACOS with discrete card mount -uw / (to be able to move System files) mkdir /System/Library/DisabledExtensions/ mv /System/Library/Extensions/ATI* /System/Library/DisabledExtensions/
- You can also set up a recovery pendrive
using refind, getting the image from http://sourceforge.net/projects/refind/files/0.14.2/refind-flashdrive-0.14.2.zip/download and using dd to put to a pendrive (to the main device, not to a partition)
alternatively, you can generate a grub efi image (and a decent font) to put in the same folder of refind one (replacing it):
grub-mkfont -s 64 -o dv.pf2 /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf grub-mkimage -O x86_64-efi -o bootx64.efi -p "/EFI/boot" part_gpt appleldr part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot loopback iso9660 udf configfile linux multiboot iorw gfxterm font all_video gettext
additionally, you can edit the usb pendrive to add a secondary partition (using the remaining space of the pendrive) putting there an iso bootable image, and configure grub.cfg file such that (put this file in the same folder as the previous generated bootx64.efi):
set timeout=10 set default=0 set menu_color_normal=white/black set menu_color_highlight=black/light-gray insmod all_video if loadfont /EFI/boot/dv.pf2 ; then set gfxmode=auto load_video insmod gfxterm insmod gettext fi terminal_output gfxterm menuentry "Disable discrete card" { set gfxpayload=keep # Switch gmux to IGD outb 0x728 1 outb 0x710 2 outb 0x740 2 # Power down ATI outb 0x750 0 } menuentry "USB iso image" { set isofile="/debian.iso" loopback loop (hd0,2)$isofile linux (loop)/install.amd/vmlinuz vga=788 i915.lvds_channels=2 i915.modeset=1 i915.lvds_use_ssc=0 i915.i915_enable_rc6=1 iso-scan/filename=$isofile initrd (loop)/install.amd/gtk/initrd.gz }
First boot
- At first system boot, edit the Linux item of the Grub prompt disable 'modeset' features and switch off discrete graphic cards, adding:
- - Follow lines just before the "Loading Linux" line:
outb 0x728 1 outb 0x710 2 outb 0x740 2 outb 0x750 0
- - Follow parameters just before "ro quiet" ones (usually I remove the "quiet one too")
i915.modeset=1 i915.lvds_channel_mode=2 i915.lvds_use_ssc=0
- - In my case, the result was like the follow:
[...] outb 0x728 1 outb 0x710 2 outb 0x740 2 outb 0x750 0 echo 'Loading Linux 4.9.0-3-amd64 ... linux /boot/vmlinuz-4.9.0-3-amd64 root=UUID=a300f00d-de7e-42cd-ae2e-6fbb40bf2096 ro i915.modeset=1 i915.lvds_channel_mode=2 i915.lvds_use_ssc=0 echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-4.9.0-3-amd64
Config
Etckeeper [optional]
- OPTIONAL install etckeeper to keep tracks /etc config changes
- - It is not in the install DVD, and it needs git package, so you will need to download etckeeper package and use the install DVD to install its dependencies)
- - Configure it like Git server config backup
Grub
- Persist Grub config to boot Debian with discrete card disabled
- edit /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT varible and add the previous linux boot arguments, it should became like the follow:
GRUB_CMDLINE_LINUX_DEFAULT="radeon.modeset=0 i915.modeset=1 i915.lvds_channel_mode=2 i915.lvds_use_ssc=0"
Note from https://wwwtech.de/articles/2012/jun/gentoo-linux-on-the-macbook-pro-82-late-2011
the lvds_channel_mode=2 tells the i915 driver that there are two LVDS channels and the lvds_use_ssc=0 disables Spread-Spectrum Clocking, which is buggy with some i5/i7 chipsets.
- add a new config file to disable discrete graphic
cat > /etc/grub.d/01_disable_discrete_graphic_card << EOF2 cat << EOF outb 0x728 1 # Switch select outb 0x710 2 # Switch display outb 0x740 2 # Switch DDC outb 0x750 0 # Power down discrete graphics EOF EOF2 chmod 755 /etc/grub.d/01_disable_discrete_graphic_card
- finally, update grub configuration and reboot
update-grub
Wireless
- NOTE: until 2018/03/07 I'm using b43 wireless module, experiencing some problem with the wireless device working intermittently as related here and here, so I'm testing a new kind of installation that is currently working:
- - NEW firmware installation step-to-step (broadcom-sta-dkms), from here:
apt-get update apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms modprobe -r b44 b43 b43legacy ssb brcmsmac bcma # unload conflicting modules, they was blacklisted from the previous apt command modprobe wl # load the wl module, however in my case I need to restart! echo NOTE, the wireless device name can change, in my case from 'wlp3s0b1' to 'wlp3s0' echo PLEASE RESTART IF HAVE ANY PROBLEM!
- - OLD firmware install step-to-step (b43), from here:
apt-get install firmware-b43-installer rmmod b43 modprobe b43
- Now, you can test the wireless using 'nm-applet' tray icon program in a X session to configure a wireless connection
Remote APT repository
- Configure an internet APT repository, optionally a stable repository with backport support
Install others non-free firmware drivers
apt-get install firmware-linux-nonfree
Xorg
- To have the touchpad configured, you may just install the synaptics X module with this command
apt-get install xserver-xorg-input-synaptics
and set your configuration in .xsession config file using the follow command
synclient VertTwoFingerScroll=1 HorizTwoFingerScroll=1 TapButton1=1 TapButton2=3 TapButton3=2
- To have the proper keymap configured under X, you can use the command 'setxkbmap' in the ~/.xsession file like follows:
setxkbmap en, it, br
Keyboard
- To have control of backlight, volume and keyboard light, use pommed
apt-get install pommed
Note, backlight control is very slow, you can edit the /etc/pommed.conf to speed up the backlight changes, editing the respective section as follows
lcd_sysfs { # The sysfs backlight control is a generic interface provided # by the Linux kernel for backlight control on most graphic cards. # The brightness range can differ depending on the hardware. # initial backlight level [12] (0 - 15, -1 to disable) init = -1 # step value (1 - 2) step = 2500 # backlight level when on battery [6] (1 - 15, 0 to disable) on_batt = 2500 }
Jessie-stable
Install
Installed from Debian 8 dvd using efi dvd boot:
- MacbookPro EFI partition must be mounted
- no need of rEFIt
- Grub EFI installed
- At first boot, edit Grub boot option and add the boot parameters 'nomodeset', or a video problem will halt the system
- Install etckeeper, to keep track config changes
- Reconfigure grub with 'nomodeset' option in /etc/default/grub, run update-grub to fix the changes
- Install firmware-linux-nonfree xserver-xorg-video-ati for video and b43-fwcutter firmware-b43-installer for wireless
- WARNING: suspend cause blank monitor on wake up!
Wheezy-stable tested
Install
install rEFIt use dvd to install debian install until boot loader installation boot loader installation go back continue without stop! go to ctrl+alt+F2 chroot /target grub-install /dev/sdX --force update-grub exit continue until reboot on rEFIt prompt, start Partitioning Tool say yes to update MBR and hit enter shutdown your mac restart boot your debian
First boot
Xorg
Modules
add this rows:
Section "Module" # This loads the 3d extrnsion drivers Load "glx" # OpenGL rendering; Load "dri" # direct rendering (NOT nvidia) Load "vbe" # BIOS VESA extensions (get info from board) Load "ddc" # Data Display Chanel (get info from board) Load "int10" # real-mode x86 emulator useful for "vbr" Load "dbe" # Double buffer extension # Load "GLcore" # OpenGL support # OBS: Per quelli che intendono usare aiglx, e' necessario (tra le altre cose) # disabilitare proprio l' estensione GLX dalla configurazone di Xorg. Load "v4l" # Video4Linux # This loads the extension drivers Load "extmod" # Misc. extensions # This loads the font modules Load "freetype" Load "bitmap" EndSection Section "Extensions" Option "Composite" "Enable" EndSection Section "DRI" Mode 0666 EndSection
ATI proprietary driver
from http://wiki.debian.org/ATIProprietary
apt-get install fglrx-control fglrx-driver
add this basic xorg.conf rows
Section "Device" Identifier "ATI" Driver "fglrx" EndSection Section "Screen" Identifier "Default Screen" DefaultDepth 24 SubSection "Display" Viewport 0 0 Virtual 3360 1980 Depth 24 EndSubSection EndSection
test with
xrandr --auto --output LVDS --primary --mode 1440x900 --output DFP1 --mode 1920x1080 --right-of LVDS
Touchpad
/etc/X11/xorg.conf
Section "InputDevice" Identifier "Mouse0" Driver "synaptics" Option "SendCoreEvents" "true" Option "Device" "/dev/input/mice" Option "Protocol" "auto" # use two finger scrolling Option "VertTwoFingerScroll" "1" Option "HorizTwoFingerScroll" "1" # set to 0 if you don't want horizontal scrolling # minimum pressure motion factor #Option "PressureMotionMinZ" "10" # touch and untouch thresholds, higher numbers if you like to push hard Option "FingerHigh" "60" # change to 30 or 40 if you like Option "FingerLow" "20" # FingerPress (Integer) : Above which counts as press #Option "FingerPress" "130" # borders based on output from synclient Option "LeftEdge" "100" Option "RightEdge" "1100" Option "TopEdge" "50" Option "BottomEdge" "700" # speeds, smaller number for a slower mouse Option "MinSpeed" "0.94" # 0.5 is very slow, 1.5 is very fast Option "MaxSpeed" "1.0" # up to 1.5 works ok Option "New AccelFactor" "0.03" Option "AccelFactor" "0.0015" # tap times, change to suit your tapping habits Option "FastTaps" "0" Option "MaxTapMove" "100" Option "MaxTapTime" "180" Option "MaxDoubleTapTime" "200" # don't change these or two finger tap stops working Option "TapButton1" "0" Option "TapButton2" "3" Option "TapButton3" "2" Option "VertEdgeScroll" "0" Option "HorizEdgeScroll" "0" # scroll speed, lower is faster Option "VertScrollDelta" "20" Option "HorizScrollDelta" "20" # Right Bottom Corner Button as right click Option "RTCornerButton" "0" Option "RBCornerButton" "2" # Left Bottom Corner Button as middle click Option "LTCornerButton" "0" Option "LBCornerButton" "3" # Palm Detection: Useful while typing Option "PalmDetect" "on" Option "PalmMinWidth" "10" Option "PalmMinZ" "200" # needed for disabled while typing fix Option "SHMConfig" "on" EndSection
Wireless
Manual firmware install
apt-get install b43-fwcutter firmware-b43-installer modprobe -r b43 export FIRMWARE_INSTALL_DIR="/lib/firmware" wget http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2 tar -xjf broadcom-wl-5.100.138.tar.bz2 b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o rm -rf broadcom-wl-5.100.138 broadcom-wl-5.100.138.tar.bz2 modprobe b43
Suspend with wireless working after resume [needed in Squeeze, maybe in wheezy too]
from Linux support for Broadcom 4331 wireless chip (Macbook Pro 8,1) | Raimar Sandner and Fix Suspend on Macbook Pro 8,1 and 8,2 « BITONIC BLOG
echo SUSPEND_MODULES=\"b43\" >> /etc/pm/config.d/default
References
Apple sad stories
- screen of death stories (offline, but at webarchive) http://web.archive.org/web/20190129132059/http://www.mbp2011.com/
- apple late 2015 repair extension program (offline, but at webarchive) http://web.archive.org/web/20150222161712/http://www.apple.com/support/macbookpro-videoissues/