import subprocess import logging from .toggle import ToggleControl from .util import process_reaper, backoff __all__ = ['CaffeineControl'] logger = logging.getLogger(__name__) class CaffeineControl(ToggleControl): def __init__(self, letter: str = 'c'): super().__init__(letter, False) def configure(self, argument_parser): argument_parser.add_argument('--caffeine-timeout', help='Time between user activity reports to xscreensaver (in seconds)', type=int, default=10) def bind_arguments(self, args): super().bind_arguments(args) self.periodic = process_reaper(backoff(self.args.caffeine_timeout)(self.__periodic)) def __periodic(self): if self.state: logger.debug("Poking screensaver") return subprocess.Popen(['xscreensaver-command', '-deactivate'], stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)