待机和关机问题在Macbook Pro 11,4上存在。

我几周前成功地在我的2015年中期(11,4)Macbook Pro上实现了Ubuntu Desktop 14.04和Mac OS 10.10.4(Yosemite)的双启动。但是出现了一些问题,机器在关机和待机时会卡住。具体来说:
- 命令机器关机(例如,sudo poweroff,sudo shutdown now等)会触发正常的关机过程,直到最后一行显示“System will now halt.”。然而,在这里,系统会冻结,唯一的解决办法是手动按住电源按钮几秒钟进行硬关机。 - 命令机器待机会导致屏幕变黑且无响应。唯一的解决办法是手动按住电源按钮几秒钟进行硬关机。重新启动后,我会收到一个“System Error Detected”通知。
以下是一些相关说明:
MBP正在运行集成的Intel Iris Pro和AMD Radeon R9 M370X组合进行图形处理,我正在使用来自fglrx-updates的专有驱动程序。我知道在早期版本的Ubuntu中,与此类似的问题源于专有图形驱动程序。然而,切换回开放的XOrg驱动程序并通过apt-get清除fglrx-updates也无法解决任何一个问题。
如果我尝试休眠而不是待机,显示器会在几秒钟后返回到桌面(就像从休眠中唤醒一样)。
重新启动正常工作。实际上,我在Ubuntu上能够进行干净的关机的唯一方法是重新启动,然后从rEFInd关机或者启动到OS X并关机。
我不确定应该发布哪些日志最有意义(这是我第一次提问),但如果有人有任何见解,我很乐意尽快发布正确的日志。
更新1:将其置于待机状态实际上会导致屏幕关闭,然后立即打开,然后再次关闭并停止响应。当返回到Ubuntu时,我收到以下系统错误信息:
ProblemType: KernelOops
Annotation: This occured during a previous suspend and prevented it from resuming properly.
Architecture: amd64
Date: Thu Sep 10 22:50:55 2015
DistroRelease: Ubuntu 14.04
ExecutablePath: /usr/share/apport/apportcheckresume
ExecutableTimestamp: 1439395460
Failure: suspend/resume
InterpreterPath: /usr/bin/python3.4
Package: linux-image-3.19.0-25-generic 3.19.0-25.26~14.04.1

我也附上了下面的睡眠记录。
Initial commandline parameters: 
Thu Sep 10 22:50:05 EDT 2015: Running hooks for suspend.
Running hook /usr/lib/pm-utils/sleep.d/000kernel-change suspend suspend:
/usr/lib/pm-utils/sleep.d/000kernel-change suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/000record-status suspend suspend:
/usr/lib/pm-utils/sleep.d/000record-status suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/00logging suspend suspend:
Linux fruit 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Module                  Size  Used by
nvram                  16384  0 
msr                    16384  0 
btusb                  40960  0 
joydev                 20480  0 
bcm5974                20480  0 
pci_stub               16384  1 
vboxpci                24576  0 
vboxnetadp             28672  0 
vboxnetflt             28672  0 
vboxdrv               450560  3 vboxnetadp,vboxnetflt,vboxpci
xt_CHECKSUM            16384  1 
iptable_mangle         16384  1 
ipt_MASQUERADE         16384  1 
nf_nat_masquerade_ipv4    16384  1 ipt_MASQUERADE
iptable_nat            16384  1 
nf_conntrack_ipv4      16384  1 
nf_defrag_ipv4         16384  1 nf_conntrack_ipv4
nf_nat_ipv4            16384  1 iptable_nat
nf_nat                 24576  2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack          106496  4 nf_nat,nf_nat_ipv4,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
xt_tcpudp              16384  5 
bridge                110592  0 
stp                    16384  1 bridge
llc                    16384  2 stp,bridge
iptable_filter         16384  1 
ip_tables              28672  3 iptable_filter,iptable_mangle,iptable_nat
x_tables               36864  6 xt_CHECKSUM,ip_tables,xt_tcpudp,ipt_MASQUERADE,iptable_filter,iptable_mangle
applesmc               20480  0 
input_polldev          16384  1 applesmc
x86_pkg_temp_thermal    16384  0 
intel_powerclamp       20480  0 
coretemp               16384  0 
kvm_intel             151552  0 
kvm                   479232  1 kvm_intel
brcmfmac              278528  0 
brcmutil               16384  1 brcmfmac
lpc_ich                24576  0 
cfg80211              524288  1 brcmfmac
bdc_pci                16384  0 
mei_me                 20480  0 
mei                    90112  1 mei_me
sbs                    16384  0 
sbshc                  16384  1 sbs
apple_gmux             16384  0 
mac_hid                16384  0 
snd_hda_codec_cirrus    20480  1 
snd_hda_codec_generic    69632  1 snd_hda_codec_cirrus
snd_hda_codec_hdmi     53248  1 
snd_hda_intel          32768  10 
snd_hda_controller     32768  1 snd_hda_intel
snd_hda_codec         143360  5 snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_intel,snd_hda_controller,snd_hda_codec_cirrus
snd_hwdep              20480  1 snd_hda_codec
fglrx               12460032  127 
snd_pcm               106496  4 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel,snd_hda_controller
snd_seq_midi           16384  0 
snd_seq_midi_event     16384  1 snd_seq_midi
snd_rawmidi            32768  1 snd_seq_midi
snd_seq                65536  2 snd_seq_midi_event,snd_seq_midi
snd_seq_device         16384  3 snd_seq,snd_rawmidi,snd_seq_midi
snd_timer              32768  2 snd_pcm,snd_seq
snd                    86016  31 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_hda_codec_cirrus
apple_bl               16384  1 apple_gmux
amd_iommu_v2           20480  1 fglrx
soundcore              16384  2 snd,snd_hda_codec
shpchp                 40960  0 
bnep                   20480  2 
rfcomm                 69632  0 
bluetooth             491520  11 bnep,btusb,rfcomm
binfmt_misc            20480  1 
parport_pc             32768  0 
ppdev                  20480  0 
lp                     20480  0 
parport                45056  3 lp,ppdev,parport_pc
nls_iso8859_1          16384  1 
dm_crypt               24576  1 
hid_generic            16384  0 
hid_apple              16384  0 
crct10dif_pclmul       16384  0 
crc32_pclmul           16384  0 
ghash_clmulni_intel    16384  0 
aesni_intel           172032  2 
aes_x86_64             20480  1 aesni_intel
lrw                    16384  1 aesni_intel
gf128mul               16384  1 lrw
glue_helper            16384  1 aesni_intel
ablk_helper            16384  1 aesni_intel
cryptd                 20480  4 ghash_clmulni_intel,aesni_intel,ablk_helper
uas                    24576  0 
usb_storage            69632  1 uas
ahci                   36864  3 
usbhid                 53248  0 
libahci                32768  1 ahci
hid                   110592  3 hid_generic,usbhid,hid_apple
video                  20480  1 apple_gmux
             total       used       free     shared    buffers     cached
