Dup Ver Goto 📝

SwitchVirtualDesktop

PT2/linux/kde/dbus linux kde python dbus does not exist
To
63 lines, 154 words, 1304 chars Page 'SwitchVirtualDesktop' does not exist.

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