17 votes

Espace de travail séparé pour le second écran

Je voudrais obtenir un comportement comme celui-ci : Lorsque j'utilise l'écran de mon ordinateur portable, mon premier espace de travail est utilisé. Lorsque je branche 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 atterriront dans le deuxième espace, sauf si je change l'espace de travail sur le deuxième écran pour un autre espace de travail.

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 changer d'espace de travail sur mon ordinateur portable pour les voir.

Ce comportement est-il déjà possible ?

3voto

ukos Points 671

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X