Вопрос или проблема
system_profiler SPDisplaysDataType | grep Resolution
Для быстрого получения текущего виртуального разрешения одного дисплея Retina:
$ osascript -e 'tell application "Finder" to get bounds of window of desktop'
0, 0, 2048, 1280
Результаты для многомониторовых установок варьируются в зависимости от того, какой дисплей является основным и как они размещены. Узнать больше здесь
Я использую утилиту screenresolution
для получения разрешения экрана:
$ /usr/local/bin/screenresolution get 2>&1 | grep -oE 'Display 0: [0-9]+' | grep -Eo '[0-9]+$'
1920
Я придумал вот такую однострочную команду, чтобы вернуть разрешение основного дисплея, которая не требует установки каких-либо зависимостей в macOS:
system_profiler -json SPDisplaysDataType 2>/dev/null | python -c "import sys,json;d=next(i for i in json.load(sys.stdin)['SPDisplaysDataType'][0]['spdisplays_ndrvs'] if 'spdisplays_main' in i);print d['_spdisplays_pixels']"
Если вам нужно фильтровать на основе различных критериев, просто замените выражение 'spdisplays_main' in i
на более подходящее.
Я знаю, что кто-то в интернете обидится на то, что это действительно зависит от Python… Python поставляется вместе с macOS с Jaguar, так что, даже если вы используете Power Macintosh G3, который не обновлялся последние 15 лет, вам не нужно будет загружать Python.
Я написал displayplacer, который может помочь с этим. Выполните displayplacer list
, и он покажет текущее разрешение (и дополнительную информацию) для всех экранов.
$ 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) - основной дисплей
Rotation: 0
Resolutions for rotation 0:
mode 0: res:3840x2160 hz:60 color_depth:4 <-- текущий режим
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 - поворот встроенного экрана (может вызвать зависание компьютера, но будет повернут после перезагрузки): `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 — это простой способ обработать вывод.
$ displayplacer list | grep -e Resolution: -e Scaling:
Resolution: 3840x2160
Scaling:off
Resolution: 1680x1050
Scaling:on
Также доступно через Homebrew brew tap jakehilborn/jakehilborn && brew install displayplacer
Вот еще один быстрый способ, который присваивает значения X и Y массиву.
$ resolution=(`system_profiler -json SPDisplaysDataType | grep '"_spdisplays_resolution"' | grep -oE '[0-9]+'`)
$ echo $resolution
1920 1080
Ответ или решение
Чтобы узнать текущее разрешение экрана через командную строку в macOS, существует несколько методов. Ниже приведены наиболее распространенные и эффективные способы получить эту информацию.
-
Использование
system_profiler
:
Один из самых простых способов — это командаsystem_profiler
, которая предоставляет детальную информацию о системе. Для получения информации о разрешении экрана используйте следующую команду:system_profiler SPDisplaysDataType | grep Resolution
Эта команда выведет все доступные разрешения экранов.
-
Быстрый способ для отображения разрешения основного экрана с помощью AppleScript:
Вы также можете использовать AppleScript через командуosascript
, чтобы получить границы рабочего стола, что также даст информацию о разрешении:osascript -e 'tell application "Finder" to get bounds of window of desktop'
Результат может выглядеть так:
0, 0, 2048, 1280
, где 2048 и 1280 — это ширина и высота экрана соответственно. -
Использование утилиты
screenresolution
:
Если вы предпочитаете сторонние утилиты, вы можете использоватьscreenresolution
. Установить ее можно через Homebrew:brew install jhford/screenresolution
После установки можно выполнить следующую команду для получения разрешения:
/usr/local/bin/screenresolution get 2>&1 | grep -oE 'Display 0: [0-9]+' | grep -Eo '[0-9]+$'
-
Использование Python для получения разрешения:
Если у вас установлен Python, можно использовать следующую команду, чтобы получить информацию о разрешении:system_profiler -json SPDisplaysDataType 2>/dev/null | python -c "import sys, json; d = next(i for i in json.load(sys.stdin)['SPDisplaysDataType'][0]['spdisplays_ndrvs'] if 'spdisplays_main' in i); print(d['_spdisplays_pixels'])"
-
Утилита
displayplacer
:
Для более продвинутых пользователей, утилитаdisplayplacer
может предоставить много информации о текущем состоянии дисплеев. Установите её с помощью Homebrew:brew tap jakehilborn/jakehilborn && brew install displayplacer
Затем выполните команду:
displayplacer list
Это выведет информацию о текущем разрешении для всех подключённых экранов.
-
Простая обработка вывода:
Если вам нужно извлечь только значения разрешения, можно использовать следующий однострочный скрипт:resolution=(`system_profiler -json SPDisplaysDataType | grep '"_spdisplays_resolution"' | grep -oE '[0-9]+'`) echo $resolution
Это присвоит ширину и высоту в массив и выведет их.
Каждый из этих методов подходит в зависимости от ваших конкретных нужд и предпочтений. Вы можете выбрать любой способ, который наиболее удобен для вас.