Mem:      16306696    1188872   15117824      22748      47276     365684
-/+ buffers/cache:     775912   15530784
Swap:      4194300          0    4194300
/usr/lib/pm-utils/sleep.d/00logging suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/00powersave suspend suspend:
/usr/lib/pm-utils/sleep.d/00powersave suspend suspend: success.

Running hook /etc/pm/sleep.d/10_grub-common suspend suspend:
/etc/pm/sleep.d/10_grub-common suspend suspend: success.

Running hook /etc/pm/sleep.d/10_unattended-upgrades-hibernate suspend suspend:
/etc/pm/sleep.d/10_unattended-upgrades-hibernate suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/49tlp suspend suspend:
/usr/lib/pm-utils/sleep.d/49tlp suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/50unload_alx suspend suspend:
/usr/lib/pm-utils/sleep.d/50unload_alx suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/60_wpa_supplicant suspend suspend:
Failed to connect to non-global ctrl_ifname: (null)  error: No such file or directory
/usr/lib/pm-utils/sleep.d/60_wpa_supplicant suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/75modules suspend suspend:
/usr/lib/pm-utils/sleep.d/75modules suspend suspend: not applicable.

Running hook /usr/lib/pm-utils/sleep.d/90clock suspend suspend:
/usr/lib/pm-utils/sleep.d/90clock suspend suspend: not applicable.

Running hook /usr/lib/pm-utils/sleep.d/94cpufreq suspend suspend:
/usr/lib/pm-utils/sleep.d/94cpufreq suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/95anacron suspend suspend:
stop: Unknown instance: 
/usr/lib/pm-utils/sleep.d/95anacron suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/95hdparm-apm suspend suspend:
/usr/lib/pm-utils/sleep.d/95hdparm-apm suspend suspend: not applicable.

Running hook /usr/lib/pm-utils/sleep.d/95led suspend suspend:
/usr/lib/pm-utils/sleep.d/95led suspend suspend: not applicable.

Running hook /usr/lib/pm-utils/sleep.d/98video-quirk-db-handler suspend suspend:
ATI Catalyst driver detected, not using quirks.
/usr/lib/pm-utils/sleep.d/98video-quirk-db-handler suspend suspend: success.

Running hook /usr/lib/pm-utils/sleep.d/99video suspend suspend:
kernel.acpi_video_flags = 0
/usr/lib/pm-utils/sleep.d/99video suspend suspend: success.

Running hook /etc/pm/sleep.d/novatel_3g_suspend suspend suspend:
/etc/pm/sleep.d/novatel_3g_suspend suspend suspend: success.

Thu Sep 10 22:50:06 EDT 2015: performing suspend

更新2:看起来这个问题可能不仅限于Ubuntu。我不确定如何开始调试它。有什么想法吗?

