Como ter um fundo diferente para cada espaço de trabalho no MATE

5

Eu sei que isso já foi respondido antes, mas essa solução não funciona no Ubuntu MATE. Enfim, para conseguir isso no MATE?

Saída 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

Saída de $ echo $DESKTOP_SESSION :

$ echo $DESKTOP_SESSION
mate

Solução original que eu tentei e que não funcionou para mim:
É possível ter um plano de fundo diferente para cada espaço de trabalho?

    
por Hershey Gamer 10.08.2017 / 21:36

2 respostas

1

Embora eu não pudesse testá-lo, devido ao fato de que eu não tenho Mate avaialble atm, olhando para a saída de wmctrl -d , e dado o fato de que os papéis de parede no Mate são obviamente definidos com o mesmo gsettings comando, não vejo razão para que não funcione.

O script

O roteiro abaixo é uma versão editada de este , e meio que um esforço daquele Entrei no Launchpad . Como é, aquele não funcionará para o Mate, já que eu adicionei um teste de sessão naquele, para Unity ou Budgie.

Se você puder confirmar que o script abaixo funciona no Mate, provavelmente irei editar a versão do ppa para incluir o Mate.

O script

#!/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)

Como usar

  1. Copie o script em um arquivo vazio
  2. Salvar como wallswitcher.py
  3. Teste - execute-o pelo comando:

    python3 /path/to/wallswitcher.py
    
  4. Em seguida, basta começar a configurar seus papéis de parede como demonstrado aqui .
  5. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização:

    /bin/bash -c "sleep 10 && /path/to/wallswitcher.py
    
por Jacob Vlijm 12.08.2017 / 21:59
1

A solução proposta por Jacob Vlijm funciona bem no meu Mate, desde que eu mude org.gnome.desktop.background picture-uri para org.mate.background picture-filename no script (informações encontradas aqui ).

    
por infisxc 01.06.2018 / 11:54