Таймер, который автоматически блокирует экран, чтобы отрываться от компьютера?

61

Я ищу графическую или командную программу, которая предоставляет мне следующий рабочий процесс:

  1. Начало сеанса 25 минут
  2. После того, как экран 25 минут автоматически заблокирован на 5 минут (или, может быть, только черный?)
  3. Теперь мне помогает отдохнуть, потому что я не могу ничего делать перед компьютером, кроме как смотреть на черный или заблокированный экран:)
  4. Через 5 минут экран автоматически возвращается, и я могу продолжить работу.

Есть ли программа, которая выполняет именно это?

    
задан orschiro 11.11.2015 в 10:32
источник

6 ответов

81

Полное приложение , вероятно, будет своего рода излишним; крошечный фоновый скрипт выполняет эту работу.

В приведенном ниже скрипте сделайте то же самое, что и вы упоминаете: он держит экран «нормальным» в любое время (в считанные минуты вы можете использовать поплавки для частичного вывода минут) и либо вычеркивает экран (s ) или поворачивает его вверх дном, по вашему выбору :), для «бремени».

или:

Скрипт

#!/usr/bin/env python3 import subprocess import sys import time awaketime = int(float(sys.argv[1])*60) sleeptime = int(float(sys.argv[2])*60) def take_a_break(): get = subprocess.check_output(["xrandr"]).decode("utf-8").split() screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"] for scr in screens: # uncomment either one of the commands below [1] # darken the screen, or... subprocess.call(["xrandr", "--output", scr, "--brightness", "0"]) # turn it upside down :) # subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"]) time.sleep(sleeptime) for scr in screens: # back to "normal" subprocess.call(["xrandr", "--output", scr, "--brightness", "1"]) subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"]) while True: time.sleep(awaketime) take_a_break()

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как takeabreak.py
  2. По вашему выбору раскомментируйте строки 15 или 17 (вы можете пропустить этот шаг, если хотите просто потемнить экран), как указано в сценарии.
  3. Проверить запуск сценария с терминала с помощью команды:

    python3 /path/to/takeabreak.py <uptime> <breaktime>
    

    , например:

    python3 /path/to/takeabreak.py 25 5
    

    сделать паузу через 5 минут после работы каждые 25 минут

  4. Если он делает то, что вы хотите, добавьте его в приложения для запуска: Dash > Приложения для запуска > Добавьте команду:

    /bin/bash -c "sleep 15 && python3 /path/to/takeabreak.py 25 5"
    



ИЗМЕНИТЬ

Конечно, вы можете «нарядить» сценарий всем, что можете себе представить. Первое, что приходит мне в голову, - это небольшое сообщение, извещающее вас, что перерыв близок ...

Код

#!/usr/bin/env python3 import subprocess import sys import time awaketime = int(float(sys.argv[1])*60) sleeptime = int(float(sys.argv[2])*60) message = "Break in 15 seconds" def take_a_break(): get = subprocess.check_output(["xrandr"]).decode("utf-8").split() screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"] for scr in screens: # uncomment either one of the commands below [1] # darken the screen, or... subprocess.call(["xrandr", "--output", scr, "--brightness", "0"]) # turn it upside down :) # subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"]) time.sleep(sleeptime) for scr in screens: # back to "normal" subprocess.call(["xrandr", "--output", scr, "--brightness", "1"]) subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"]) while True: time.sleep(awaketime-15) subprocess.Popen(["notify-send", message]) time.sleep(15) take_a_break()

EDIT 2

Основные элементы GUI для Unity

Как обсуждалось в комментариях, ниже версия (настроенная) с базовым графическим интерфейсом, для переключения сценария и изменения настроек времени безотказной работы / времени останова. Если вы следуете инструкциям, настройка довольно проста:)

Ингредиенты:

  1. Двасценария(ниже):

    • takeabrake_run,которыйявляетсяфактическимскриптом,заменяяприведенныевышесценарии,

    и

    • takeabreak_gui,который,какиожидалось,скриптдляуправлениянастройками(time-)идлязапускаскрипта.
  2. a.desktopфайл:

    [Desktop Entry] Type=Application Name=Take a Break Exec=takeabreak_gui toggle Icon=/path/to/takeabreak.png Actions=Toggle script;Change time settings; [Desktop Action Change time settings] Name=Change time settings Exec=takeabreak_gui timeset OnlyShowIn=Unity; [Desktop Action Toggle script] Name=Toggle script Exec=takeabreak_gui toggle OnlyShowIn=Unity;
  3. и значок:


    (щелкнитеправойкнопкоймыши>сохранитьизображениекакtakeabreak.png)