https://forums.gentoo.org/viewtopic-p-7772846.html?sid=7ab6dd35c3dfc7a38a2c1b02edb15044

https://bbs.archlinux.org/viewtopic.php?id=199388


1这听起来像是你的Mac硬件与Ubuntu提供的ACPI命令不同导致的问题。我想知道是否还有其他人遇到了这个问题,同时也想知道你是如何让它正常工作的... - Daniel
我刚刚购买了同款型号,遇到了同样的问题。 - E3L_1
同样的问题,MBP 11,5 关闭盖子会导致两个问题:崩溃,重新打开需要强制关机(按电源按钮)才能重新启动,并且在盖子关闭时笔记本变得非常热。这非常令人讨厌,因为我需要经常在课程之间移动我的笔记本电脑。 - Tom B
我也遇到了这个问题,有任何更新吗? - Naftuli Kay
2还会影响到型号为11,4的15英寸Retina屏幕(efi引导的Ubuntu 15.10)。 - tomodachi
这正如@tomodachi所描述的那样,对我的15英寸Retina屏幕产生了影响。 - danihodovic
2请查看此页面,该页面跟踪Macbook Pro 11,5的问题。这个问题目前还没有解决,但是一些其他问题在最近的内核中已经解决了。 - Aleksandr Dubinsky
@TomB Xubuntu 15.10默认情况下禁用了在MBP关闭盖子时的挂起功能。它会关闭显示屏并锁定会话。至少这是一个折中的解决办法.... - Aleksandr Dubinsky
我通过使用uswusp成功使休眠功能正常工作。在安装过程中,我注意到它对skl_guc_ver4固件提出了抱怨,所以我从Intel的skl_guc_ver4_3下载页面下载了该固件,还下载了"Intel Graphics Installer"。我正在Intel-only MacBook Pro 11,5上运行Xubuntu 15.10,内核版本为4.4.0rc7。关机仍然无法正常工作,并且也影响到了休眠功能,但是我发现按下Control+Option+Shift+Power比长按电源按钮更快捷。 - Aleksandr Dubinsky
你有按照这些说明进行操作吗? - earthmeLon
有人在这方面有什么运气吗?我也遇到了同样的问题。我的MBP 11,5装有Ubuntu 14.04和ReFind。 - Steve-B
2个回答

原來這現在是MacbookPro 11,4和11,5的已記錄問題,位於最新的主線Linux內核中(我想在撰寫本文時,版本號為4.6)。有一個解決方法需要補丁/編譯自定義內核。該解決方法位於https://bugzilla.kernel.org/show_bug.cgi?id=103211的第172條評論中。具體來說,
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index ee72ebe..d3ec833 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2775,6 +2775,13 @@ static void quirk_hotplug_bridge(struct pci_dev *dev)

 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HINT, 0x0020, quirk_hotplug_bridge);

+static void quirk_hotplug_bridge_skip(struct pci_dev *dev)
+{
+       dev->is_hotplug_bridge = 0;
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x8c10, quirk_hotplug_bridge_skip);
+
 /*
  * This is a quirk for the Ricoh MMC controller found as a part of
  * some mulifunction chips.

从评论中看,似乎有一些人已经确认在Ubuntu 14.04和16.04上使用不同的4.X版本的Linux内核确实有效。我正在16.04上进行测试,如果一切正常,我将接受这个答案。如果还有其他人愿意在14.04上使用早期内核版本(3.X)确认此补丁,请在下方评论。
更新:我可以确认,在Ubuntu 16.04上,使用Kernel v4.4.0-28-generic是有效的。我按照以下步骤进行操作:
- 从Ubuntu内核git仓库获取正确的内核(链接1) - 手动添加quirk_hotplug_bridge(...)方法和DECLARE_PCI_FIXUP_HEADER(...)调用来实现上述补丁 - 编译内核并通过dpkg安装它(链接2)
一切似乎都正常工作。

这似乎已经包含在较新的4.4内核版本中(至少从4.4.0-63-generic开始)。 - Christian Fritz
我在Ubuntu 16.04上使用4.4.0-64仍然存在挂起问题。我猜这一定是由于其他问题引起的 :-( - Brad Pitcher

我在https://joshtronic.com/2017/03/13/getting-suspend-in-linux-working-on-a-macbook-pro/上找到了一个解决方案-对我来说有效(在16.04LTS上),是将以下内容添加到/etc/rc.local文件中。
#!/bin/sh -e
echo LID0 > /proc/acpi/wakeup
echo XHC1 > /proc/acpi/wakeup
exit 0

我建议在将其添加到文件之前先手动测试一下。可以通过运行sudo -i,然后执行各个命令来完成这个操作。

echo LID0 > /proc/acpi/wakeup 只是简单地切换是否应该由 LID0 引起唤醒。


一个令人沮丧的副作用是,当打开笔记本电脑盖子时,它将无法启动。