Гид по технологиям

Как получить и использовать разрешение экрана в Linux

7 min read Linux Обновлено 02 Dec 2025
Получение разрешения экрана в Linux
Получение разрешения экрана в Linux

Быстрые ссылки

  • Зачем менять разрешение экрана
  • Использование команды xrandr
  • Использование команды xdpyinfo
  • Включение в скрипт
  • Разделение X и Y разрешений
  • Держите всё просто

Краткое содержание

  • Для получения и установки разрешения экрана используйте xrandr; для подробной информации — xdpyinfo.
  • Примеры show, как извлечь значение разрешения через awk: xrandr | awk -F'[ +]' '/primary/{print $4}' и xdpyinfo | awk '/dimensions/ {print $2}'.
  • В скриптах результат можно поместить в переменную и при необходимости разделить на ширину (X) и высоту (Y).

Зачем менять разрешение экрана

Иногда скрипт должен знать текущее разрешение — чтобы:

  • Передать параметры в графическое приложение при запуске.
  • Убедиться, что изменение разрешения прошло успешно.
  • Подстроить поведение программы под устройство с ограниченными ресурсами (например, запуск игр в пониженном разрешении на старом железе).

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

Важно: современные дистрибутивы могут по умолчанию использовать Wayland вместо Xorg. В таких случаях xrandr/xdpyinfo могут быть недоступны или работать неправильно — см. раздел «Альтернативы и совместимость».

Использование команды xrandr

Команда xrandr может как установить, так и запросить текущие видеорежимы. Без параметров она выводит список поддерживаемых режимов:

xrandr

Стандартный вывод команды xrandr в Linux

В выводе предпочтительные режимы помечаются знаком «+», а текущий режим — звёздочкой «». Если у монитора несколько режимов с «+», текущим будет лишь один с «». Вместо парсинга всей части вывода через grep/sed, проще извлечь строку, где упоминается «connected primary», — в ней уже содержится текущая информация.

Простой и компактный вариант через awk:

xrandr | awk -F'[ +]' '/primary/{print $4}'

Как это работает:

  • -F'[ +]' задаёт разделители полей: пробел и символ +.
  • /primary/ отбирает линию, где встречается слово primary (обычно строка с информацией о подключённом основном экране).
  • {print $4} выводит четвёртое поле — там обычно находится строка вида 1920x1080.

Этот подход уменьшает зависимость от дополнительных вызовов (grep/sed) и работает быстро в скриптах.

Пример использования для установки режима (опционально):

# Найти режим и установить его (если нужно) — пример, требует существующего режима
MODE=$(xrandr | awk -F'[ +]' '/primary/{print $4}')
# Расшифровка и установка происходят отдельными шагами в зависимости от задачи

Использование команды xdpyinfo

Команда xdpyinfo выдаёт подробную информацию о X-сервере и экране. Её вывод длинный, но содержит явную строку с ключевым словом “dimensions”.

xdpyinfo

Стандартный вывод команды xdpyinfo

Чтобы получить только строку с текущим разрешением:

xdpyinfo | awk '/dimensions/ {print $2}'

Здесь awk по умолчанию использует пробелы в качестве разделителя, а поле $2 содержит значение вида 1920x1080.

Преимущество xdpyinfo — более прямое нахождение поля с помощью стандартного разделителя, но сама команда может выводить гораздо больше информации, поэтому её лучше использовать при необходимости дополнительных деталей.

Включение в скрипт

Чтобы поместить получение разрешения в скрипт Bash, достаточно присвоить вывод команды переменной. Сохраните в файл get_res.sh:

#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

echo $current_res

Сделайте файл исполняемым:

chmod +x get_res.sh

Запуск:

./get_res.sh

Вы увидите разрешение в формате ШИРИНAxВЫСОТА.

Разделение X и Y в скрипте

Чтобы получить отдельно ширину и высоту, используйте дополнительный разбор строки:

#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

current_x=$(echo $current_res | awk -F'[ x]' '{print $1}')
current_y=$(echo $current_res | awk -F'[ x]' '{print $2}')

echo "full: $current_res"
echo "width: $current_x"
echo "height: $current_y"

Затем: chmod +x get_x_y.sh и ./get_x_y.sh.

Почему мы используем -F'[ x]'? Потому что разделителем может выступать символ x, возможно окружённый пробелами (иногда вывод содержит 1920 x 1080). Это делает парсинг устойчивее.

