63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# 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
|
|
|
|
```yaml
|
|
# 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:
|
|
|
|
```yaml
|
|
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.
|
|
|
|
```bash
|
|
# 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`.
|