Такое поведение уже возможно?
Все возможно в Linux. Вам понадобятся некоторые базовые знания о Xserver , некоторое время и система для тестирования, поскольку вы возитесь с вашим X и вам обязательно нужен браузер, если вам нужна помощь :-)
На мой взгляд, есть три возможных решения:
Мультимониторные установки используют Xinerama . Самое простое решение, о котором я могу подумать, - это добавить третий виртуальный экран в вашу конфигурацию и просто переместить туда окна, используя xdotool. У этого решения есть некоторые недостатки, но оно не потребует усилий для перемещения окон между различными серверами X, что в общем случае невозможно.
Так как это не возможно перемещать окна между различными Xservers , нам нужен вид прокси как XMove или Xpra , чтобы сделать это для нас. Я думаю, что тогда окна живут в отдельной сессии Xfvb, чтобы скрыть окна. Вы можете прикрепить и отсоединить к сеансу.
Независимо от того, какой метод вы используете, вам нужно событие, когда монитор отключается. Событие должно срабатывать при отключении экрана, а также при повторном подключении. Вы можете демонизировать скрипт для наблюдения за событием.
Я бы предпочел решение с использованием Xpra по разным причинам. Я могу только дать вам несколько советов, как это сделать. Решения не полны, но должны помочь вам начать.
Решение Xinerama
Настроить
Настройка Xinerama должна быть расширена, чтобы иметь статическую конфигурацию: см. Https://help.ubuntu.com/community/XineramaHowTo
см. также фальшивый третий экран и Xdummy
получить затронутые окна
Мы можем использовать xdotool для поиска окон. После этого мы можем проверить их положение и переместить их. Я предполагаю, что два монитора с 1920x1080
конфигурацией. Следующее переместит все окна справа налево на экран xinerama.
while read xwindowid; do
eval $(xdotool getwindowgeometry --shell "$xwindowid")
if (( X > 1920 && X <= (1920 * 2))); then
xdotool windowmove --relative $WINDOW -1920 y
fi
done <<< "$(xdotool search --screen 0 '.*')"
Теперь вы можете переместить все окна с экрана вашего ноутбука (screen0) на третий (виртуальный) экран, если подключен монитор. В то же время вы можете переместить любое окно, которое хранится на третьем экране, на первый экран.
Решение XPRA
Чтобы использовать Xpra для перемещения окон, все окна должны предварительно управляться Xpra. Вы должны запустить весь рабочий стол с помощью Xpra при запуске системы. Два раза один - ваш главный рабочий стол, на котором вы работаете, а второй - в основном виртуальный рабочий стол.
xpra start-desktop :99
xpra start-desktop :1 --exit-with-children −−attach
Теперь вы можете иметь Windows для отключенного экрана, работающего в отдельном сеансе xpra, и подключать / отключать его, когда монитор переключается.
xpra attach :99
xpra detatch :99
Существует также двусмысленное расширение оболочки gnome, которое может быть полезно, если вы хотите вручную переместить окно из скрытого :99
в нормальное состояние :0
между запущенными дисплеями xpra.
Событие
Вы можете наблюдать за отключением / повторным подключением определенного дисплея
возможно, следите за измененными размерами вашего xinerama, используя xwininfo, чтобы он был независим от неподключенного монитора, если вы хотите, например, расширить настройки до 3 мониторов и отключите произвольное устройство. Обратите внимание, что это будет работать только для решения xpra.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0