Когда метод может не сработать

  • Wayland: многие современные окружения (например, Fedora с Gnome) по умолчанию используют Wayland; xrandr и xdpyinfo относятся к X11 и могут быть недоступны.
  • Несколько мониторов: если активен не-primary монитор или вы используете несколько экранов, поиск только по primary вернёт параметры только основного дисплея.
  • Нет прав на X-сервер: запуск скрипта от удалённого пользователя без перенаправления DISPLAY или без Xauthority не даст результата.
  • Неоднородный вывод: некоторые дисплеи/драйверы могут выводить нестандартные строки, поэтому разбор может дать неверный результат.

Важно: не полагайтесь только на один метод во всех окружениях — добавьте проверки и альтернативы.

Альтернативы и совместимость

  1. Wayland

    • Инструменты для Wayland другие: sway, wlroots, weston и специфичные утилиты вроде wlr-randr/wayland-info. Для Gnome на Wayland можно использовать GSettings или DBus вызовы.
    • Если система использует Wayland, xrandr/xdpyinfo часто либо не показывают корректные данные, либо сообщают ошибку.
  2. wmctrl / xwininfo

    • Эти утилиты помогают получить информацию о окнах и мониторах, но не всегда удобны для одного общего разрешения.
  3. Display Managers и DE API

    • Многие окружения рабочего стола (GNOME, KDE) предлагают собственные API/инструменты для управления выводом и разрешением. В некоторых случаях лучше использовать их через DBus или соответствующие утилиты.

Совет: в скрипте сперва попытайтесь получить данные через xdpyinfo/xrandr, затем — при ошибке — попробовать Wayland-ориентированные утилиты или DE-API.

Мини‑методика: встроить в надёжный скрипт (шаги)

  1. Проверить переменную окружения DISPLAY — если она не задана, попытайтесь её установить или завершите с понятной ошибкой.
  2. Попытаться получить разрешение через xdpyinfo. Если успех — обработать результат.
  3. Если xdpyinfo не доступен, попытаться xrandr.
  4. В случае ошибок — логировать причину и, при возможности, попытаться Wayland-утилитами.
  5. Валидация: проверить, что полученное значение соответствует формату числоxчисло.
  6. Разделить на current_x, current_y и использовать как входные параметры для дальнейших шагов.

Пример псевдо-алгоритма в Bash:

# проверка DISPLAY
if [ -z "$DISPLAY" ]; then
  echo "DISPLAY не задан; невозможно получить разрешение" >&2
  exit 1
fi

# попытка через xdpyinfo
if command -v xdpyinfo >/dev/null 2>&1; then
  res=$(xdpyinfo | awk '/dimensions/ {print $2}')
fi

# fallback на xrandr
if [ -z "$res" ] && command -v xrandr >/dev/null 2>&1; then
  res=$(xrandr | awk -F'[ +]' '/primary/{print $4}')
fi

# валидация
if [[ $res =~ ^[0-9]+x[0-9]+$ ]]; then
  : # всё хорошо
else
  echo "Не удалось распознать разрешение: $res" >&2
  exit 2
fi

Чек‑листы по ролям

Для разработчика приложений GUI:

  • Убедиться, что скрипт реагирует на состояние нескольких мониторов.
  • Предусмотреть переключение между X11 и Wayland.
  • Логировать ошибочные значения и fallback-пути.

Для игрока/пользователя, собирающего автоматическую смену режима:

  • Создать простую оболочку с меню выбора требуемого разрешения.
  • Сохранять текущий режим и давать возможность возврата.
  • Тестировать режимы перед применением в играх.

Для системного администратора:

  • Включить проверку DISPLAY и прав доступа к X-серверу.
  • Автоматизировать проверку драйверов и профилей мониторов.
  • Включить уведомления при неудачных попытках изменить разрешение.

Тесты и критерии приёмки

Критерии приёмки:

  • Скрипт корректно извлекает разрешение в формате WxH на X11.
  • Скрипт корректно разбивает значение на width/height и эти переменные доступны для дальнейших действий.
  • При отсутствии X11 скрипт возвращает понятную ошибку или использует альтернативу (Wayland), если это предусмотрено.

Минимальные тесты:

  • В среде X11: проверка с одним монитором.
  • В среде X11: проверка с несколькими мониторами (primary и non-primary).
  • В среде Wayland: ожидаемый отказ или альтернативный путь.
  • Отсутствие DISPLAY: фиксированное поведение.

