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.
#!/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]} [<n>]")
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")