web-dev-qa-db-fra.com

Espace de travail séparé pour le deuxième écran

J'aimerais obtenir un comportement comme celui-ci: lorsque j'utilise l'écran de mon ordinateur portable, mon premier espace de travail est utilisé. Lorsque je connecte un deuxième écran (via HDMI), un deuxième espace de travail est utilisé et toutes les nouvelles fenêtres ouvertes sur ce deuxième écran vont atterrir dans le deuxième espace, sauf que je change d’espace de travail sur le deuxième écran.

Lorsque je débranche mon deuxième écran, toutes les fenêtres restent dans les espaces de travail dans lesquels elles ont été créées et je peux basculer les espaces de travail sur mon ordinateur portable pour les voir.

Ce comportement est-il déjà possible?

16
velop

Ce comportement est-il déjà possible?

Tout est possible sous Linux. Vous aurez besoin de connaissances de base sur le Xserver , du temps et un système sur lequel tester, car vous jouez avec votre X et vous avez certainement besoin du navigateur. courir si vous avez besoin d'aide :-)

À mon avis, il y a trois solutions possibles:

  • Les configurations multi-écrans utilisent Xinerama . La solution la plus simple à laquelle je puisse penser consiste à ajouter un troisième écran virtuel à votre configuration et à déplacer simplement les fenêtres à l’aide de xdotool. Cette solution présente quelques inconvénients, mais elle ne nécessiterait pas l'effort de devoir déplacer des fenêtres entre différents serveurs X , ce qui n'est généralement pas possible.

  • Puisqu'il n'est pas possible de déplacer des fenêtres entre différents serveurs X , nous avons besoin d'une sorte de proxy tel que xmove ou Xpra pour le faire pour nous. Je pense que les fenêtres vivent alors dans une session séparée Xfvb pour masquer les fenêtres. Vous pouvez attacher et détacher à la session.

  • Quelle que soit la méthode utilisée, vous avez besoin d'un événement lorsque le moniteur est débranché. L'événement devrait ê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 conseils sur la façon de le faire. Les solutions ne sont pas complètes mais devraient vous aider à démarrer.

Solution Xinerama

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 touchées

Nous pouvons utiliser xdotool pour rechercher des fenêtres. Ensuite, nous pouvons vérifier leur position et les déplacer. Je suppose deux moniteurs avec la configuration 1920x1080. Ce qui suit 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é. Dans le même temps, vous pouvez déplacer toute fenêtre stockée sur le troisième écran vers le premier écran.

Solution XPRA

Pour utiliser Xpra pour déplacer les fenêtres, toutes les fenêtres doivent être gérées par Xpra avant. Vous devez démarrer tout le bureau en utilisant 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é s'exécutant dans une session xpra distincte et y connecter/déconnecter lorsque le moniteur bascule.

xpra attach :99
xpra detatch :99

Il existe également une extension gnome Shell qui pourrait être utile si vous souhaitez déplacer manuellement une fenêtre du :99 masqué vers le :0 normal entre les affichages xpra démarrés. .

L'événement

  • Vous pouvez surveiller la déconnexion/reconnexion d'un affichage spécifique

  • surveillez peut-être les dimensions modifiées de votre xinerama en utilisant xwininfo pour le rendre indépendant du moniteur débranché si vous souhaitez, par exemple, étendre votre configuration à 3 moniteurs et débranchez 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

1
ukos