6

When I check my power management assertions (MacBook Pro running macOS Sierra), I see the following line:

$ sudo pmset -g assertions
...
Idle sleep preventers: IODisplayWrangler

What is IODisplayWrangler and what does it mean that it is listed as an "idle sleep preventer"?

  • I have this problem now. The screen stays on, screensaver doesn't work, it doesn't lock after inactivity. For me the only solution is to restart. See apple.stackexchange.com/questions/126046/… – SPRBRN Jan 1 '18 at 16:29
  • @SPRBRN How do you know that's related to the IODisplayWrangler? It may be totally benign, I just was curious what it meant. – augurar Jan 3 '18 at 4:49
  • I get the same result when doing the pmset command. This happens after using a bluetooth headphone - well that's my best guess up til now. Restarting solves this, but that's not a good solution. It seems like a bug to me. – SPRBRN Jan 3 '18 at 10:55
  • @SPRBRN I have confirmed that this message is a completely normal, benign, and expected message and not indicative of any issue (see my answer below for details). Your bluetooth issue sounds completely unrelated. – augurar Jan 4 '18 at 19:29
5

It turns out this part of the OS is open source. (Link is for macOS 10.12.6, but other versions are available.)

Reading the code reveals that the IODisplayWrangler is a class that interfaces with the power management system in order to manage display brightness. It detects user activity and uses this to determine when to dim, turn on, or turn off displays. When the display is on, the class sets a kernel assertion that prevents idle sleep. So seeing IODisplayWrangler as an idle sleep preventer is normal when the display is on.

In the developers' own words:

/*
    This is the Power Management policy-maker for the displays.  It senses when
    the display is idle and lowers power accordingly.  It raises power back up
    when the display becomes un-idle.

    It senses idleness with a combination of an idle timer and the "activityTickle"
    method call.  "activityTickle" is called by objects which sense keyboard activity,
    mouse activity, or other button activity (display contrast, display brightness,
    PCMCIA eject).  The method sets a "displayInUse" flag.  When the timer expires,
    this flag is checked.  If it is on, the display is judged "in use".  The flag is
    cleared and the timer is restarted.

    If the flag is off when the timer expires, then there has been no user activity
    since the last timer expiration, and the display is judged idle and its power is
    lowered.

    [...]

    This driver calls the drivers for each display and has them move their display
    between various power states. When the display is idle, its power is dropped
    state by state until it is in the lowest state.  When it becomes un-idle it is
    powered back up to the state where it was last being used.

    [...]

    We register with Power Management only so that we can be informed of changes in
    the Power Management aggressiveness factor.  We don't really have a device with
    power states so we implement the absolute minimum. The display drivers themselves
    are part of the Power Management hierarchy under their respective frame buffers.
*/

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .