Skip to content

Instantly share code, notes, and snippets.

@ldrahnik
Created March 27, 2026 09:53
Show Gist options
  • Select an option

  • Save ldrahnik/680a421a522a22772f537fa52af5b006 to your computer and use it in GitHub Desktop.

Select an option

Save ldrahnik/680a421a522a22772f537fa52af5b006 to your computer and use it in GitHub Desktop.
fd
#!/usr/bin/env python3
import os
import sys
import subprocess
import logging
QDBUS = "qdbus"
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger(__name__)
qdbus_freedesktop_failure_count = 0
qdbus_freedesktop_max_failure_count = 3
def qdbusFreedesktopSet(event_number, value):
global qdbus_freedesktop_failure_count
if qdbus_freedesktop_failure_count < qdbus_freedesktop_max_failure_count:
try:
sudo_user = os.environ.get('SUDO_USER')
base_cmd = [
QDBUS,
'org.kde.KWin',
f'/org/kde/KWin/InputDevice/event{event_number}',
'org.freedesktop.DBus.Properties.Set',
'org.kde.KWin.InputDevice',
'enabled',
str(value).lower()
]
if sudo_user is not None:
cmd = ['runuser', '-u', sudo_user] + base_cmd
else:
cmd = base_cmd
log.debug("Running command: %s", cmd)
ret = subprocess.call(cmd)
if ret != 0:
raise subprocess.CalledProcessError(ret, cmd)
except Exception as e:
log.debug("Error occurred", exc_info=True)
qdbus_freedesktop_failure_count += 1
else:
log.debug(
'Qdbus freedesktop failed more than: "%s", not trying anymore',
qdbus_freedesktop_max_failure_count
)
def parse_bool(value):
return value.lower() in ["1", "true", "yes", "on"]
if __name__ == "__main__":
if len(sys.argv) != 3:
print(f"Usage: {sys.argv[0]} <event_number> <enabled>")
print(f"Example: {sys.argv[0]} 17 true")
sys.exit(1)
event_number = sys.argv[1]
value = parse_bool(sys.argv[2])
qdbusFreedesktopSet(event_number, value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment