How to set screen resolution with a keyboard shortcut on Retina MBP?

I've found myself switching between the 1440x900 and 1920x1200 "effective resolution" setting depending on what I'm doing (need more space on screen, etc).

  1. Is there a way to toggle between these two modes with a keyboard shortcut?
  2. Can I invoke one mode with a keyboard shortcut?
  3. Alternatively, can this be done via an AppleScript (and therefore bound to a keyboard shortcut)?

QuickRes (4 USD)

Based on your description, QuickRes appears to perfectly accomplish what you're trying to do. You can set multiple (up to 8) resolutions in its preferences and assign keyboard shortcuts to them. To access preferences, launch QuickRes and Ctrl-click (right-click) the icon that will appear in the menu bar. Note that Mac will give you an error and claim that it is from an "unidentified developer"; simply Ctrl-click the app's icon in Finder and click open.

Screenshots are below:

enter image description here

QuickRes options. Click Preferences. Also, after you set resolutions, you may simply click this icon normally to toggle between resolutions.

enter image description here

Resolutions pane of QuickRes preferences. You may add more preferred resolutions in "Advanced." Also, because this was taken on an iMac, you will have different resolution options for your MacBook Pro Retina.

enter image description here

Shortcuts pane of QuickRes preferences. Right now, my shortcut is Command-Option-R. You can change this, of course.

enter image description here

In the Advanced pane, you can set how many resolutions you wish to toggle. The shortcut only works when you have QuickRes open (it's a lightweight app, so don't worry about resources), so I would recommend selecting "Open QuickRes on Login" to get it out of your way.


I use an AppleScript that toggles through 3 of the 'scale' options depending on the current option...

local index1, index2, index3

set index1 to 3 -- 1440 x 900 (Best for Retina)
set index2 to 4 -- 1680 x 1050
set index3 to 5 -- 1920 x 1200 (More Space)

-- Launch "System Preferences", open the "Displays" options and change to the "Display" tab
tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.displays"
    reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
end tell

local indexToUse

-- Now lets make the necessary changes
tell application "System Events"
    tell window "Color LCD" of application process "System Preferences" of application "System Events"
        tell tab group 1

            -- Click the "Scaled" radio button
            click radio button "Scaled"

            tell radio group 1 of group 1
                -- Depending on what scale option/index is current selected, set the appropriate new option/index to use
                if (value of radio button index1) is true then
                    set indexToUse to index2
                else if (value of radio button index2) is true then
                    set indexToUse to index3
                else
                    set indexToUse to index1
                end if

                -- Click the radio button for the new scale option/index
                click radio button indexToUse
            end tell

        end tell

        -- If option/index 1 is selected a warning prompt is displayed, click the OK button to dismiss the prompt
        if indexToUse = 1 then
            click button "OK" of sheet 1
        end if
    end tell
end tell

-- Quit "System Preferences"
quit application "System Preferences"

I don't have a MacBook Pro with a Retina display, so you probably have to change the numbers of the rows. I don't know if this would work with multiple displays.

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events" to tell process "System Preferences"
    tell tab group 1 of window 1
        click radio button "scaled"
        tell table 1 of scroll area 1
            if selected of row 1 then
                set selected of row 2 to true
            else
                set selected of row 1 to true
            end if
        end tell
    end tell
end tell
quit application "System Preferences"

You can give the script a shortcut with Alfred or FastScripts or by creating an Automator service.