Какнастроить

  1. Создать,еслионещенесуществует,каталог~/bin
  2. Либовыйдитеизсистемыилизапуститеsource~/.profile,чтобы«активировать»наличие~/binв$PATH
  3. Скопируйтеобасценариянижевдвапустыхфайла,назовитеих(точно)

    takeabreak_gui

    и

    takeabreak_run

    (безрасширений!)исохранитеихв~/bin

  4. Сделайтеобаисполняемыхскрипта(!)
  5. Скопируйтезначок(right-click>saveimageas)накомпьютер.Назовитеего(точно)какtakeabreak.png
  6. Скопируйтефайл.desktopвпустойфайл.Отредактируйтестроку:

    Icon=/path/to/takeabreak.png

    изаменитепутьназначокреальнымпутем.

Вотивсе!

Скрипты:

  1. takeabreak_run

    #!/usr/bin/env python3 import subprocess import sys import time awaketime = int(float(sys.argv[1])*60) sleeptime = int(float(sys.argv[2])*60) message = "Break in 15 seconds" def take_a_break(): get = subprocess.check_output(["xrandr"]).decode("utf-8").split() screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"] for scr in screens: # uncomment either one of the commands below [1] # darken the screen, or... subprocess.call(["xrandr", "--output", scr, "--brightness", "0"]) # turn it upside down :) # subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"]); time.sleep(0.2) time.sleep(sleeptime) for scr in screens: # back to "normal" subprocess.call(["xrandr", "--output", scr, "--brightness", "1"]); time.sleep(0.2) subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"]); time.sleep(0.2) while True: time.sleep(awaketime-15) subprocess.Popen(["notify-send", message]) time.sleep(15) take_a_break()
  2. takeabreak_gui

    #!/usr/bin/env python3
    import os
    import subprocess
    import sys
    
    # define the settings file's location
    setting = os.environ["HOME"]+"/"+".time_setting"
    # default values (if no settinghs were made)
    default_up = "25"
    default_break = "5"
    
    arg = sys.argv[1]
    
    def check_running():
        # function to check if the script runs
        try:
            return subprocess.check_output(["pgrep", "-f", "takeabreak_run"]).decode("utf-8").strip()
        except subprocess.CalledProcessError:
            return False
    
    def start(uptime, breaktime):
        # function to start the script with arguments
        print(uptime, breaktime)
        subprocess.Popen(["takeabreak_run", uptime, breaktime])
    
    def kill(pid):
        # function to stop the script
        subprocess.Popen(["kill", pid])
    
    def message(msg):
        # function to send a notification
        subprocess.Popen(["notify-send", msg])
    
    if arg == "toggle":
        # the section below handles toggling the script
        pid = check_running()
        if pid != False:
            kill(pid)
            message("Take a break stopped...")
        else:
            try:
                # if settings file exist: message, displaying set time
                time_set = open(setting).read().strip().split()
                uptime = time_set[0]; breaktime = time_set[1]
            except FileNotFoundError:
                # if no settings were made: use defaults
                uptime = default_up; breaktime = default_break
            message("Take a break started ("+uptime+"/"+breaktime+")")
            start(uptime, breaktime)
    
    if arg == "timeset":
        # the section below handle creating the settings file and/or setting the time
        command = 'zenity --entry --title="Edit time settings" --text="Enter uptime & breaktime:" --entry-text "'+\
                  default_up+' '+default_break+'"'
        try:
            t_set = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").split()
            try:
                if len([int(n) for n in t_set]) != 2:
                    msg = 'zenity --warning --text="Please enter both (and only) up- and breaktime."'
                else:
                    msg = 'zenity --info --title="New setings" --text="Timesettings succsfully changed."'
                    open(setting, "wt").write((" ").join(t_set))
                    pid = check_running()
                    # if script runs, restart with new values
                    if pid != False:
                        kill(pid)
                        start(t_set[0], t_set[1])
                        message("Take a break restarted "+("/").join(t_set))
            except ValueError:
                msg = 'zenity --warning --text="Please only enter integers."'
            subprocess.Popen(["/bin/bash", "-c", msg])
        except subprocess.CalledProcessError:
            pass
    

Настройки времени редактирования

Основной «GUI» должен работать без особого объяснения. Чтобы изменить настройки времени, добавьте пусковую установку в Unity Launcher (либо перетащите файл .desktop через Unity Launcher, либо заблокируйте «Take break» в Launcher), щелкните правой кнопкой мыши панель запуска и выберите «Изменить настройки времени»:

Затемвведите«времябезотказнойработы»(минуты)и«прерывание»(минуты),разделенныепробелом.Сценарийимеетвстроенныемерыпредосторожностидлянеправильноговвода:)

