Ustaw jasność tła początkowego uruchamiania w zależności od dnia

8

Używam Ubuntu 16.04 na notebooku Acer Aspire E5-773G. Niestety nie mogę używać klawiszy funkcyjnych jasności na ekranie logowania, więc pierwszy moment, w którym mogę zmienić jasność podświetlenia ekranu, to pomyślne wprowadzenie hasła i zalogowanie się.

Domyślnie Ubuntu uruchamia się z poziomem jasności ustawionym przy ostatnim wyłączeniu, ale nie jest to bardzo przydatne, ponieważ np. Czasami zamykam się późno w nocy z poziomem jasności około 5% i uruchamiam go ponownie następnego dnia, w którym ja potrzebowałby poziomu jasności co najmniej 50%, aby wygodnie widzieć wszystko. Odwrotnie, jeśli wyłączę się w ciągu dnia z może 80% jasnością i uruchomię go wieczorem, prawie oślepną mnie światła ...

Jak skonfigurować Ubuntu, aby uruchamiał się z poziomem jasności zależnym od bieżącego dnia? Chciałbym coś w rodzaju 10% jasności od 22:00 do 06:00, 60% jasności od 10:00 do 16:00 i 30% jasności pomiędzy. Wygładzanie krzywej jest w porządku, o ile można ją łatwo skonfigurować. Alternatywnie, jeśli znajdziesz sposób na ustawienie go w oparciu o lokalne czasy zachodu / wschodu słońca, byłby to duży bonus. :)

Modyfikowanie jasności zgodnie z tymi zasadami powinno odbywać się tylko podczas rozruchu lub opcjonalnie po przebudzeniu z trybu wstrzymania. Może nie automatycznie zmieniać jasności podczas pracy.

Bajt Dowódca
źródło
Kiedy po raz pierwszy przeszedłem z 14.04 na 16.04, zauważyłem, że systemd ustawia ostatnią jasność, co było marzeniem okulisty, ponieważ 14.04 zawsze szło pełną parą i trzeba było to zmienić ręcznie. Wyobrażam sobie, że coś można zmontować w miejscu, w którym przechowywanych jest wiele konfiguracji, a następnie ustawić je na podstawie pory dnia. Oprócz pytania o „lokalny czas wschodu / zachodu słońca” możesz również poprosić o „pochmurno vs słonecznie” :)
WinEunuuchs2Unix
Byłoby to pomocne w przypadku intensywności światła w pomieszczeniu (lub na zewnątrz na plaży): () [ askubuntu.com/questions/23593/…
WinEunuuchs2Unix
Mam kamerę internetową, ponieważ zwykle jej nie używam. Również ustawienie początkowej jasności na podstawie stałych, konfigurowalnych godzin dziennych jest całkowicie wystarczające, jeśli mogę dostosować wartości kilka razy w roku. Żadnych rzeczy zależnych od pogody, to niepotrzebne.
Bajt Dowódca
Tak, mam też taśmę maskującą. Starszy brat już wie za dużo.
WinEunuuchs2Unix
Czy próbowałeś xbacklightustawić jasność ekranu? Po zainstalowaniu będzie to wyglądać jak xbacklight -set 10dla 10% jasności. Jeśli zadziała, można go z łatwością dodać do cronjob lub czegoś takiego.
Terrance

Odpowiedzi:

4

Podstawowy pomysł:

  1. Zapisz plik konfiguracyjny /opt/.time_brightness_values:

    {
      "5,7": 0.25,
      "8,16": 0.50,
      "17,22": 0.75
    }
    

    Zwróć uwagę na podane wartości i przecinki. Pierwsza kolumna z podanymi wartościami reprezentuje zakres godzin w formacie 24-godzinnym, druga kolumna to procent. Na przykład, jeśli uruchomiłeś z godziny 5 na 7, twoja jasność byłaby ustawiona na 25 procent. Jeśli uruchomiłeś system z godziny 8 na 16, byłoby to 50 procent.

  2. Zapisz poniższy skrypt jako /opt/set_timed_brightness.py

    #!/usr/bin/env python3
    from __future__ import print_function
    from collections import OrderedDict
    import json
    import time
    import sys
    import os
    
    def read_config():
        dir = '/opt'
        filename = '.time_brightness_values'
        conf_file = os.path.join(dir,filename)
        brightness = None
        with open(conf_file) as f:
             try:
                  data = json.load(f)
                  data = OrderedDict(sorted(data.items()))
             except Exception as e:
                  print(e)
                  sys.exit(1)
             else:
                  keys = [ key.split(',') for key,value in data.items()]
                  keys.sort()
    
                  hour =  time.localtime().tm_hour
                  for key in keys:
                      if int(key[0]) <= hour and int(key[1]) >= hour:
                         brightness = data[','.join(key)]  
    
        return brightness
    
    def set_percentage(pcent):
        dir = os.listdir('/sys/class/backlight')
        dev = os.path.join('/sys/class/backlight',dir[0])   
    
        max = None
        with open(os.path.join(dev,'max_brightness')) as f:
            max = f.readline().strip()
    
        new = int(float(max)*pcent)
        new = str(new)
        with open(os.path.join(dev,'brightness'),'w') as f:
             f.write(new)
    
    def main():
        percentage = read_config()
        if percentage:
            set_percentage(percentage)
    
    
    if __name__ == '__main__':
        main()
    
  3. Ustaw greeter-setup-script=/opt/set_timed_brightness.pyw /etc/lightdm/lightdm.confpliku. Skrypt konfiguracji powitania działa jako root, a gdy system przejdzie do ekranu logowania, skrypt uruchomi się i ustawi wymaganą jasność.

  4. Jeśli chodzi o przebudzenie z zawieszenia, utwórz /etc/pm/sleep.d/set_timed_brightness.sh:

    #!/bin/bash
    
    case "${1}" in
            resume|thaw) python3 /opt/set_timed_brightness.py
        ;;
    esac
    

