Ce comportement est-il déjà possible?
Tout est possible sous Linux. Vous aurez besoin de quelques connaissances de base sur le Xserver , du temps et un système pour tester, car vous jouez avec votre X et vous avez certainement besoin du navigateur en cours d'exécution si vous avez besoin d'aide :-)
À mon avis, il existe trois solutions possibles:
Les configurations multi-écrans utilisent Xinerama . La solution la plus simple à laquelle je peux penser est d'ajouter un troisième écran virtuel à votre configuration et de simplement y déplacer les fenêtres en utilisant xdotool. Il y a quelques inconvénients à cette solution, mais elle ne nécessiterait pas l'effort de déplacer des fenêtres entre différents serveurs X, ce qui n'est généralement pas possible.
Comme il est impossible de déplacer les fenêtres entre les différentes Xservers , nous avons besoin d' une sorte de procuration comme xmove ou XPRA de le faire pour nous. Je pense que les fenêtres vivent alors dans une session Xfvb distincte 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émonifier 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 conseils sur la façon de procéder. Les solutions ne sont pas complètes mais devraient vous aider à démarrer.
Xinerama Solution
Installer
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 et Xdummy
obtenir les fenêtres affectées
Nous pouvons utiliser xdotool pour rechercher des fenêtres. Ensuite, nous pouvons vérifier leur position et les déplacer. Je suppose que deux moniteurs avec 1920x1080
configuration. Les éléments suivants déplaceront toutes les fenêtres de la droite vers la gauche de l'écran 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 '.*')"
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 n'importe quelle 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 l'ensemble du bureau à l'aide de Xpra au démarrage du système. Deux fois, l'un est votre bureau principal sur lequel 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 avoir Windows pour l'écran déconnecté exécuté dans une session xpra distincte et l'attacher / le détacher lorsque le moniteur bascule.
xpra attach :99
xpra detatch :99
Il existe également une extension de shell gnome discontinue qui pourrait être utile si vous souhaitez déplacer manuellement une fenêtre de la fenêtre cachée :99
à la normale :0
entre les affichages xpra démarrés.
L'événement
Vous pouvez surveiller la déconnexion / reconnexion d'un écran spécifique
surveillez peut-être les dimensions modifiées de votre xinerama en utilisant xwininfo pour le rendre indépendant du moniteur non branché si vous voulez par exemple étendre votre configuration à 3 moniteurs et débrancher un appareil arbitraire. Notez que cela ne fonctionnera que pour la solution xpra.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0