Bilgisayardan uzaklaşmak için ekranı otomatik olarak kilitleyen bir zamanlayıcı mı?

61

Aşağıdaki iş akışını sağlayan bir grafik veya komut satırı programı arıyorum:

  1. 25 dakikalık bir oturum başlat
  2. 25dk ekran 5dk için otomatik olarak kilitlendikten sonra (veya belki sadece siyah mı döndü?)
  3. Artık mola veriyorum çünkü siyah veya kilitli bir ekrana bakmak dışında bilgisayarın önünde hiçbir şey yapamayacağım:)
  4. 5 dakika sonra ekran otomatik olarak geri döner ve çalışmaya devam edebilirim

Tam olarak bunu yapan bir program var mı?

    
sordu orschiro 11.11.2015 10:32

6 cevap

81

Tam bir uygulama muhtemelen büyük olasılıkla bir türden olacaktır; Küçük bir arka plan betiği işi yapıyor.

Aşağıdaki betik, bir döngü içinde, tam olarak bahsettiğiniz gibi yapacaktır: keyfi bir süre için "normal" ekranını tutar (dakikalar içinde, dakikaları kısmi olarak ayarlamak için yüzerleri kullanabilirsiniz) ve ya siyahları ekrandan çıkarır ) veya "mola zamanı" için, seçiminize :) baş aşağı döndürür.

veya:

Komut dosyası

#!/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()

Nasıl kullanılır?

  1. Komut dosyasını boş bir dosyaya kopyalayın, takeabreak.py olarak kaydedin
  2. Seçiminizde, komut satırında belirtildiği gibi 15 veya 17 numaralı satırları (ekranın karartılmasını istiyorsanız bu adımı atlayabilirsiniz) kaldırın.
  3. Komut dosyası tarafından komut dosyasını bir uçbirimden sınayın:

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

    örneğin:

    python3 /path/to/takeabreak.py 25 5
    

    Her 25 dakikada bir çalıştıktan sonra 5 dakika ara verin

  4. İstediğinizi yaparsa, onu başlangıç ​​uygulamalarına ekleyin: Dash & gt; Başlangıç ​​Uygulamaları & gt; Komutu ekle:

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



DÜZENLEME

Elbette, senaryoyu hayal edebileceğiniz bir şeyle "giydirebilirsiniz". Aklıma ilk gelen küçük bir mesaj, molanın yakında olduğunu size bildiren ...

Kod

#!/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

Unity için Temel GUI öğeleri

Açıklamada ele alındığı gibi, betiğin üzerine geçiş yapmak ve çalışma zamanı / kesinti ayarlarını değiştirmek için temel GUI işlevselliği ile bir sürümün (kurulumun) altında. Talimatları izlerseniz, kurulum oldukça basittir:)

Malzemeler:

  1. İki komut dosyası (aşağıda):

    • Yukarıdaki kod (lar) yerine geçen gerçek kod olan takeabrake_run
      ,

    ve

    • Beklendiği gibi (time-) ayarlarını yönetmek ve komut dosyasını açmak için betik olan takeabreak_gui
      .
  2. .desktop dosyası:

    [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. ve bir simge:


    (takeabreak.png olarak resmi kaydet & gt; kaydet)

Nasıl ayarlanır?

  1. Oluşturma, henüz mevcut değilse, dizin ~/bin
  2. source ~/.profile içeriğinde ~/bin varlığını "etkinleştirmek" için çıkış yapın veya çalıştırın veya $PATH dosyasını çalıştırın.
  3. Aşağıdaki komut dosyalarını aşağıdaki iki boş dosyaya kopyalayın, onları (tam olarak) adlandırın

    takeabreak_gui
    

    ve

    takeabreak_run
    

    (uzantı yok!) ve bunları ~/bin

    dosyasına kaydedin
  4. Her iki komut dosyasını da çalıştırabilirsiniz (!)
  5. Simgeyi ( right-click > save image as ) bilgisayarınıza kopyalayın. Adını (tam olarak) takeabreak.png olarak adlandırın
  6. .desktop dosyasını boş bir dosyaya kopyalayın. Satırı düzenle:

    Icon=/path/to/takeabreak.png
    

    ve simgenin yolunu gerçek yolla değiştirin.

İşte bu!

Komut dosyaları:

  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
    

Zaman ayarlarını düzenleme

Temel "GUI" çok fazla açıklama yapmadan çalışmalıdır. Zaman ayarlarını düzenlemek için, başlatıcıyı Unity Launcher'a ekleyin (ya .desktop dosyasını Unity Launcher üzerinden sürükleyin ya da Launcher'a bir mola verin), başlatıcıya sağ tıklayın ve "Zaman ayarlarını değiştir" seçeneğini seçin:

Ardından, bir boşlukla ayrılmış "çalışma zamanı" (dakika) ve "kesinti zamanı" (dakika) girin. Komut dosyası, yanlış giriş için yerleşik önlemlere sahiptir:)

Komut dosyası çalışırken zaman ayarları değiştirilirse, değiştirilen ayarlarla otomatik olarak yeniden başlatılır:

NİHAYET

Muhtemelen en son düzenleme için: proje şu anda lansmanı sitesinde çok değişiklik, daha fazla seçenek vb.

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

Hataları dosyalamaktan çekinmeyin. burada veya yorum yapın here . Güzel soru için orschiro'ya ve teşvik için Rinzwind'e teşekkürler!

kalan saniye saniye (geri sayım seçeneği ile)

    
verilen cevap Jacob Vlijm 11.11.2015 11:24
22

