
Установка разрешения экрана на удаленном компьютере без подключенного дисплея в Linux
При проведении многопотоковых вычислений на удаленном компьютере иногда требуется подключиться к его графическому окружению. Чаще всего для этого используются программы, работающие по протоколу VNC (Virtual Network Computing).
Если к компьютеру физически не подключен монитор, то обычно автоматически устанавливается минимальное разрешение виртуального экрана (обычно 640×480 пикселей – headless mode). Из-за этого невозможно полноценно работать с большинством программ даже в консольном режиме.
Стандартным способом изменить разрешение экрана не получается, так как при вызове программы настроек дисплея появляется ошибка:

Вид виртуального экрана, с разрешением 640×480, устанавливаемым по умолчанию на компьютере с видеокартами Nvidia под управлением ОС xubuntu 18.04 (клиент RealVNC):

На картинке, приведенной в качестве примера, видно, что стандартное окно программы «Cеансы и запуск» не помещается на виртуальном экране. Из-за этого затруднен доступ к кнопкам сохранения сеанса и закрытия окна.
Для получения доступа к этим кнопкам нужно перетянуть в другое место окно программы, вызвав нажатием на правую кнопку мыши служебное меню (строка «Переместить»):

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

Переходник (адаптер) HDMI на VGA фирмы Cablexpert, обеспечивающий виртуальные разрешения от 720х480 до 1920х1080:

На компьютере с видеокартами Nvidia под управлением операционной системы с ядром Linux в headless-режиме для изменения разрешения виртуального экрана можно задействовать штатные средства.
Как изменить разрешение виртуального монитора в операционной системе Linux?
Для изменения разрешения удаленного экрана нужно, чтобы к одному из его видеовыходов был подключен монитор (настоящий или виртуальный).
Перед внесением изменений в параметры отображения удаленного дисплея, желательно изучить информацию о его видеовыходах и возможном разрешении.
Для этого можно использовать xrandr — служебную консольную утилиту для управления дисплеями.
Вывод информации программой xrandr на компьютере с 6 видеокартами без подключенного дисплея/эмулятора:

В данном случае, благодаря программе xrandr можно увидеть, что ни к одному из выходов видеокарт (DP0-DP-5 и HDMI-0) не подключен монитор, а разрешение основного дисплея (Screen 0) выставлено в режим 640×480.
Для изменения разрешения этого компьютера нужно добавить виртуальный монитор для screen0 и установить для него нужное пользователю разрешение.
Пример информации, отображаемой xrandr на компьютере с подключенным 19-дюймовым монитором Philips:

В данном случае видно, что к компьютеру подключен дисплей через видеовыход DVI-I, установлено разрешение 1440×900.
Компьютер с 4 видеокартами Nvidia с HDMI-VGA-адаптером Cablexpert, имеющим встроенный эмулятор монитора:

В этом случае отображается информация о том, что эмулятор подключен к выходу HDMI-0, установлено разрешение 1024×768.
Изменение разрешения монитора для выхода, к которому он подключен производится командой:
xrandr --output HDMI-1 --mode 800x600
где HDMI-1 (опция output) – это выход видеосигнала, к которому подключен монитор (или эмулятор), 800×600 (опция mode) – выбранное разрешение.
Список возможных значений разрешения монитора берется из данных EDID (Extended Display Identification Data). Они могут храниться в микросхеме памяти подключенного монитора, эмулятора или эмулироваться программным способом.
В xrandr можно назначить один из видеовыходов (output) в качестве основного путем указания опции primary, например:
xrandr --output HDMI-1 --primary
Для программного изменения разрешения экрана удаленного компьютера без физически подключенного монитора в системном файле xorg.conf (каталог /etc/X11) нужно прописать виртуальный дисплей с нужным разрешением.
С этой целью в xorg.conf, в подразделе Display раздела Screen добавляют строку Virtual, например:
Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "AllowEmptyInitialConfiguration" "True" Option "Coolbits" "31" SubSection "Display" Depth 8 Virtual 800 600 EndSubSection EndSection
Подключать монитор (в том числе виртуальный) лучше всего к самой мощной видеокарте, так как слабые GPU при выводе изображения могут терять производительность (компьютер будет «тормозить»).
Чтобы корректно внести информацию о виртуальном дисплее в файл /etc/X11/xorg.conf, лучше использовать служебную программу nvidia-xconfig.
Например, для экрана с нулевым номером подключение виртуального дисплея делается командой:
sudo nvidia-xconfig --screen=screen0 --virtual=800x600
Проконтролировать применение изменений можно в текстовом редакторе:
sudo nano /etc/X11/xorg.conf

После перезагрузки дисплей удаленного компьютера работает с установленным в режим 800×600 разрешением. Благодаря этому удаленная работа в графическом режиме с окнами стала более комфортной (они полностью помещаются на экране):

Программа xrandr теперь показывает, что разрешение screen0 установлено в режим 800×600:



