Existe-t-il un environnement de bureau convivial multi-écrans dynamique pour Ubuntu?

14

J'utilise un ordinateur portable et j'aime migrer pendant la journée d'un lieu de travail (physique) à un autre et me connecter à un moniteur externe si disponible.

Je dois également effectuer plusieurs tâches à la fois, j'ai donc beaucoup de fenêtres ouvertes à tout moment et de nombreux espaces de travail (virtuels) pour les organiser.

Mais chaque fois que je connecte / déconnecte le moniteur externe, tout mon arrangement prudent disparaît. Cela me rend vraiment fou .

Existe-t-il un environnement de bureau qui laisse les fenêtres tranquilles lorsque vous connectez / déconnectez un deuxième moniteur? Ou encore mieux, qui se souvient de la disposition des fenêtres par disposition de moniteur? De sorte que lorsque je suis passé de mon bureau à domicile (moniteur 17 "en haut de l'écran du portable) à mon lieu de travail habituel (moniteur 21" à gauche de l'écran du portable) ou au bureau de mon collègue (moniteur 19 "à droite de l'écran latop), le les fenêtres finissent là où elles étaient la dernière fois que le moniteur a été connecté - ou restent en place si elles n'ont jamais vu ce moniteur.

La façon dont l'unité «gère» les moniteurs externes me rend triste et souhaite que je n'ai pas eu tous ces moniteurs supplémentaires à connecter et une fois que je me connecte, cela me fait enchaîner à cet arrangement, comme si j'avais une machine de bureau clouée au sol.

artm
la source
Cela se produit-il avec un gestionnaire de fenêtres? GNOME 3, KDE, LXDE, XFCE?
Braiam
Je ne sais pas. Cela arrive avec l'unité.
artm
Avez-vous trouvé une bonne solution à cela? J'ai été obligé d'utiliser un ordinateur portable Dell sur lequel j'ai mis Ubuntu, mais je suis habitué à mon MacBook Pro. Sur le Mac, il existe un programme appelé Stay, qui est indispensable, car il se souvient des emplacements des fenêtres pour chaque configuration de moniteur. Branchez un moniteur, toutes les fenêtres se déplacent là où elles étaient. Branchez un deuxième moniteur, ils bougent tous à nouveau. Débranchez-les, ils retournent tous là où ils étaient. De plus, le Mac est suffisamment intelligent même sans Stay pour vous assurer que toutes les fenêtres sont visibles. Sur cet ordinateur portable Ubuntu, je dois toujours trouver les fenêtres qui sont hors de l'écran.
Greywire
Je ne trouve rien comme rester sur Linux. Il semble que vous puissiez obtenir toutes les informations et le contrôle des commandes individuelles, et les scripts ci-dessous se ferment. Je travaille sur l'amélioration de ceux-ci pour obtenir les fonctionnalités dont j'ai besoin ...
Greywire
Rester sonne comme ce qui me manque. Non, je n'ai pas trouvé de solution.
artm

Réponses:

10

Je vous propose deux scripts shell. Il vous aidera à enregistrer votre disposition des positions et de la taille des fenêtres . Si vos dispositions de fenêtres souhaitées sont perturbées, vous pourrez restaurer ces dispositions avec la taille et les positions exactes de toutes les fenêtres à l'aide de ce script.

Vous devez installer à wmctrlmoins que vous ne l'ayez déjà. Installer via terminal,

sudo apt-get install wmctrl

Script pour enregistrer la configuration de Windows

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

À l'exécution, le script ci-dessus enregistrera la position et la taille de vos fenêtres pour toutes vos fenêtres ouvertes dans un fichier nommé .my_windows_config.txtdans votre répertoire personnel. Il s'agit d'un fichier texte masqué.

Script pour recharger la configuration de Windows

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

Lorsque vous exécutez le deuxième script, il restaurera la position de vos fenêtres avec la taille exacte pour toutes vos fenêtres.

Usage

Enregistrez ces scripts dans votre $HOME/bin/répertoire. Ajoutez $HOME/bin/votre PATH. Pour cela, ajoutez ces lignes à la fin de votre$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Il vous permettra d'exécuter ces scripts avec leur nom uniquement. Donnez la permission d'exécution des scripts,

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

Pour enregistrer la configuration dans votre $HOME/.my_windows_config.txt

Après avoir ouvert et ajusté toutes vos fenêtres exécutées dans le terminal,

save_window_conf.sh

Pour recharger la configuration depuis votre $HOME/.my_windows_config.txt

load_window_conf.sh

J'espère que cela résoudra votre problème. Voici une capture d'écran,

entrez la description de l'image ici

souravc
la source
Wow, merci, cela semble prometteur. Je vais essayer les scripts.
artm
@artm J'ai édité un petit bug et une faute de frappe, maintenant ça semble ok. Je l'ai testé sur Unity et Gnome-fallback-session, devrait fonctionner sur gnome3. Faites-moi savoir si vous rencontrez un problème.
souravc
@artm, cela devrait être votre décision lorsque vous souhaitez supprimer .my_windows_config.txt. Si vous souhaitez charger plusieurs fois la même configuration de fenêtres pour des fenêtres existantes, vous souhaiterez peut-être la conserver. Mais si vous démarrez une toute nouvelle session, cet identifiant Windows sera différent et dans ce cas, il est préférable de supprimer l'ancien fichier de configuration à $HOME/.my_windows_config.txt. Vous devez supprimer manuellement le fichier de configuration enregistré avant d'enregistrer une nouvelle configuration.
souravc
Sur XFCE4 dans Ubuntu 18.04, j'ai dû changer la gravité (premier "0" dans le paramètre -e) à 31, sinon les fenêtres ont été restaurées à environ 31 pixels à droite et en bas de là où elles étaient. Je pense que cela peut être la taille du panneau XFCE par défaut. Merci pour le code!
akom
-1

Le guide commun est ici: Résolution

Vos solutions de résolution dynamique sont proches de Xorg & XrandR ou Xinerama

Vous avez:
Quatre méthodes de configuration

  1. Par session avec .xprofile.

  2. Dynamiquement en utilisant l'outil xrandr

  3. Statiquement en définissant dans xorg.conf.

  4. Interface graphique graphique Xrandr.

La bonne réponse est que les paramètres de plusieurs moniteurs ne sont pas stockés

Pour contourner votre gestion des fenêtres dans tous vos espaces de travail, vous pouvez utiliser le système de profilage fourni par Compiz Config Manager

rapide
la source
2
Je n'ai aucun problème avec les résolutions ou les dispositions d'affichage - celles-ci fonctionnent comme prévu.
artm
TOUT environnement de bureau est donc AMICAL pour vous. Ne blâmez pas le public, s'il vous plaît.
swift
Je ne blâme personne. Je veux juste que les fenêtres ouvertes restent où je les ai mises lors de la connexion / déconnexion des moniteurs.
artm
Vous avez donc quatre solutions avec référence officielle. Ma réponse couvre adéquatement votre "folie";)
rapide le
2
Oh, essayez-le par vous-même: ouvrez une fenêtre sur chaque espace de travail, puis connectez un moniteur qui apparaît en haut de l'écran d'origine et voyez où se trouvent vos fenêtres. Dites-moi ensuite en quoi xrandr est pertinent pour empêcher les fenêtres de sauter de façon aléatoire lorsqu'un moniteur est connecté.
artm