web-dev-qa-db-fra.com

Puis-je configurer mes espaces de travail xfce différemment?

J'ai actuellement quatre espaces de travail ("Main", "Game", "Work", "Overflow"). Dans une configuration parfaite, l'espace de travail "Jeu" comporterait des raccourcis (sur le bureau ou dans un panneau) pour Steam et les jeux individuels.

Le passage à "Travail" NE devrait PAS avoir de rapport avec le jeu, mais plutôt des liens tels que des liens Google Docs et des raccourcis vers tous mes fichiers liés au travail.

Des espaces de travail personnalisés sont-ils possibles dans xfce4?

4
SCK

Si nous limitons la configuration à un ensemble différent de lanceurs par bureau, ce n’est pas très compliqué. Ce dont nous avons besoin, c’est d’un script fonctionnant en arrière-plan pour suivre l’espace de travail actuel et modifier automatiquement l’ensemble des lanceurs en conséquence.

1. Un ensemble de lanceurs par espace de travail

Disons que j'ai quatre espaces de travail, je veux que les lanceurs suivants soient disponibles sur les différents espaces de travail:

espace de travail 1>espace de travail 2>espace de travail 3>espace de travail 4>

enter image description hereenter image description hereenter image description hereenter image description here

  • Espace de travail 1: Firefox/inactif
  • Espace de travail 2: Gcolor2/Gimp Image Editor/Inkskape
  • Espace de travail 3: Abiword/Gnumeric/Mail Reader
  • Espace de travail 4: Mines/Sudoku

Comment mettre en place

  1. Le script utilise wmctrl:

    Sudo apt-get install wmctrl
    
  2. Dans votre répertoire personnel (pas dans un sous-répertoire, mais au "premier" niveau), créez un répertoire (exactement) nommé:

    desktop_data
    

    dans ce répertoire, créez pour chacun de vos bureaux un dossier nommé (exactement):

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

    <image5>

  3. Créez des lanceurs pour toutes les applications (pour tous les espaces de travail) sur votre bureau et copiez-les dans les dossiers correspondants.

  4. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom change_launchers.py. Testez-le en lançant dans une fenêtre de terminal la commande:

    python3 /path/to/change_launchers.py
    

    Si tout fonctionne bien, ajoutez-le à vos applications de démarrage.

    Le script

    #!/usr/bin/env python3
    import subprocess
    import os
    import time
    import shutil
    
    home = os.environ["HOME"]
    desktop_dir = home+"/"+"Desktop"
    data_dirstr = home+"/desktop_data/desktop_"
    
    get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    
    def get_desktop():
        return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]
    
    while True:
        curr_dt1 = get_desktop()
        time.sleep(1)
        curr_dt2 = get_desktop()
        # alter the set of launchers when workspace changes
        if not curr_dt1 == curr_dt2:
            datafolder = data_dirstr+curr_dt2
            for f in [f for f in os.listdir(desktop_dir)if f.endswith(".desktop")]:
                subject = desktop_dir+"/"+f
                os.remove(subject)
            for f in os.listdir(datafolder):
                subject = datafolder+"/"+f; target = desktop_dir+"/"+f
                shutil.copyfile(subject, target)
                subprocess.call(["/bin/bash", "-c", "chmod +x "+target])
    

Remarque

Dans différentes versions localisées d'Ubuntu, le nom du dossier "Desktop" peut différer (En néerlandais: "Bureaublad"). Si dans votre version Ubuntu le nom du dossier du bureau n'est pas "Bureau", changez-le dans la ligne:

desktop_dir = home+"/"+"Desktop"

2. Extension des possibilités, des lanceurs et des liens

Si nous ajoutons quelques lignes au script, les options de paramétrage par espace de travail peuvent être étendues avec un ensemble de modifications de liens vers des répertoires :

Sur un espace de travail, nous avons un exemple un lien vers le dossier Documents , associé à des lanceurs d'applications bureautiques:

enter image description here

Sur un autre espace de travail, nous avons un lien vers le dossier Images , associé aux lanceurs d'éditeurs d'image:

enter image description here

Comment configurer

La configuration est à peu près la même que dans l'option 1, mais en outre, dans les dossiers de données (voir option 1), créez des liens vers des dossiers (à l'aide de ln -s <source> <destination>) que vous souhaitez voir disponibles dans l'espace de travail correspondant:

