tags: linux kde python dbus In short: ``` qdbus org.kde.KWin /KWin" nextDesktop qdbus org.kde.KWin /KWin" previousDesktop qdbus org.kde.KWin /KWin" setCurrentDesktop 3 qdbus org.kde.KWin /KWin" currentDesktop ``` This is a `subprocess` wrapper around `qdbus`. ```py #!/usr/bin/env python import sys import os from subprocess import run display = os.getenv("DISPLAY",":0.0") os.environ['DISPLAY'] = display args = sys.argv[1:] cmd = sys.argv[0] if len(args) == 0: args = ["current"] def getn(args,default=1): if len(args) > 1: try: n = int(args[1]) except ValueError: n = None else: n = default if n is None: print(f"{cmd} {args[0]} []") exit(1) return n kwin = ["org.kde.KWin","/KWin"] match args[0]: case "next" | "+": n = getn(args) for i in range(n): run(["qdbus"]+kwin+["nextDesktop"]) case "prev" | "-": n = getn(args) for i in range(n): run(["qdbus"]+kwin+["previousDesktop"]) case "set" | "=": n = getn(args,None) if n is None: print(f"need desktop number") exit(1) n = str(n) run(["qdbus"]+kwin+["setCurrentDesktop",n]) case "current": m = run(["qdbus"]+kwin+["currentDesktop"]) if m.returncode == 0: o = m.stdout.decode() print(o) else: print(f"#fail qdbus returned error") ```