A timer that automatically locks the screen to take a break away from the computer?
TakeaBreak
TakeaBreak is now on launchpad
sudo add-apt-repository ppa:vlijm/takeabreak
sudo apt-get update
sudo apt-get install takeabreak
Recently (also) pushed for 18.04 / 18.10 / 19.04
Disclaimer: I am the author
Feel free to file bugs etc. here, or comment here. Thanks to orschiro for the nice question, and Rinzwind for the encouragement!
remaining break- seconds (using countdown- option)
Settings
EDIT
An integrated & modernized version for Ubuntu Budgie is now available:
This applet will most likely be available by default in Ubuntu Budgie 19.04, but can now be achieved here as an experimental one.
You may also want to consider Workrave. I found it easy to use and highly customizable. It also has some preatty nice stats about how you use the computer and how many breaks you take. Lastly, I believe it can also sync itself between many computers, which is useful if, for example, you work both on the laptop and on a school computer.
EDIT: It has many other features that I haven't mentioned, like suggesting some exercises for you to do while the screen is blocked. And it can take into account only the time you're using the computer, so it won't prompt you with a break when you come back from the toilet :)
EDIT 2:
Make sure you check out the "Reading" mode!
The above feature of only counting the time you've been actively using the computer can be seen as a bug if you're not doing much (no mouse, no keyboard events) because it will only prompt your break when you cumulate 1h of usage (or how much time you've set up). In these situations, enabling the "Reading" mode will make it prompt at the exact time, regardless of usage.
Crude, minimalist, command-line way:
sleep 1500; gnome-screensaver-command -l; sleep 300; killall gnome-screensaver
That can also be turned into a desktop shortcut or turned into function in .bashrc
Why 1500 and 300? because that's seconds, 1500 seconds /60 seconds per minute = 25 minutes.
Below is a script for a timer that allows setting variable session and break time, as well as methods of signalling the break.
Remember that any script on linux must be saved as a file and have executable permissions set with chmod +x /path/to/script.sh
. Once that is done, you can bind the script to a shortcut as show in How do I bind .sh files to keyboard combination? or create a desktop shortcut as shown in How can I create launchers on my desktop?
When you launch the script you should see a menu like this:
#!/bin/bash
# Author: Serg Kolo
# Date : Nov 17th, 2015
# Purpose: pomodoro timer script,
# with bunch of options
# Written for: https://askubuntu.com/q/696620/295286
#####################################################
# screenSaver function
# this one uses gnome-screensaver-command for locking
# and killall for unlocking the screen;
# $1 is provided from chooseBreakMethod function
#####################################################
function screenSaver
{
gnome-screensaver-command -l; sleep $1 ; killall gnome-screensaver
}
##############################################
# dialogBreak function
# this serves as "screensaver". The screen is never
# actually locked but rather we open terminal window
# with a simple command line dialog
# in full sccrean mode
# $1 provided in chooseBreakMethod function
##################################################
function dialogBreak
{
gnome-terminal --full-screen -e "bash -c 'sleep $1 | dialog --progressbox \"TAKE A BREAK\" 100 100 ' "
}
#################################################################
# dimScreen function
# dims the screen using xrandr; the --brightness
# can be configured
# for full or partial dimming using decimal values
# from 1 to 0
# $1 is provided from chooseBreakMethod function
################################################################
function dimScreen
{
xrandr | awk '$2 == "connected" {print $1}' | xargs -I % xrandr --output % --brightness 0.5
notify-send 'Take a Break'
sleep $1
xrandr | awk '$2 == "connected" {print $1}' | xargs -I % xrandr --output % --brightness 1
}
##############################
# getSettings function
# This is where the user enters
# the settings they want
# All the values must be integers
#############################
function getSettings
{
FORM=$(zenity --forms \ --title="Sergiy's Tomato Script" --text="Choose this session options" \
--add-entry="Number of Sessions (how many loops)" \
--add-entry="Session time (minutes)" \
--add-entry="Break time (minutes)" \
--add-entry="Dim,dialog,or screensaver? (1,2,3)" \
--separator=" " )
[ $? -eq 0 ] || exit 1
echo $FORM
}
################################
# chooseBreakMethod function
# A helper function that calls appropriate
# break method, based on the value we got
# from getSettings function
# Because dialogBreak calls gnome-terminal
# this function exits, so it doesn't wait
# Therefore we need to add additional sleep
# command
###############################
function chooseBreakMethod
{
# $1 is method passed from ${SETS[3]}
# $2 is break time passed from ${SETS[2]}
case $1 in
1) dimScreen $2 ;;
2) dialogBreak $2 ; sleep $2 ;;
3) screenSaver $2 ;;
esac
}
function minutesToSeconds
{
echo $(($1*60))
}
#################
# MAIN
#################
# get user settings and store them into array
# Item 0 : num sessions
# Item 1 : session duration
# Item 2 : break duration
# Item 3 : break method - lockscreen, dialog, or just
# turn off the screen
# SETS == settings
SETS=( $(getSettings) )
COUNTER=${SETS[0]}
#######################################
# This is where most of the job is done
# we loop according to number of session
# specified in the getSettings function
#########################################
notify-send 'Session started'
while [ $COUNTER -ne 0 ]; do
sleep $( minutesToSeconds ${SETS[1]} ) # session timer
chooseBreakMethod ${SETS[3]} $( minutesToSeconds ${SETS[2]} )
COUNTER=$(($COUNTER-1))
done
notify-send "tomatoScript is done"
####### END OF SCRIT ###########