Диагностика и восстановление (runbook)

  1. Симптом: скрипт возвращает пустую строку.

    • Проверьте DISPLAY: echo $DISPLAY.
    • Проверьте доступность утилит: which xdpyinfo xrandr.
    • Посмотрите вывод xdpyinfo/xrandr вручную.
  2. Симптом: получено неверное значение (не числовое).

    • Проверьте локаль и символы-разделители в выводе.
    • Попробуйте отладочные выводы: set -x в скрипте.
  3. Откат: если изменение разрешения ломает рабочий процесс, верните сохранённый режим через xrandr или DE-инструменты. Всегда сохраняйте «старый» режим перед изменением.

Примеры использования: сценарии

  • Автоматический запуск игры: проверять current_x >= 1280 до запуска в оконном режиме.
  • Скриншот‑утилита: подстраивать команду захвата по высоте и ширине монитора.
  • Удалённая настройка рабочих мест: скрипт проверяет разрешение и устанавливает политики масштабирования.

Ментальные модели и эвристики

  • «Первое — проверить DISPLAY»: без корректного DISPLAY любые GUI-операции бессмысленны.
  • «Fallback сверху вниз»: сначала использовать наиболее точный инструмент (xdpyinfo), затем — более общий (xrandr), затем — альтернативы для Wayland.
  • «Не доверяй вводу — проверяй формат»: всегда валидируйте WxH перед использованием.

Совместимость и переходы (советы по миграции)

  • Для новых систем с Wayland планируйте использование Wayland-совместимых инструментов или DE-API.
  • Для скриптов, ориентированных на серверные окружения, проверяйте наличие Xvfb (виртуальный фреймбуфер) для эмуляции X-сессии.
  • Документируйте предпосылки: какая сессия ожидается (X11/Wayland), нужна ли авторизация к X-серверу.

Примеры шаблонов и сниппеты

Шаблон вывода разрешения с fallback:

# Получение разрешения (удобный шаблон)
get_resolution() {
  if command -v xdpyinfo >/dev/null 2>&1; then
    xdpyinfo | awk '/dimensions/ {print $2; exit}'
  elif command -v xrandr >/dev/null 2>&1; then
    xrandr | awk -F'[ +]' '/primary/{print $4; exit}'
  else
    return 1
  fi
}

Использование:

res=$(get_resolution) || { echo "Не удалось получить разрешение"; exit 1; }

Диаграмма принятия решения

flowchart TD
  A[Есть DISPLAY?] -->|Нет| B[Выдать ошибку и выйти]
  A -->|Да| C[Есть xdpyinfo?]
  C -->|Да| D[Получить res через xdpyinfo]
  C -->|Нет| E[Есть xrandr?]
  E -->|Да| F[Получить res через xrandr]
  E -->|Нет| G[Попытаться Wayland-утилиты]
  D --> H{Валидно WxH?}
  F --> H
  G --> H
  H -->|Да| I[Разбить на X и Y и продолжить]
  H -->|Нет| B

Практические советы и подводные камни

  • Всегда проверяйте права доступа к X-серверу при запуске из сервиса/cron — у таких процессов обычно нет доступа к сессии пользователя.
  • Для сценариев с несколькими мониторами уточняйте, нужен ли вам primary или конкретный дисплей.
  • Чтобы избежать временных артефактов, сохраняйте текущее разрешение перед изменением и возвращайте его при завершении.

Итоги

Знать текущее разрешение экрана полезно для автоматизации запуска графических приложений и адаптации поведения скриптов под конкретное устройство. На X11 компактные и надёжные инструменты — xdpyinfo и xrandr — позволяют извлечь нужные значения через простые awk-выражения и использовать их в Bash-скриптах. Планируйте проверку окружения (X11 vs Wayland), добавляйте fallback-пути и валидацию, чтобы обеспечить переносимость и устойчивость ваших сценариев.

Важно

  • Если ваша система использует Wayland, изучите соответствующие инструменты для Wayland или DE-API для получения разрешения экрана.

Краткий чек‑лист

  • Проверить DISPLAY
  • Попытаться xdpyinfo
  • Фоллбек на xrandr
  • Валидировать WxH
  • Разбить на width/height
  • Использовать значения в логике скрипта
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Spotify не может воспроизвести трек — способы исправить
Руководство

Spotify не может воспроизвести трек — способы исправить

Установка Google Play на Windows 11
Руководство

Установка Google Play на Windows 11

AirDrop на Apple: настройка и безопасность
How-to

AirDrop на Apple: настройка и безопасность

Уведомления об истечении пароля в Active Directory
Security

Уведомления об истечении пароля в Active Directory

Задержка в Routines Google Assistant
Гайды

Задержка в Routines Google Assistant

Вход по отпечатку пальца в Ubuntu
Безопасность

Вход по отпечатку пальца в Ubuntu