Artık geliştirme aşamasında olmasa da, Workrave 'ı da düşünmek isteyebilirsiniz. Kullanımı kolay ve son derece özelleştirilebilir buldum. Ayrıca, bilgisayarı nasıl kullandığınız ve kaç tane mola verdiğiniz hakkında bazı güzel istatistikler de var. Son olarak, birçok bilgisayar arasında da kendini senkronize edebileceğine inanıyorum, örneğin, hem dizüstü bilgisayarda hem de bir okul bilgisayarında çalışıyorsanız yararlıdır.

DÜZENLEME: Ekranın engellenmesi sırasında yapmanız gereken bazı alıştırmalar önermek gibi, daha önce bahsetmediğim pek çok başka özelliği var. Ve sadece bilgisayarı kullandığınız zaman hesaba katılabilir, bu yüzden tuvaletten geri döndüğünüzde size bir mola vermeyecektir:)

DÜZEN 2:

"Okuma" modunu kontrol ettiğinizden emin olun!

Yukarıdaki özelliği , sadece bilgisayarla aktif olarak kullandığınız süreyi saymanın çok fazla bir şey yapmadığınız bir hata olarak görülebilir (fare yok, klavye olayı yok) çünkü yalnızca kullanımın 1 saatini (veya ne kadar zaman kurdunuz) kestiğinizde mola verin. Bu durumlarda, "Okuma" modunun etkinleştirilmesi, kullanımdan bağımsız olarak tam zamanında bilgi verir.

    
verilen cevap Ciprian Tomoiagă 11.11.2015 13:17
12

Ham, minimalist, komut satırı yolu:

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

Ayrıca, bir masaüstü kısayoluna dönüştürülebilir veya .bashrc

işlevine dönüştürülebilir.

Neden 1500 ve 300? çünkü saniyeler, saniyede 1500 saniye / 60 saniye = 25 dakika.

Aşağıda, değişken oturum ve ara verme süresinin yanı sıra aradaki sinyalin sinyallerini belirleme yöntemlerine izin veren bir zamanlayıcı için bir betik bulunmaktadır.

Linux'taki herhangi bir komut dosyasının bir dosya olarak kaydedileceğini ve chmod +x /path/to/script.sh ile ayarlanmış yürütülebilir izinlere sahip olduğunu unutmayın. Bu yapıldıktan sonra, betiği .sh dosyalarını klavye kombinasyonuna nasıl bağlarım? Gibi bir kısayol olarak bağlayabilirsiniz. Masaüstünde nasıl başlatıcılar oluşturabilirim?

Komut dosyasını başlattığınızda, bunun gibi bir menü görmelisiniz:

#!/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;
#  is provided from chooseBreakMethod function
#####################################################

function screenSaver
{
  gnome-screensaver-command -l; sleep  ; 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
#  provided in chooseBreakMethod function
##################################################
function dialogBreak
{
 gnome-terminal --full-screen  -e  "bash -c 'sleep  | 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
#  is provided from chooseBreakMethod function
################################################################

function dimScreen
{
  xrandr  | awk ' == "connected" {print }' | xargs -I % xrandr --output % --brightness 0.5
  notify-send 'Take a Break'
  sleep 
  xrandr  | awk ' == "connected" {print }' | 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
{

 #  is method passed from  ${SETS[3]}
 #  is break time passed from ${SETS[2]}
  case  in
    1) dimScreen  ;;
        2) dialogBreak  ; sleep  ;;
    3) screenSaver  ;;
  esac

}


function minutesToSeconds
{
  echo $((*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 ###########
    
verilen cevap Sergiy Kolodyazhnyy 16.11.2015 11:16
8

İşte aynı amaçla Güvenli Gözler adlı başka bir araç.

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

Özellikler:

  • Göz egzersizleri ile kısa molalar
  • Fiziksel durumu değiştirmek ve ısınmak için uzun aralar
  • Bilgisayara bağımlı olanlar için sıkı bir ara verme
  • Tam ekran uygulamalarla çalışırken rahatsız etmeyin (Örn: Film izleme)
  • Klavyeyi mola sırasında devre dışı bırak
  • Her aradan önce bildirimler
  • Birden çok ekranı destekle
  • Sistem boştaysa otomatik olarak duraklat
  • Sona erdiğinde isteğe bağlı sesli uyarı
  • Çoklu dil desteği

Daha fazla ayrıntı için: İşte

    
verilen cevap Gobinath 23.10.2016 14:52
6

Bu amaçla uzun yıllar boyunca xwrits kullandım.

sudo apt-get install xwrits

Varsayılan olarak her 55 dakikada bir 5 dakikalık mola verilir, ancak adam sayfasına göre bu zamanlar özelleştirilebilir Sırasıyla breaktime ve typetime komut satırı seçenekleri aracılığıyla. Ekranı +lock seçeneğini kullanarak kilitleyip kilitlemediğini de kontrol edebilirsiniz. Yani her 25 dakikada bir 5 dakikalık bir mola vermek için onu kilitlerseniz, böyle çalıştırmalısınız

xwrits typetime=25 breaktime=5 +lock &
    
verilen cevap Michael Mandel 16.11.2015 21:48
0

drwright, gnome'nin bir parçası olarak kullanılan yazım sonu bileşeniydi: İşte

ve mevcut bir ppa var (12.04 sonrası kişisel olarak kullanmadığım halde): İşte

    
verilen cevap andrew bezella 16.11.2015 23:09

Etiketlerdeki diğer soruları oku