IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    解决Macbook盖上屏幕后不会睡眠

    Stupid ET发表于 2014-07-12 10:32:00
    love 0

    很久以前,就听到许多人说,用Macbook都是从来不关机,平时都是直接合上屏幕塞到包里。于是我也这样了,不过后来突然发现,塞到包里第二天早上起来开机的时候,就发现Macbook已经关机了。重新开机的时候,就提示系统没有正常关机。

    晚上有时候回到家里,将Macbook拿出来,就发现温度非常高。看上去合上盖子后,并没有sleep。

    想起很久之前,我都是直接合上屏幕就走,不过后来突然就出现了合上屏幕塞包里后,过热关机。这个是为什么呢?难道是我升级系统后,系统出了什么bug?

    这个问题我纠结了挺久的,问了其他人,都没有同样的问题,于是以为是我的硬件出了问题。隔了很久,终于找到了问题所在。

    有时候,我用pmset的输出是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    @  ~  % pmset -g
    Active Profiles:
    Battery Power           -1*
    AC Power                -1
    Currently in use:
     standbydelay         10800
     standby              1
     halfdim              1
     hibernatefile        /var/vm/sleepimage
     darkwakes            0
     disksleep            10
     sleep                1
     autopoweroffdelay    14400
     hibernatemode        3
     autopoweroff         1
     ttyskeepawake        1
     displaysleep         2
     acwake               0
     lidwake              1
    

    有时候,输出是这样,可以看到sleep那行(sleep prevented by coreaudiod)。也就是coreaudiod阻止sleep。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    @  ~  % pmset -g
    Active Profiles:
    Battery Power           -1*
    AC Power                -1
    Currently in use:
     standbydelay         10800
     standby              1
     halfdim              1
     hibernatefile        /var/vm/sleepimage
     darkwakes            0
     disksleep            10
     sleep                1 (sleep prevented by coreaudiod)
     autopoweroffdelay    14400
     hibernatemode        3
     autopoweroff         1
     ttyskeepawake        1
     displaysleep         2
     acwake               0
     lidwake              1
    

    然后看看assertion,这个时候,PreventUserIdleSystemSleep这个为1,就是不会sleep了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    @  ~  % pmset -g assertions
    14-7-12 GMT+811:19:57
    Assertion status system-wide:
       BackgroundTask                 0
       PreventDiskIdle                0
       ApplePushServiceTask           0
       UserIsActive                   1
       PreventUserIdleDisplaySleep    0
       InteractivePushServiceTask     0
       PreventSystemSleep             0
       ExternalMedia                  0
       PreventUserIdleSystemSleep     1
       NetworkClientActive            0
    Listed by owning process:
       pid 72(hidd): [0x0000000a000001b1] 01:08:21 UserIsActive named: "com.apple.iohideventsystem.queue.tickle"
            Timeout will fire in 91 secs Action=TimeoutActionRelease
       pid 323(coreaudiod): [0x0000000100000281] 00:04:07 NoIdleSleepAssertion named: "com.apple.audio.'AppleHDAEngineOutput:1B,0,1,1:0'.noidlesleep"
    No kernel assertions.
    

    于是看看什么程序用到声音,只有chrome里面开了douban.fm,不过此时没有在播放音乐。然后关闭douban.fm的tab,然后PreventUserIdleSystemSleep就变回0了。

    看来就是估计我每天听douban.fm惹的祸。

    于是继续尝试在chrome里面随便打开一个视频网站看视频,发现此时PreventUserIdleSystemSleep又变成1了。

    看来应该只要有会播放声音的flash在,就会阻止Macbook睡眠。

    另外,想itune,GarageBand等程序开着的时候,也可能会阻止sleep。所以,以后盖屏幕前,先处理掉这些程序,以免发生意外,要不然过热多几次,不知道Macbook会不会就烧坏了-.–

    找到问题了唉,看来以后小心为妙。


    Update:

    2014-07-27

    后来发现,有时候打开虚拟机,PreventSystemSleep会变为1,此时合上屏幕后也不会睡眠。所以这个时候,最好还是把虚拟机关掉。

    后来发现,即便是关掉了所有会阻止睡眠的程序,没插电而且确定已经睡眠,发现放一个晚上后,还是会自动开机而且会很热,而且掉了很多电。

    在shell中输入syslog -k Sender kernel -k Message Req Wake,看到茫茫多的

    1
    
    Jul 24 03:29:00 Stupid-ET kernel[0] : Wake reason: ?
    

    就是每分钟都Wake一次。仔细看日志,每次都是 sleep 3个小时后,就会开始不停地Wake up,然后reason: ?。不知道为啥,可能Mac OS有bug。那么现在如何解决呢?

    现在的主要问题就是:sleep 3个小时后,就不能再自动sleep了。3个小时 = 3600 * 3 = 10800秒。

    我们在看pmset的时候,有行standbydelay 108001。看上去可能在尝试写hibernation image的时候出错,导致无法sleep。

    1
    
    standbydelay specifies the delay, in seconds, before writing the hibernation image to disk and powering off memory for Standby.
    

    于是先将该值调大,调到7天sudo pmset -a standbydelay 604800,然后就不会醒来了。


    1. Understanding and choosing between Mac sleep, standby or hibernate↩


    PermaLink: http://everet.org/macbook-prevent-sleep.html
    Tags: Mac


沪ICP备19023445号-2号
友情链接