Вопрос или проблема
Я хочу создать виртуальный монитор, добавить его к моему текущему дисплею как отдельный экран (в смысле X) и поделиться им через VNC. То, что я хочу сделать, аккуратно описано ниже в статье в вики Arch Linux о Мультидисплейной конфигурации
Это оригинальный способ настройки нескольких мониторов с X, он существует уже несколько десятилетий. Каждый физический монитор назначается как экран X, и, хотя вы можете перемещать мышь между ними, они более или менее независимы. Обычно дисплей X имеет один идентификатор, такой как :0, установленный в переменной окружения DISPLAY, но в этой конфигурации у каждого экрана есть свое значение $DISPLAY. Первый экран – :0.0, второй – :0.1 и так далее. При этой конфигурации невозможно перемещать окна между экранами, кроме нескольких специальных программ, таких как GIMP и Emacs, которые поддерживают многодисплейный режим. Для большинства программ вам необходимо изменить переменную окружения DISPLAY при запуске, чтобы программа отображалась на другом экране:
# Запустить терминал на втором экране
$ DISPLAY=:0.1 urxvt &
В качестве альтернативы, если у вас есть терминал на каждом экране, запуская программы, они унаследуют значение DISPLAY и появятся на том же экране, на котором были запущены. Но перемещение приложения между экранами включает в себя закрытие его и повторное открытие на другом экране. Работать таким образом имеет свои преимущества, такие как то, что окна, появляющиеся на одном экране, не отвлекут вас от работы, если вы работаете на другом экране – каждый экран довольно независим.
Кратко: дисплей типа :0.1
Я создавал виртуальные дисплеи в прошлом, которые являются расширением текущего экрана, с помощью xrandr
.
xrandr --newmode "1024x768_60.00" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
xrandr --addmode VIRTUAL1 1024x768_60.00
xrandr --output VIRTUAL1
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно перемещать окна между мониторами (перетаскивать с актуального монитора на VNC монитор). Как я могу указать создать новый дисплей как новый экран? Я хочу сделать противоположное этому вопросу, создавая “проблему”, так что окна открываются на том же мониторе, с которого они были вызваны.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно перемещать окна между экранами.
Вы не можете, если приложение не было специально написано для этого (что большинство X приложений не делает). Читайте man XOpenDisplay
, и вы увидите, что X приложения получают список экранов на данном дисплее, но уже операции инструментария, такие как XtOpenDisplay
, заставляют вас указать экран.
Если вы хотите перемещать окна для произвольных X приложений “между экранами”, это означает, что “экраны” не должны быть экранами X, а частью одной и той же комбинации дисплея/экрана X.
Поэтому то, что вам нужно, это один фреймбуфер, отображаемый на двух мониторах (эта часть легка), и затем фреймбуфер для одного монитора должен быть доступен через VNC. И я не знаю, возможно ли это без внесения изменений в используемый вами VNC сервер.
Ответ или решение
Для настройки виртуального дисплея :0.1 в X, который функционально будет независимым от основного экрана :0, и для его совместного использования через VNC, следует выполнить несколько шагов. Это поможет создать отдельный экран с возможностью отображения различных окон, что, в свою очередь, позволит вам управлять окнами более гибко.
Шаги по настройке виртуального дисплея :0.1:
-
Установка необходимых пакетов: Убедитесь, что у вас установлены необходимые утилиты. На дистрибутиве Arch Linux вам понадобятся
xorg
,xrandr
иtigervnc
(или любой другой VNC-сервер по вашему выбору).sudo pacman -S xorg xrandr tigervnc
-
Создание виртуального дисплея:
Запустите приложение X с новой конфигурацией экрана. Используйте командуX
для создания нового сеанса с виртуальным дисплеем. Например:X :1 &
В данном случае :1 – это новый дисплей, а :0, используемый в основном сеансе, будет по-прежнему доступен.
-
Настройка виртуального экрана:
Используяxrandr
, добавьте новый экран. Запуститеxrandr
для работы с виртуальным дисплеем. Убедитесь, что virtual display доступен:xrandr --listmonitors
Затем создайте новый виртуальный экран:
xrandr --newmode "1024x768_60.00" 640 1024 1080 1184 768 769 772 795 -HSync +Vsync xrandr --addmode VIRTUAL1 "1024x768_60.00" xrandr --output VIRTUAL1 --mode "1024x768_60.00"
-
Настройка VNC для нового дисплея:
Запустите VNC-сервер для нового дисплея:vncserver :1
Вам может понадобиться настроить конфигурационные файлы VNC, чтобы указать, какой менеджер окон вы будете использовать в виртуальной среде.
-
Подключение к VNC:
Используйте VNC-клиент для подключения к серверу по адресуlocalhost:5901
(5900 + номер дисплея). Это позволит вам видеть виртуальный экран, который вы только что настроили.
Примечания:
-
Недостатки: Как упоминалось ранее, несмотря на настройку отдельных экранов, перемещение окон между дисплеями будет ограничено, если приложение не поддерживает работу на нескольких экранах. Чтобы окна открывались на нужном экране, запускайте их из терминала, связанным с этим экраном, изменив переменную окружения DISPLAY:
DISPLAY=:0.1 приложение &
-
Управление окнами: Для более удобного управления окнами на различных экранах рассмотрите возможность использования менеджеров окон, которые предоставляют лучшие инструменты для многозадачности и управления окнами.
Заключение:
Эти шаги помогут вам настроить виртуальный дисплей :0.1 в X и обеспечить возможность работы с ним через VNC. Важно помнить, что для полноценного взаимодействия с окнами требуются поддерживаемые приложения и правильная настройка рабочего окружения.