Найти в Дзене
Что-то на IT-шном

Linux с графическими приложениями без монитора

Я столкнулся с проблемой, которая проявляется одинаково на Windows, Linux и macOS. На физическом (не виртуальном) устройстве устанавливается
графическая оболочка, в которой запускаются графические программы с
возможностью доступа к видеокарте или без неё. Если отключить монитор от этого устройства, при удалённом
подключении к нему в режиме физического доступа к экрану разрешение
дисплея всегда уменьшается до минимума, и вернуть его к большему
значению становится невозможно. Давайте попробуем найти решение этой задачи. Я применяю Linux openSUSE с xorg и plasma, поэтому буду описывать
процесс для этой ОС, но так как X11 работает одинаково на большинстве
Linux-систем, этот метод подойдёт и другим дистрибутивам Linux. Решение проблемы В Linux устранить проблему можно просто добавив виртуальный монитор и настроив xorg. Для установки драйвера виртуального дисплея достаточно добавить пакет xf86-video-dummy. В других дистрибутивах Linux название пакета может отличаться, однако чаще всег
Оглавление
Linux с графическими приложениями без монитора...
Linux с графическими приложениями без монитора...

Я столкнулся с проблемой, которая проявляется одинаково на Windows, Linux и macOS.

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

Если отключить монитор от этого устройства, при удалённом
подключении к нему в режиме физического доступа к экрану разрешение
дисплея всегда уменьшается до минимума, и вернуть его к большему
значению становится невозможно.

Решение

Давайте попробуем найти решение этой задачи.

Я применяю Linux openSUSE с xorg и plasma, поэтому буду описывать
процесс для этой ОС, но так как X11 работает одинаково на большинстве
Linux-систем, этот метод подойдёт и другим дистрибутивам Linux.

Решение проблемы В Linux устранить проблему можно просто добавив виртуальный монитор и настроив xorg.

Добавление драйвера виртуального монитора.

Для установки драйвера виртуального дисплея достаточно добавить пакет xf86-video-dummy.

В других дистрибутивах Linux название пакета может отличаться, однако чаще всего в ней присутствуют слова "video" и "dummy".

Команда:

zypper in xf86-video-dummy

Настройка xorg

Осталось настроить виртуальный монитор, виртуальное устройство и виртуальный экран.

Для этого создаём файл с именем 70-headless.conf в директории /etc/X11/xorg.conf.d, содержимое файла:

Section "Monitor"
--->Identifier "VirtualMonitor"
--->HorizSync 30.0-62.0
--->VertRefresh 50.0-70.0
--->Modeline "1920x1080" 172.80 1920 2040 2248 2576 1080 1081 1084 1118
EndSection

Section "Device"
--->Identifier "VirtualCard"
--->Driver "dummy"
--->VideoRam 512000
EndSection

Section "Screen"
--->Identifier "VirtualScreen"
--->Device "VirtualCard"
--->Monitor "VirtualMonitor"
--->DefaultDepth 24
--->SubSection "Display"
--->--->Depth 24
--->--->Modes "1920x1080"
--->--->Virtual 1920 1200
--->EndSubSection
EndSection

Примечание: Замените символы "--->" на пробелы или знак табуляции.

В моём случае, мне требуется разрешение экрана 1920x1200, драйвер dummy, судя по всему, не поддерживает разрешения выше 1600x900, я решил эту проблему путём добавления виртуального разрешения в секции Screen->Display->Virtual.

Перезагружаем машину и можно подключаться к ней используя VNC или XRDP, с доступом к реальному экрану, на котором будет выставлено разрешение 1920x1200. Если после перезагрузки разрешение иное, тогда вы можете обычным стандартным способом переключить его, теперь это можно сделать.

В случае подключения монитора, вам может мешать виртуальный монитор, для его отключения достаточно переименовать файл 70-headless.conf в 70-headless.conf-off.

Процесс переименовывания или "убирания" файла настроек можно автоматизировать создав systemd сервис, запускающийся "After=systemd-user-sessions.service". И проверяющий состояние вашей видео карты, если состояние "connected", монитор подключён, файл можно убрать, если состояние "disconnected", монитор отключён.

Состояние видео карты можно посмотреть выполнив команду:

cat /sys/class/drm/card0-HDMI-A-1/status

Примечание: У вас карта card0-HDMI-A-1 может называться иначе.

Файл настроек видео карты должен быть на месте или отсутствовать до запуска X сервера.