Как получить текущее разрешение экрана из командной строки на OS X?

Вопрос или проблема

Как я могу получить текущее разрешение дисплея из командной строки в OS X?

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, существует несколько методов. Ниже приведены наиболее распространенные и эффективные способы получить эту информацию.

  1. Использование system_profiler:
    Один из самых простых способов — это команда system_profiler, которая предоставляет детальную информацию о системе. Для получения информации о разрешении экрана используйте следующую команду:

    system_profiler SPDisplaysDataType | grep Resolution

    Эта команда выведет все доступные разрешения экранов.

  2. Быстрый способ для отображения разрешения основного экрана с помощью AppleScript:
    Вы также можете использовать AppleScript через команду osascript, чтобы получить границы рабочего стола, что также даст информацию о разрешении:

    osascript -e 'tell application "Finder" to get bounds of window of desktop'

    Результат может выглядеть так: 0, 0, 2048, 1280, где 2048 и 1280 — это ширина и высота экрана соответственно.

  3. Использование утилиты screenresolution:
    Если вы предпочитаете сторонние утилиты, вы можете использовать screenresolution. Установить ее можно через Homebrew:

    brew install jhford/screenresolution

    После установки можно выполнить следующую команду для получения разрешения:

    /usr/local/bin/screenresolution get 2>&1 | grep -oE 'Display 0: [0-9]+' | grep -Eo '[0-9]+$'
  4. Использование 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'])"
  5. Утилита displayplacer:
    Для более продвинутых пользователей, утилита displayplacer может предоставить много информации о текущем состоянии дисплеев. Установите её с помощью Homebrew:

    brew tap jakehilborn/jakehilborn && brew install displayplacer

    Затем выполните команду:

    displayplacer list

    Это выведет информацию о текущем разрешении для всех подключённых экранов.

  6. Простая обработка вывода:
    Если вам нужно извлечь только значения разрешения, можно использовать следующий однострочный скрипт:

    resolution=(`system_profiler -json SPDisplaysDataType | grep '"_spdisplays_resolution"' | grep -oE '[0-9]+'`)
    echo $resolution

    Это присвоит ширину и высоту в массив и выведет их.

Каждый из этих методов подходит в зависимости от ваших конкретных нужд и предпочтений. Вы можете выбрать любой способ, который наиболее удобен для вас.

Оцените материал
Добавить комментарий

Капча загружается...