Еслинастройкивремениизменяютсявовремязапускасценария,онавтоматическизапускаетсясизмененныминастройками:

НАКОНЕЦ

Наданныймомент,вероятно,последнеередактирование:теперьпроектнаходитсяна стартовой панели -with изменений, дополнительных параметров и т. д.

sudo add-apt-repository ppa:vlijm/takeabreak
sudo apt-get update
sudo apt-get install takeabreak

Не стесняйтесь записывать ошибки и т. д. здесь или комментировать here . Спасибо orschiro за хороший вопрос, и Rinzwind за поддержку!

оставшиеся секунды прерывания (с использованием опции обратного отсчета)

    
ответ дан Jacob Vlijm 11.11.2015 в 11:24
источник
22

Вы также можете рассмотреть Workrave , хотя он больше не разрабатывается. Я нашел его простым в использовании и настраиваемым. В нем также есть некоторые преатальные сведения о том, как вы используете компьютер и сколько перерывов вы берете. Наконец, я считаю, что он также может синхронизировать себя между многими компьютерами, что полезно, например, если вы работаете как на ноутбуке, так и на школьном компьютере.

EDIT: у него есть много других функций, о которых я не упоминал, например, предлагая некоторые упражнения для вас, пока экран заблокирован. И он может принимать во внимание только время, когда вы используете компьютер, поэтому он не будет предлагать вам перерыв, когда вы вернетесь из туалета:)

ИЗМЕНИТЬ 2:

Убедитесь, что вы проверили режим «Чтение»!

Вышеупомянутая функция только подсчета времени, когда вы активно использовали компьютер, можно рассматривать как ошибку, если вы не много делаете (нет мыши, нет событий клавиатуры), потому что она будет только подскажите свой перерыв, когда вы кумулируете 1 час использования (или сколько времени вы настроили). В этих ситуациях включение режима «Чтение» заставит его запрашивать точное время, независимо от использования.

    
ответ дан Ciprian Tomoiagă 11.11.2015 в 13:17
12

Грубый, минималистский, способ командной строки:

sleep 1500; gnome-screensaver-command -l; sleep 300; killall gnome-screensaver

Это также можно превратить в ярлык рабочего стола или превратить в функцию в .bashrc

Почему 1500 и 300? потому что это секунды, 1500 секунд / 60 секунд в минуту = 25 минут.

Ниже приведен скрипт для таймера, который позволяет установить время сеанса и время перерыва, а также методы сигнализации перерыва.

Помните, что любой скрипт на linux должен быть сохранен как файл и иметь разрешения на выполнение с chmod +x /path/to/script.sh . Как только это будет сделано, вы можете привязать скрипт к ярлыку, как показано в Как связать файлы .sh с комбинацией клавиш? или создать ярлык на рабочем столе, как показано в Как создать пусковые установки на рабочем столе?

При запуске скрипта вы должны увидеть следующее меню:

#!/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 ###########     
ответ дан Sergiy Kolodyazhnyy 16.11.2015 в 11:16
8

Вот еще один инструмент под названием Safe Eyes для этой же цели.

sudo add-apt-repository ppa:slgobinath/safeeyes
sudo apt-get update
sudo apt-get install safeeyes

Особенности:

  • Короткиеперерывысглазнымиупражнениями
  • Длинныеперерывыдляизмененияфизическогоположенияиразминки
  • Строгийперерывдлятех,ктопристрастилсяккомпьютеру.
  • Небеспокоитьприработесполноэкраннымиприложениями(например:просмотрфильмов)
  • Отключитьклавиатурувовремяперерыва
  • Уведомленияпередкаждымперерывом
  • Поддержканесколькихдисплеев
  • Паузаавтоматически,еслисистеманеработает
  • Дополнительноезвуковоеоповещениевконцеразрывов
  • Поддержканесколькихязыков.

Подробнее: Ссылка

    
ответ дан Gobinath 23.10.2016 в 14:52
6

Я использовал xwrits в течение многих лет для этой цели.

sudo apt-get install xwrits

По умолчанию используется 5-минутный перерыв каждые 55 минут, но в соответствии с справочной страницей это время настраивается через опции командной строки breaktime и typetime , соответственно. Вы также можете контролировать, блокирует ли он экран, используя параметр +lock . Поэтому, чтобы установить его на 5-минутный перерыв каждые 25 минут, блокируя вас, вы должны запускать его следующим образом

xwrits typetime=25 breaktime=5 +lock &
    
ответ дан Michael Mandel 16.11.2015 в 21:48
0

drwright - это компонент прерывания ввода, который раньше был частью gnome: Ссылка

и есть доступный ppa (хотя я лично не использовал post-12.04): Ссылка

    
ответ дан andrew bezella 16.11.2015 в 23:09