I’m self employed. I need to record how much time I spend on whatever task for whatever client.
Sounds simple, but I’m terrible at it. I always get to the end of the day without having recorded anything and not knowing what I’ve actually done.
Basically, I’d like to create a text log of the active window title, and take a screen cap.
I’d like to do this periodically as in every 15 minutes or so.
For the text log I just haven’t been able to achieve this at all.
For the screen caps I can use flameshot to take a screenshot from the CLI, but it makes a sound and shows an animation which is sub-optimal.
Any suggestions of where to look much appreciated.
Edit: I’m not asking for a time tracking app. I want something to log the active window title and take a screen cap so I can figure out what I was doing and write it in my time tracking app.
Edit: I’m narrowing in on a solution.
Firstly, a lot of previously available solutions don’t work because of recently implemented security features in gnome.
You need to enter unsafe mode by entering this:
global.context.unsafe_mode = true
in the looking glass tool which you can access by running lg
in the alt + f2
dialog
thereafter, this can grab the active window title for you:
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "global.display.focus_window.title"
Are you deadset on gnome because this would be crazy easy on hyprland
No I’m not especially loyal to gnome.
How would I achieve this with hyprland ?
@communist @null_dot Hyprland has the screenshotting functionality builtin.
hyprctl dispatch capture window
#!/usr/bin/env bash # get hyprland event socket path HIS=$HYPRLAND_INSTANCE_SIGNATURE EVENT_SOCK="$XDG_RUNTIME_DIR/hypr/$HIS/.socket2.sock" # fallback / error check if [ -z "$HIS" ] || [ ! -S "$EVENT_SOCK" ]; then echo "Error: cannot locate Hyprland event socket at $EVENT_SOCK" >&2 exit 1 fi logfile="${HOME}/hypr_focus.log" # function to handle a line from the event stream handle_event() { local line="$1" # check for activewindow event if [[ $line == activewindow* ]]; then # format: activewindow>>CLASS,TITLE # strip prefix local payload=${line#activewindow>>} # split on comma (first comma) local cls="${payload%%,*}" local title="${payload#*,}" local ts ts=$(date '+%Y-%m-%d %H:%M:%S') echo "$ts — $title (class: $cls)" >> "$logfile" fi # optionally handle activewindowv2 if you want address instead # if [[ $line == activewindowv2* ]]; then # ... # fi } # listen to the socket socat -u "UNIX-CONNECT:$EVENT_SOCK" - | while IFS= read -r line; do handle_event "$line" done
honestly if you’re willing to do some work you can make hyprland do almost anything
**disclaimer i did not test this much
edit: forgot about the screenshot part, should be easy to add though, just add screenshotting everytime focus changes with grim or whatever
“Crazy easy”
compared to gnome, absolutely.