Ce comportement est-il déjà possible ?
Tout est possible sous linux. Vous aurez besoin de quelques connaissances de base sur le Xserver Vous avez besoin de temps et d'un système sur lequel effectuer des tests, car vous manipulez votre X et vous avez certainement besoin du navigateur en marche si vous avez besoin d'aide :-)
À mon avis, il y a trois solutions possibles :
-
Les configurations multi-moniteurs utilisent Xinerama . La solution la plus simple à laquelle je pense est d'ajouter un troisième écran virtuel à votre configuration et d'y déplacer simplement les fenêtres à l'aide de xdotool. Il y a quelques inconvénients à cette solution mais elle ne nécessiterait pas l'effort d'avoir à déplacer Windows entre différents serveurs X ce qui, en général, n'est pas possible.
-
Puisqu'il n'est pas possible de déplacer Windows entre différents Xservers nous avons besoin d'une sorte de proxy comme xmove o Xpra pour faire ça pour nous. Je pense que les fenêtres vivent dans un endroit séparé Xfvb pour cacher les fenêtres. Vous pouvez attacher et détacher à la session.
-
Quelle que soit la méthode que vous utilisez, vous avez besoin d'un événement lorsque le moniteur est débranché. L'événement doit être déclenché lorsque l'écran est déconnecté et également lorsqu'il est reconnecté. Vous pouvez démoniser le script pour surveiller l'événement.
Je préférerais la solution utilisant Xpra pour diverses raisons. Je ne peux que vous donner quelques indications sur la manière de procéder. Les solutions ne sont pas complètes mais elles devraient vous permettre de démarrer.
Solution Xinerama
Configuration
La configuration de Xinerama doit être étendue pour avoir une configuration statique : Voir https://help.ubuntu.com/community/XineramaHowTo
voir aussi faux troisième écran y Xdummy
obtenir des Windows affectés
Nous pouvons utiliser xdotool pour rechercher Windows. Ensuite, nous pouvons vérifier leur position et les déplacer. Je suppose que deux moniteurs avec 1920x1080
configuration. L'exemple suivant déplacera toutes les fenêtres de l'écran xinerama de droite à gauche.
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 '.*')"
Vous pouvez maintenant déplacer toutes les fenêtres de l'écran de votre ordinateur portable (screen0) vers un troisième écran (virtuel) si un moniteur est connecté. En même temps, vous pouvez déplacer toute fenêtre stockée sur le troisième écran vers le premier écran.
Solution XPRA
Afin d'utiliser Xpra pour déplacer les fenêtres, toutes les fenêtres doivent être gérées par Xpra au préalable. Vous devez démarrer le bureau entier en utilisant Xpra au démarrage du système. Deux fois : l'une est votre bureau principal où vous travaillez et l'autre est principalement un bureau virtuel.
xpra start-desktop :99
xpra start-desktop :1 --exit-with-children attach
Vous pouvez maintenant faire fonctionner Windows pour l'écran déconnecté dans une session xpra séparée et l'attacher/le détacher lorsque le moniteur change.
xpra attach :99
xpra detatch :99
Il existe également un suppression de l'extension gnome Shell. qui pourrait être utile si vous voulez déplacer manuellement une fenêtre de la fenêtre cachée. :99
à la normale :0
entre les écrans xpra démarrés.
L'événement
-
Vous pouvez surveiller les déconnexion/reconnexion d'un écran spécifique
-
Peut-être que vous pouvez surveiller les changements de dimensions de votre xinerama en utilisant xwininfo pour le rendre indépendant du moniteur débranché si vous le souhaitez, c'est-à-dire pour étendre votre configuration à 3 moniteurs et débrancher un périphérique arbitraire. Notez que cela ne fonctionnera que pour la solution xpra.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0