enter image description here

Le script

#!/usr/bin/env python3
import subprocess
import os
import time
import shutil

home = os.environ["HOME"]
desktop_dir = home+"/"+"Desktop"
data_dirstr = home+"/desktop_data/desktop_"

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_desktop():
    return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]

while True:
    curr_dt1 = get_desktop()
    time.sleep(1)
    curr_dt2 = get_desktop()
    # alter the set of launchers & links when workspace changes
    if not curr_dt1 == curr_dt2:
        datafolder = data_dirstr+curr_dt2
        for f in os.listdir(desktop_dir):
            subject = desktop_dir+"/"+f
            if os.path.islink(subject) or subject.endswith(".desktop") :
                os.remove(subject) 
        for f in os.listdir(datafolder):
            subject = datafolder+"/"+f; target = desktop_dir+"/"+f
            if os.path.islink(subject):
                os.symlink(os.readlink(subject), target)
            else:
                shutil.copy(subject,target)
4
Jacob Vlijm

D'autres environnements de bureau (tels que KDE) offrent cela de manière native, mais cela n'est que partiellement pris en charge dans XFCE.

Qu'est-ce qui fonctionne nativement dans XFCE:

  • Vous pouvez définir un papier peint différent sur chaque espace de travail. Ce dernier est entièrement pris en charge et peut être facilement configuré via l'interface graphique des paramètres de l'espace de travail.
  • Vous pouvez affecter un panneau à un espace de travail spécifique, mais autant que je sache, il n’existe pas d’option graphique permettant de le configurer, mais le script ci-dessous prend tout en charge.

La solution que j'ai adoptée:

  1. Créez un nouveau panneau pour chaque espace de travail. Vous pouvez également créer des panneaux globaux supplémentaires qui seront affichés sur tous les espaces de travail (certains éléments, comme la barre de notification, ne peuvent être ajoutés qu'une seule fois. La seule façon de les afficher dans chaque espace de travail consiste à les ajouter à un panneau global).
  2. Configurez et exécutez le script ci-dessous pour distribuer chaque panneau local dans son propre espace de travail.
  3. Configurez XFCE pour exécuter le script à chaque démarrage.
  4. Configurez les panneaux comme vous le souhaitez.

Contrairement à l’autre réponse, ce script ne fonctionnera pas comme une boucle sans fin recherchant le statut à chaque seconde. Il ne s'exécute qu'une fois lors de l'ouverture de la session afin d'associer chaque panneau local à son propre espace de travail, puis tout le reste est géré de manière native par le gestionnaire de fenêtres.

#! /bin/sh

# First panel to move
start=2

# Number of panels to move
count=$( wmctrl -d | wc -l )

desk=0
for winid in $( wmctrl -l | grep 'dom0 xfce4-panel$' \
    | awk "NR==$start,NR==$(( start + count - 1 )) { print \$1; }" )
do
    wmctrl -i -r $winid -b remove,sticky
    wmctrl -i -r $winid -t $desk
    desk=$(( desk + 1 ))
done
  1. Enregistrez ce script, par exemple sous le nom local-panels.sh dans votre répertoire personnel, et rendez-le exécutable (chmod u+x ~/local-panels.sh).

  2. Configurez le script selon vos besoins:

    • $start: XFCE numérote vos panneaux, il s’agit du numéro du premier panneau que vous souhaitez rendre local. Ici, le premier panneau reste global et les panneaux 2 et suivants sont localisés dans leurs propres espaces de travail.
    • $count: Le nombre de panneaux à rendre locaux. Par défaut, cela correspond au nombre d'espaces de travail, c'est-à-dire. un panneau local différent par espace de travail.
    • $desk: Le premier espace de travail pour avoir un panneau local. Par défaut, chaque espace de travail aura un panneau local, mais si vous définissez cette variable sur une valeur plus élevée, vous ne pouvez pas avoir de panneau local sur les quelques premiers espaces de travail, si vous le souhaitez.
  3. Configurez XFCE pour qu'il lance automatiquement ce script à l'ouverture de la session: allez dans Gestionnaire de paramètres XFCE> session et démarrage, cliquez sur l'onglet Démarrage automatique de l'application, et puis sur le bouton Ajouter pour planifier l'exécution du script à chaque ouverture de session.

1
WhiteWinterWolf