No description
Find a file
2025-11-13 15:15:45 +02:00
lib Add HTML status server 2025-11-13 15:13:58 +02:00
usage working version 2019-03-11 23:48:40 -03:00
.gitignore remove pycache 2019-03-13 10:15:53 -03:00
app-timer.service includes systemd service setup 2019-03-13 10:00:57 -03:00
config.yaml Update time limits and warning thresholds in config 2025-11-12 23:20:39 +02:00
readme.md added warning capabilities 2025-11-12 23:19:09 +02:00
requirements.txt includes systemd service setup 2019-03-13 10:00:57 -03:00
timer.py Add HTML status server 2025-11-13 15:13:58 +02:00

App Timer (Parental Control)

Control apps usage time with a command line application.

The python daemon will watch for the apps executable and store usage time for them. It can block an app if the usage is off limits.

I'm using this at a raspberry pi gaming station (retropie) to enforce usage limits. Other use cases are very plausible, like any other gaming platform or even enforcing a pomodoro timer for your coding time. Be creative and let me know.

Config

# how often should the script check for apps runtime?
check-interval: 1
# timers: list of apps that will be watched
timers:
  # the app name (list key)
  gaming:
    # list of the app executables
    apps:
      - retroarch
      - minecraft
    # how many minutes of usage
    time-limit: 60
    # within how many hours of interval
    limit-interval: 12
    # optional: warn N minutes before the limit is reached
    warn-threshold: 5
    # run on every loop inside the warning window (anything executable)
    warn-command: "notify-send 'App Timer' 'Only {time_left_int} minutes left'"
    # run only on the final loop before apps are blocked
    final-warn-command: "notify-send 'App Timer' 'Last minute before shutdown'"

warn-threshold is measured in minutes and triggers the warn-command every loop while there is still time remaining. final-warn-command fires once on the last loop before the timer exceeds its limit (based on check-interval). All commands are executed through the shell, so they can show desktop notifications, play sounds, etc. You can interpolate values in the command string using {timer_name}, {time_left}, {time_left_int}, {time_left_floor}, and {time_left_seconds} (any Python format specifiers are supported, e.g. {time_left:.1f}).

If the systemd service runs as root, wrap desktop commands so they execute inside your session:

warn-command: >
  runuser -l randogoth -c 'DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "App Timer" "{timer_name}: {time_left_int} minutes left"'

Installation

There's a systemd service file ready for use.

  # download the sources
  cd /opt/
  git clone https://github.com/thiagof/app-timer
  cd app-timer
  # yaml dependency
  sudo -H pip3 install -r requirements.txt
  # setup the daemon
  sudo cp ./app-timer.service /etc/systemd/system/app-timer.service
  sudo systemctl enable app-timer
  # check the service
  sudo systemctl status app-timer

You must edit the file config.yaml for your timers setup.

In the code there is some python 3 so this is required. For testing the timer and check it's outputs/configs, run python3 timer.py.