Pamiętaj : obowiązują wszystkie standardowe reguły, skrypty muszą być uruchamialne chmod +x, nazwy i wywołania każdego pliku muszą być spójne.

Sergiy Kolodyazhnyy
źródło
1
Drobny szczegół, być może dlatego, że nie znam Pythona i jego konsekwencji, ale /opt/.time_brightness_valuesbrakuje ustawień od 23:00 do 4:00. Wiem, że matka Bajta chce, żeby wtedy spał, ale on może łamać zasady dotyczące snu.
WinEunuuchs2Unix
@ WinEunuuchs2Unix to tylko przykład. Może skonfigurować plik dla niestandardowego zakresu czasu i wartości procentowej :)
Sergiy Kolodyazhnyy,
1

oczy

Eyesome to skrypt bashowy działający jako demon i śpiąc przez większość czasu 24/7. Automatycznie dostosowuje jasność ekranu (i opcjonalnie również gamma) do wyświetlacza laptopa za pośrednictwem interfejsu sprzętowego i maksymalnie dwóch innych monitorów za pomocą oprogramowania sterującego xrandr.

O wschodzie słońca (czas jest automatycznie pobierany z Internetu każdego dnia) jasność ekranu (i opcjonalnie także gamma) jest stopniowo dostosowywana. Stopniowe dostosowanie jest definiowane przez Ciebie, ale dla mnie działa 120 minut. Aby regulacje pozostały niezauważalne, ustaw odstęp uśpienia między regulacjami. Gdziekolwiek od 15 do 60 sekund jest prawdopodobnie najlepsze, a wartość domyślna to 60.

Po zakończeniu zmiany wschodu demon z oczami śpi wiele godzin, aż rozpocznie się zmiana wschodu. Używam 90 minut przed wschodem słońca, ale możesz ustawić dowolny okres.

Odwrotnie niż przejście na wschód słońca, przejście na zachód słońca stopniowo zmniejsza jasność ekranu (i opcjonalnie również gamma), więc jest niezauważalne.

Należy pamiętać, że podczas przejścia w nocy można zdefiniować współczynnik gamma, aby zwiększyć. Na przykład czerwoną gamma można zdefiniować jako 1,0 w ciągu dnia i 1,2 w nocy, aby zmniejszyć zmęczenie oczu. Niebieska gamma z kolei może być zdefiniowana jako 1,0 w ciągu dnia i .8 w nocy, więc zamiast tego spadnie.

Aby zmniejszyć zasoby, oczy śpią przez cały okres między zachodem a wschodem słońca. W zależności od miejsca zamieszkania i pory roku średni sen wyniesie 12 godzin.

Eyesome Setup - Menu główne

Aby skonfigurować oczy, dostępne jest menu główne:

eyesome main menu.png

Edytuj konfigurację - zakładka Ogólne

Po kliknięciu przycisku Edytuj w menu głównym początkowo wyświetlana jest karta Ogólne ustawienia edycji, jak pokazano poniżej.

konfiguracja eyesome ogólne tab.png

Nazwa kraju / miasta powinna pojawić się automatycznie. W razie potrzeby możesz to zmienić.

Edytuj konfigurację - karta Monitor 1

