Inhibit idle by stop swayidle.service

Qtile had limited support for the wp-idle-inhibit protocol
so wayland-idle-inhibit doesn't work as expected.
We can inhibit idle by stopping swayidle.service
This commit is contained in:
Aleksey Samoilov 2024-07-23 23:25:29 +04:00
parent d8fead11b0
commit 08680646bb
3 changed files with 14 additions and 89 deletions

6
debian/changelog vendored
View file

@ -1,3 +1,9 @@
tileos-settings-qtile (1.1.4~tileos) unstable; urgency=medium
* Inhibit idle by stop swayidle.service
-- Aleksey Samoilov <samoilov.lex@gmail.com> Tue, 23 Jul 2024 23:24:39 +0400
tileos-settings-qtile (1.1.3~tileos) unstable; urgency=medium
* Fix swayidle autorestart

View file

@ -1,81 +0,0 @@
#!/usr/bin/env python3
import sys
from dataclasses import dataclass
from signal import SIGINT, SIGTERM, signal
from threading import Event
from pywayland.client.display import Display
from pywayland.protocol.idle_inhibit_unstable_v1.zwp_idle_inhibit_manager_v1 import (
ZwpIdleInhibitManagerV1,
)
from pywayland.protocol.wayland.wl_compositor import WlCompositor
from pywayland.protocol.wayland.wl_registry import WlRegistryProxy
from pywayland.protocol.wayland.wl_surface import WlSurface
@dataclass
class GlobalRegistry:
surface: WlSurface | None = None
inhibit_manager: ZwpIdleInhibitManagerV1 | None = None
def handle_registry_global(
wl_registry: WlRegistryProxy, id_num: int, iface_name: str, version: int
) -> None:
global_registry: GlobalRegistry = wl_registry.user_data or GlobalRegistry()
if iface_name == "wl_compositor":
compositor = wl_registry.bind(id_num, WlCompositor, version)
global_registry.surface = compositor.create_surface() # type: ignore
elif iface_name == "zwp_idle_inhibit_manager_v1":
global_registry.inhibit_manager = wl_registry.bind(
id_num, ZwpIdleInhibitManagerV1, version
)
def main() -> None:
done = Event()
signal(SIGINT, lambda _, __: done.set())
signal(SIGTERM, lambda _, __: done.set())
global_registry = GlobalRegistry()
display = Display()
display.connect()
registry = display.get_registry() # type: ignore
registry.user_data = global_registry
registry.dispatcher["global"] = handle_registry_global
def shutdown() -> None:
display.dispatch()
display.roundtrip()
display.disconnect()
display.dispatch()
display.roundtrip()
if global_registry.surface is None or global_registry.inhibit_manager is None:
print("Wayland seems not to support idle_inhibit_unstable_v1 protocol.")
shutdown()
sys.exit(1)
inhibitor = global_registry.inhibit_manager.create_inhibitor( # type: ignore
global_registry.surface
)
display.dispatch()
display.roundtrip()
print("Inhibiting idle...")
done.wait()
print("Shutting down...")
inhibitor.destroy()
shutdown()
if __name__ == "__main__":
main()

View file

@ -2,13 +2,13 @@
# Qtile idle-inhibitor toggle
function toggle {
if pgrep -f "wayland-idle-inhibitor" > /dev/null
if pgrep -f "swayidle" > /dev/null
then
pkill -f wayland-idle-inhibitor
notify-send -r 5556 -u normal " Screensaver Enabled"
else
/usr/bin/wayland-idle-inhibitor.py &
systemctl --user stop swayidle.service
notify-send -r 5556 -u normal " Screensaver Disabled"
else
systemctl --user start swayidle.service
notify-send -r 5556 -u normal " Screensaver Enabled"
fi
}
@ -17,11 +17,11 @@ case $1 in
toggle
;;
*)
if pgrep -f "wayland-idle-inhibitor" > /dev/null
if pgrep -f "swayidle" > /dev/null
then
icon=""
else
icon=""
else
icon=""
fi
printf "%s" "$icon"
;;