mirror of
https://github.com/dylanaraps/pywal.git
synced 2024-11-29 19:34:00 +01:00
97 lines
2.5 KiB
Python
97 lines
2.5 KiB
Python
"""Set the wallpaper."""
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
|
|
from pywal import util
|
|
|
|
|
|
def get_desktop_env():
|
|
"""Identify the current running desktop environment."""
|
|
desktop = os.environ.get("XDG_CURRENT_DESKTOP")
|
|
if desktop:
|
|
return desktop
|
|
|
|
desktop = os.environ.get("DESKTOP_SESSION")
|
|
if desktop:
|
|
return desktop
|
|
|
|
desktop = os.environ.get("GNOME_DESKTOP_SESSION_ID")
|
|
if desktop:
|
|
return "GNOME"
|
|
|
|
desktop = os.environ.get("MATE_DESKTOP_SESSION_ID")
|
|
if desktop:
|
|
return "MATE"
|
|
|
|
|
|
def xfconf(path, img):
|
|
"""Call xfconf to set the wallpaper on XFCE."""
|
|
util.disown("xfconf-query", "--channel", "xfce4-desktop",
|
|
"--property", path, "--set", img)
|
|
|
|
|
|
def set_wm_wallpaper(img):
|
|
"""Set the wallpaper for non desktop environments."""
|
|
if shutil.which("feh"):
|
|
subprocess.Popen(["feh", "--bg-fill", img])
|
|
|
|
elif shutil.which("nitrogen"):
|
|
subprocess.Popen(["nitrogen", "--set-zoom-fill", img])
|
|
|
|
elif shutil.which("bgs"):
|
|
subprocess.Popen(["bgs", img])
|
|
|
|
elif shutil.which("hsetroot"):
|
|
subprocess.Popen(["hsetroot", "-fill", img])
|
|
|
|
elif shutil.which("habak"):
|
|
subprocess.Popen(["habak", "-mS", img])
|
|
|
|
else:
|
|
print("error: No wallpaper setter found.")
|
|
return
|
|
|
|
|
|
def set_desktop_wallpaper(desktop, img):
|
|
"""Set the wallpaper for the desktop environment."""
|
|
desktop = str(desktop).lower()
|
|
|
|
if "xfce" in desktop or "xubuntu" in desktop:
|
|
# XFCE requires two commands since they differ between versions.
|
|
xfconf("/backdrop/screen0/monitor0/image-path", img)
|
|
xfconf("/backdrop/screen0/monitor0/workspace0/last-image", img)
|
|
|
|
elif "muffin" in desktop or "cinnamon" in desktop:
|
|
subprocess.Popen(["gsettings", "set",
|
|
"org.cinnamon.desktop.background",
|
|
"picture-uri", "file://" + img])
|
|
|
|
elif "gnome" in desktop:
|
|
subprocess.Popen(["gsettings", "set",
|
|
"org.gnome.desktop.background",
|
|
"picture-uri", "file://" + img])
|
|
|
|
elif "mate" in desktop:
|
|
subprocess.Popen(["gsettings", "set", "org.mate.background",
|
|
"picture-filename", img])
|
|
|
|
else:
|
|
set_wm_wallpaper(img)
|
|
|
|
|
|
def set_wallpaper(img):
|
|
"""Set the wallpaper."""
|
|
if not os.path.isfile(img):
|
|
return
|
|
|
|
desktop = get_desktop_env()
|
|
|
|
if desktop:
|
|
set_desktop_wallpaper(desktop, img)
|
|
|
|
else:
|
|
set_wm_wallpaper(img)
|
|
|
|
print("wallpaper: Set the new wallpaper")
|