5

I know this has been answered before but that solution doesn't work on Ubuntu MATE. Anyway to achieve this on MATE?

Output of 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

Output of $ echo $DESKTOP_SESSION:

$ echo $DESKTOP_SESSION
mate

Original solution that I tried and that didn't work for me:
Is it possible to have a different background for each workspace?

11
  • Please add a link to the solution that doesn't work in order to show what you tried.
    – simlev
    Aug 10, 2017 at 19:57
  • I could edit this one askubuntu.com/questions/305468/… (launchpad.net/~vlijm/+archive/ubuntu/wswitcher) to work with mate, but please add the output of wmctrl -d to your question, to make sure how mate handles workspaces (I don't run Mate). Currently, the application works for Unity and Budgie. Aug 10, 2017 at 20:25
  • @JacobVlijm I have added the output Aug 10, 2017 at 21:02
  • @simlev I added the link Aug 10, 2017 at 21:04
  • Cool! that means the code just needs a tiny edit. I forgot one thing: could you also post the exact output of echo $DESKTOP_SESSION? Aug 10, 2017 at 21:11

2 Answers 2

1

Although I could not test it, due to the fact that I don't have Mate avaialble atm, looking at the output of wmctrl -d, and given the fact that wallpapers on Mate are obviously set with the same gsettings command, I see no reason why it should not work.

The script

The script below is an edited version of this one, and kind of an exerpt of the one I pushed to Launchpad. As it is, that one won't work for Mate, since I added a session-check in that one, for either Unity or Budgie.

If you can confirm the script below works on Mate, I'll probably edit the ppa version to include Mate.

The 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)

How to use

  1. Copy the script into an empty file
  2. Save it as wallswitcher.py
  3. Test- run it by the command:

    python3 /path/to/wallswitcher.py
    
  4. Then simply start setting up your wallpapers as demonstrated here.
  5. If all works fine, add it to Startup Applications:

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

The solution proposed by Jacob Vlijm works fine on my Mate, provided that I change org.gnome.desktop.background picture-uri to org.mate.background picture-filename in the script (information found here).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .