web-dev-qa-db-fra.com

Comment avoir un arrière-plan différent pour chaque espace de travail dans MATE

Je sais que l'on a déjà répondu à cette question, mais cette solution ne fonctionne pas sous Ubuntu MATE. Quoi qu'il en soit pour y parvenir sur MATE?

Sortie de wmctrl -d:

$ wmctrl -d
0  * DG: 1366x768  VP: 0,0  WA: 0,25 1366x719  Workspace 1
1  - DG: 1366x768  VP: N/A  WA: 0,25 1366x719  Workspace 2
2  - DG: 1366x768  VP: N/A  WA: 0,25 1366x719  Workspace 3
3  - DG: 1366x768  VP: N/A  WA: 0,25 1366x719  Workspace 4

Sortie de $ echo $DESKTOP_SESSION:

$ echo $DESKTOP_SESSION
mate

Solution originale que j'ai essayée et qui n'a pas fonctionné pour moi:
Est-il possible d'avoir un arrière-plan différent pour chaque espace de travail?

5
Hershey Gamer

Bien que je ne puisse pas le tester, étant donné que je n'ai pas Mate disponible dans Mate, je regarde le résultat de wmctrl -d, et compte tenu du fait que les fonds d'écran sur Mate sont évidemment réglés avec le même gsettings commande, je ne vois aucune raison pour que cela ne fonctionne pas.

Le scénario

Le script ci-dessous est une version éditée de celui-ci , et un extrait de celui-ci j'ai poussé vers Launchpad . En l'état, celui-ci ne fonctionnera pas pour Mate, car j'ai ajouté une vérification de session dans celui-ci, pour Unity ou Budgie.

Si vous pouvez confirmer que le script ci-dessous fonctionne sur Mate, je modifierai probablement la version de ppa pour inclure Mate.

Le scénario

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

try:
    os.mkdir(os.path.join(os.environ["HOME"], ".config/wswitcher"))
except FileExistsError:
    pass

workspace_data = os.environ["HOME"]+"/.config/wswitcher/wallpaper_data_"
key = [
    "gsettings get ",
    "gsettings set ",
    "org.gnome.desktop.background picture-uri",
    ]

def getwall():
    return subprocess.check_output(
        ["/bin/bash", "-c", key[0]+key[2]]
        ).decode("utf-8").strip()

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current_ws():
    # get the current workspace
    wsdata = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").splitlines()
    return [l.split()[0] for l in wsdata if "*" in l][0]

def wswitcher(curr_ws1, currwall1):
    while True:
        time.sleep(1)
        currwall2 = getwall()
        curr_ws2 = current_ws()
        datafile = workspace_data+curr_ws2
        if curr_ws2 == curr_ws1:
            if currwall2 != currwall1:
                open(datafile, "wt").write(currwall2)
        else:
            if not os.path.exists(datafile):
                open(datafile, "wt").write(currwall2)
            else:
                curr_set = open(datafile).read()
                command = key[1]+key[2]+' "'+str(curr_set)+'"'
                subprocess.Popen(["/bin/bash", "-c", command])
        curr_ws1 = curr_ws2
        currwall1 = getwall()

curr_ws1 = current_ws(); currwall1 = getwall()
wswitcher(curr_ws1, currwall1)

Comment utiliser

  1. Copiez le script dans un fichier vide
  2. Enregistrez-le sous wallswitcher.py
  3. Testez-le avec la commande:

    python3 /path/to/wallswitcher.py
    
  4. Ensuite, commencez simplement à configurer vos fonds d’écran de la manière illustrée ici .
  5. Si tout fonctionne bien, ajoutez-le aux applications de démarrage:

    /bin/bash -c "sleep 10 && /path/to/wallswitcher.py
    
1
Jacob Vlijm

La solution proposée par Jacob Vlijm fonctionne bien sur mon compagnon, à condition que je modifie org.gnome.desktop.background picture-uri en org.mate.background picture-filename dans le script (informations trouvées ici ).

1
infisxc