xss-dimmer: play a sound to notice dimmer when not looking at the screen

Second try, but tell SDL to install a signal handler.
This commit is contained in:
Vincent Bernat 2022-04-30 16:13:41 +02:00
parent e52f0e4bc3
commit 131962b3a6
2 changed files with 25 additions and 2 deletions

View file

@ -17,10 +17,18 @@ import argparse
import threading
import time
import math
import os
from Xlib import display, X
from Xlib.error import BadWindow
from Xlib.protocol.event import MapNotify
try:
os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "hide"
os.environ["SDL_HINT_NO_SIGNAL_HANDLERS"] = "1"
import pygame
except ImportError:
pygame = None
def on_xevent(source, condition, xdisplay, locker):
while xdisplay.pending_events():
@ -89,7 +97,17 @@ def on_refresh(window, options, start):
elapsed = time.monotonic() - start
if elapsed < options.delay:
next_step = min(options.step, options.delay - elapsed)
GLib.timeout_add(options.step * 1000, on_refresh, window, options, start)
GLib.timeout_add(next_step * 1000, on_refresh, window, options, start)
def on_sound_ticker(options, sound, start):
elapsed = time.monotonic() - start
if elapsed < options.delay:
if sound is None:
pygame.mixer.init()
sound = pygame.mixer.Sound(options.sound)
sound.play()
GLib.timeout_add(1000, on_sound_ticker, options, sound, now)
# See: https://easings.net/
@ -144,6 +162,7 @@ if __name__ == "__main__":
choices=easing_functions.keys(),
help="easing function for opacity",
)
add("--sound", help="play a sound for each second elapsed while dimmer running")
options = parser.parse_args()
background = None
@ -192,5 +211,8 @@ if __name__ == "__main__":
)
xdisplay.pending_events() # otherwise, socket is inactive
if options.sound and pygame:
GLib.timeout_add(5000, on_sound_ticker, options, None, now)
# Main loop
Gtk.main()

View file

@ -3,4 +3,5 @@ Description=Screen dimmer
[Service]
ExecStart=%h/.config/i3/bin/xss-dimmer --delay=%i \
--background=%t/i3/current-wallpaper.png
--background=%t/i3/current-wallpaper.png \
--sound=/usr/share/sounds/freedesktop/stereo/audio-volume-change.oga