Kliknięcie powyższej karty Monitor 1 spowoduje wyświetlenie tego panelu w mojej konfiguracji (może być inny):

eyesome-edit-configuration-monitor-1.png

Nie zniechęcaj się tymi ustawieniami, ponieważ są one w większości automatycznie uzyskiwane przez oczy. Konieczne będzie jednak ustawienie jasności / poziomów w ciągu dnia i nocy.

Edytuj konfigurację - karta Monitor 3

Kliknięcie karty Monitor 3 powoduje wyświetlenie tego panelu w mojej konfiguracji (może być inny):

Karta Monitor 2 nie jest wyświetlana, ponieważ jest to nowy telewizor z adaptacyjną jasnością i Smart OS. Nie wymaga zastępowania przez Eyesome.

wprowadź opis zdjęcia tutaj

Jeśli po zainstalowaniu oprogramowania eyesome dołączysz inny monitor do swojego systemu, może być konieczne wprowadzenie xrandrnazwy monitora.

Niesamowita konfiguracja - test 5 sekund

W menu głównym możesz przetestować ustawienia jasności i gamma w ciągu dnia i nocy przez 5 sekund, klikając odpowiednio przyciski Dzień i Noc . Możesz zmienić czas trwania testu z 5 sekund na 20 sekund z poziomu Edytuj konfigurację - zakładka Ogólne.

Oto jak wygląda 5-sekundowy test nocny:

eyesome nighttime test.gif

Niezwykła obsługa zdarzeń

Załóżmy, że zawieszasz laptopa, gdy jest rano przed pracą, a ekran jest w pełni przyciemniony. Wracasz do domu po pracy, gdy słońce jest wysoko na niebie, i otwierasz laptopa. Ekran jest tak ciemny, że nie można go odczytać.

Aby rozwiązać ten scenariusz, zapewniono systemowy plik kontrolny:

  • /etc/systemd/system-sleep/systemd-wake-eyesome plik sterujący jest wywoływany za każdym razem, gdy system zawiesza się lub wznawia.
  • Plik sterujący wywołuje skrypt bash, /usr/local/bin/wake-eyesome.shaby zresetować jasność do pełnego, a następnie uśpić do przejścia na zachód słońca.

Oglądasz film na zewnętrznym telewizorze w nocy i zamykasz pokrywę laptopa, aby lepiej oglądać. Ubuntu / Lightdm / xrandr zajmuje kilka sekund, a następnie resetuje zewnętrzny telewizor do pełnej pełnej jasności. DOTYK do twoich oczu.

Aby rozwiązać ten scenariusz, dostępny jest plik kontrolny zdarzenia acpi:

  • /etc/acpi/event/lid-event-eyesome plik sterujący jest wywoływany za każdym razem, gdy pokrywa laptopa jest otwierana lub zamykana.
  • Plik sterujący wywołuje skrypt bash /etc/acpi/acpi-lid-eyesome.shdo obsługi otwierania i zamykania pokrywy.
  • Z kolei wywoływane przez skrypt skrypty eyeshash /usr/local/bin/wake-eyesome.shresetują jasność podczas nocnego oglądania, a następnie śpią aż do zmiany zachodu słońca.

    Zawieś / Zamknij pokrywę / Testuj jasność / wyłącz zasilanie / hotplug

Podsumowanie

Ta odpowiedź trwa prawie dwa lata do następnego dnia po opublikowaniu pytania. W lutym 2017 r. Usunięto wcześniejszą wersję tej odpowiedzi, którą właśnie usunąłem i poprawiłem.

Eyesome można pobrać z: https://github.com/WinEunuuchs2Unix/eyesome

Ten program został właśnie wydany we wrześniu 2018 roku, więc daj mi znać, jeśli znajdziesz jakieś problemy lub masz sugestie dotyczące ulepszeń.

Faza dokumentacji dopiero się rozpoczyna, więc nie wahaj się zadawać pytań. Twoje pytania mogą nawet doprowadzić do ulepszenia dokumentacji.

WinEunuuchs2Unix
źródło
Częścią jest odpowiedź WIP, ponieważ później dodam cronowy skrypt cash, który ustawia jasność na podstawie godzin dziennych. Druga część to odpowiedź na pytanie, w jaki sposób można znaleźć godziny dzienne w opublikowanym linku. Możesz zintegrować ten link z odpowiedzią Serga. Ale może kiedy wszystko działa, powinienem opublikować nowe pytania i odpowiedzi, to twoja sugestia? (Serg miał obawy na czacie 1/2 godziny temu)
WinEunuuchs2Unix