How can I get the current display resolution from the command line in OS X?
For a quick reading on the current virtual resolution of a single retina display:
$ osascript -e 'tell application "Finder" to get bounds of window of desktop' 0, 0, 2048, 1280
Results for multi-monitor setups vary based on which display is primary and how they are arranged. Read more here
I use the utility
screenresolution to get the screen resolution:
$ /usr/local/bin/screenresolution get 2>&1 | grep -oE 'Display 0: [0-9]+' | grep -Eo '[0-9]+$' 1920
I wrote displayplacer, which can help with this. Execute
displayplacer list and it will show the current resolution (and more info) for all screens.
$ displayplacer list Persistent screen id: A46D2F5E-487B-CC69-C588-ECFD519016E5 Contextual screen id: 1124216237 Type: 40 inch external screen Resolution: 3840x2160 Hertz: 60 Color Depth: 4 Scaling:off Origin: (0,0) - main display Rotation: 0 Resolutions for rotation 0: mode 0: res:3840x2160 hz:60 color_depth:4 <-- current mode mode 1: res:3840x2160 hz:60 color_depth:8 mode 2: res:3840x2160 hz:30 color_depth:4 ... Persistent screen id: 2960D639-F605-5BB4-A53D-A3263008894C Contextual screen id: 69733451 Type: MacBook built in screen Resolution: 1680x1050 Hertz: N/A Color Depth: 4 Scaling:on Origin: (-1680,1291) Rotation: 0 - rotate internal screen example (may crash computer, but will be rotated after rebooting): `displayplacer "id:2960D639-F605-5BB4-A53D-A3263008894C degree:90"` Resolutions for rotation 0: mode 0: res:1440x900 color_depth:4 scaling:on mode 1: res:1440x900 color_depth:8 scaling:on mode 2: res:720x450 color_depth:4 scaling:on
grep is a simple approach to parse the output.
$ displayplacer list | grep -e Resolution: -e Scaling: Resolution: 3840x2160 Scaling:off Resolution: 1680x1050 Scaling:on
Also available via Homebrew
brew tap jakehilborn/jakehilborn && brew install displayplacer
This is a little one-liner I came up to return the the resolution of the main display, that doesn't require any dependencies to be installed on macOS:
system_profiler -json SPDisplaysDataType 2>/dev/null | python -c "import sys,json;d=next(i for i in json.load(sys.stdin)['SPDisplaysDataType']['spdisplays_ndrvs'] if 'spdisplays_main' in i);print d['_spdisplays_pixels']"
If you need to filter based on different criteria, just replace the
'spdisplays_main' in i expression with a more suitable one.
I know someone on the internet will take offence at the fact that this does in fact depend on Python... Python has come bundled with macOS since Jaguar, so even if you're running a Power Macintosh G3 that hasn't been updated in the last 15 years, you won't need to download Python.