Paste this into Bash:
get_screen_time() {
since=${1:-today}
until_opt=${2:+--until "$2"}
journalctl --output json -u systemd-logind --since "$since" $until_opt | \
jq -r 'select(.MESSAGE_ID and .__REALTIME_TIMESTAMP) |
if (.MESSAGE | test("Lid opened|Starting systemd-logind|Operation .suspend. finished")) then
.__REALTIME_TIMESTAMP + " start"
elif (.MESSAGE | test("Lid closed|Stopping systemd-logind|system will suspend")) then
.__REALTIME_TIMESTAMP + " stop"
else
empty
end' | \
awk -v current_time=$(date +%s%6N) '
{
if ($2 == "start") {
last_start = $1
} else if ($2 == "stop" && last_start != 0) {
total += ($1 - last_start) / 1000000
last_start = 0
}
}
END {
if (last_start != 0) {
total += (current_time - last_start) / 1000000
}
seconds = int(total)
hours = int(seconds/3600)
minutes = int((seconds%3600)/60)
printf "%02d:%02d", hours, minutes
}'
}
PS1='$(get_screen_time) '$PS1
Now you have screen time for today in your prompt:
00:21 user@asus:~/Documents$
00:21 user@asus:~/Documents$ cd ../Pictures/
00:21 user@asus:~/Pictures$
Cool?


Interesting, I’d complete it with KDE Connect to add mobile usage.
I don’t know about android, but on iPhone only way to export screen time data is to screenshot it. Probably android is also restrictive.
No idea on iOS, specifically left the OS due to its lack of interoperability.
On Android I did test but https://f-droid.org/en/packages/com.atharok.screentime/ or https://f-droid.org/en/packages/godau.fynn.usagedirect/ looks like good candidate. I’m not sure if they have export or publish to API functions but I image at this point would be relatively easy to add.
You know better, I never have had an Android, but some time ago I’ve tried searching if you can get screen time data older than 2 months and came to conclusion you can’t do it on Android either. But probably it’s not an issue if you can automate export and perform it regularly.
It would’ve been cool to have accumulative screen time across all devices. But as iOS user I don’t dream of it.