XRandR обрезает отображаемую область на определенных конфигурациях с несколькими мониторами.

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

У меня есть четыре монитора. Один (1680×1050) подключён к встроенному графическому адаптеру Intel, а три (1440×900 и два 1920×1080) подключены к дискретному графическому адаптеру ATI. При определённых конфигурациях XRandR некоторые мониторы имеют обрезанную область отображения, так что, например, нижняя часть экрана не используется.

Я хотел бы использовать конфигурацию, как эта:

xrandr \
    --output VGA-1 --mode 1440x900 --pos 780x1080 --rotate left \
    --output HDMI2 --mode 1680x1050 --pos 0x30 --rotate normal \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1080 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x0 --rotate normal

Но нижняя часть (ниже нижнего края правого нижнего экрана) левого нижнего экрана обрезана:

Ошибка

С другой стороны, эта конфигурация работает:

xrandr \
    --output VGA-1 --mode 1440x900 --pos 780x1050 --rotate left \
    --output HDMI2 --mode 1680x1050 --pos 0x0 --rotate normal \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1080 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x0 --rotate normal 

, как показано здесь:

Успех 1

Также эта конфигурация работает:

xrandr \
    --output VGA-1 --mode 1440x900 --pos 780x0 --rotate left \
    --output HDMI2 --mode 1680x1050 --pos 0x1440 --rotate normal \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1440 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x360 --rotate normal 

, как показано здесь:

Успех 2

Кроме того, следующая конфигурация работает

xrandr \
    --output VGA-1 --mode 1440x900 --pos 780x1080 --rotate left \
    --output HDMI2 --mode 1680x1050 --pos 0x30 --rotate normal \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1440 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x0 --rotate normal

как показано здесь:

Успех 3

ОБНОВЛЕНИЕ:

Странно, но мне удалось добиться нужной расстановки командой:

xrandr \
    --output VGA-1 --mode 1440x900 --pos 780x1080 --rotate left \
    --output HDMI2 --mode 1680x1050 --pos 0x30 --rotate normal \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1440 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x0 --rotate normal

xrandr \
    --output HDMI2 --mode 1680x1050 --pos 0x30 --rotate normal \
    --output DVI-0 --mode 1920x1080 --pos 1680x0 --rotate normal \
    --output VGA-1 --mode 1440x900 --pos 780x1080 --rotate left \
    --output HDMI-3 --mode 1920x1080 --pos 1680x1080 --rotate normal \
        --primary

так что это работает на только что запущенном экземпляре Xorg, но я не имею представления, почему это работает. Кроме того, это решение кажется немного неуклюжим. Может кто-нибудь осветить меня по этому вопросу, пожалуйста?

Моя операционная система – Arch Linux, оконный менеджер – i3, а версия XRandR – 1.4.2. Файлы конфигурации Xorg содержат только разделы InputClass и Files.

Да, я могу полностью прояснить вам эту ситуацию и другие:

Ваш экран X11 (один большой прямоугольник) слишком мал. Обычно xrandr автоматически изменяет его размер, чтобы вместить все мониторы, но, похоже, наталкивается на ошибку в вашей системе.

Графическое представление вашей настройки на вашем скриншоте также показывает эту проблему (прямоугольник за VGA-1 обрезан). Мониторы, показывающие области за пределами экрана X11, отображают мусор (или ничего) в этих областях.

Увеличьте его вручную с помощью переключателя --fb. Ваша общая ширина, похоже, составляет HDMI2 + DVI-0, что составляет 3600 пикселей в ширину, а общая высота увеличена до максимума DVI-0 и вращаемого VGA-1, т.е. 1080 + 1440 = 2520.

xrandr --fb 3600x2520

Ответ или решение

Решение проблемы обрезки области отображения в XRandR при использовании многомониторных конфигураций

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

Объяснение проблемы

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

Представление вашей конфигурации через XRandR демонстрирует это несоответствие: края виртуального экрана оказываются слишком узкими, и часть монитора не учитывается. В результате нижняя часть изображения на внутренних мониторах отображается как «мусор» или полностью пустая.

Решение проблемы

Для решения данной проблемы вам понадобится вручную задать размеры вашего виртуального экрана при помощи параметра --fb в XRandR.

Основываясь на вашем описании конфигурации, необходимо учесть суммарную ширину и высоту всех мониторов:

  1. Ширина:

    • HDMI2 – 1680 пикселей
    • DVI-0 – 1920 пикселей
    • Сумма: 1680 + 1920 = 3600 пикселей
  2. Высота:

    • Высота экрана DVI-0 (1920×1080) – 1080 пикселей
    • Высота экрана VGA-1 (1440×900) в вертикальной ориентации после поворота – 1440 пикселей
    • Сумма: 1080 + 1440 = 2520 пикселей

Используйте следующую команду для задания размеров рамки экрана (framebuffer):

xrandr --fb 3600x2520

Дополнительные рекомендации

  • Порядок выполнения: Передает значения --fb необходимо выполнить эту команду перед другими командами XRandR для настройки разрешения. Это обеспечит корректное отображение всех подключенных мониторов без обрезки.

  • Автозагрузка команд: Рассмотрите возможность добавления этих настроек в автоматический запуск вашей сессии X через файлы конфигурации i3 или .xinitrc, чтобы каждая новая сессия Xorg начиналась с правильной конфигурации.

  • Проверка настроек: После изменения настроек используйте xrandr для проверки текущих значений framebuffer и проявления всех подключенных мониторов.

Заключение

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

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

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