Stellen Sie die Hintergrundhelligkeit beim ersten Start abhängig von der Tageszeit ein

8

Ich verwende Ubuntu 16.04 auf einem Acer Aspire E5-773G-Notebook. Leider kann ich meine Helligkeitsfunktionstasten nicht auf dem Anmeldebildschirm verwenden. Der erste Moment, in dem ich die Helligkeit meiner Hintergrundbeleuchtung ändern kann, ist nach erfolgreicher Eingabe meines Passworts und Anmeldung.

Standardmäßig bootet Ubuntu mit der Helligkeit, die beim letzten Herunterfahren eingestellt wurde, aber dies ist nicht sehr nützlich, da ich manchmal manchmal spät in der Nacht mit einer Helligkeitsstufe von etwa 5% herunterfahre und es am nächsten Tag wieder starte, wo ich es tue würde eine Helligkeit von mindestens 50% benötigen, um alles bequem zu sehen. Umgekehrt, wenn ich tagsüber mit vielleicht 80% Helligkeit abschalte und abends hochfahre, werde ich fast von den Lichtern geblendet ...

Wie kann ich Ubuntu so konfigurieren, dass es abhängig von der aktuellen Tageszeit mit einer Helligkeitsstufe startet? Ich möchte so etwas wie 10% Helligkeit von 22:00 bis 06:00 Uhr, 60% Helligkeit von 10:00 bis 16:00 Uhr und 30% Helligkeit dazwischen. Das Glätten der Kurve ist in Ordnung, solange sie leicht konfigurierbar bleibt. Wenn Sie alternativ einen Weg finden, ihn basierend auf den lokalen Sonnenuntergangs- / Sonnenaufgangszeiten einzustellen, wäre dies ein großer Bonus. :) :)

Das Ändern der Helligkeit gemäß diesen Regeln sollte nur während des Startvorgangs oder optional beim Aufwachen aus dem Suspend erfolgen. Während ich arbeite, ändert sich die Helligkeit möglicherweise nicht automatisch.

Byte Commander
quelle
Als ich zum ersten Mal von 14.04 auf 16.04 konvertierte, bemerkte ich, dass systemd die letzte Helligkeit einstellte, was ein Traum eines Augenarztes war, da 14.04 immer auf Hochtouren lief und man sie manuell ändern musste. Ich stelle mir vor, dass etwas manipuliert werden kann, in dem mehrere Konfigurationen gespeichert und dann basierend auf der Tageszeit festgelegt werden. Neben der Frage nach "lokalen Sonnenuntergangs- / Sonnenaufgangszeiten" können Sie auch nach "bewölkt gegen sonnig" fragen :)
WinEunuuchs2Unix
Dies wäre hilfreich, um dies basierend auf der Lichtintensität im Raum (oder draußen am Strand) zu tun
WinEunuuchs2Unix
Ich habe Band auf meiner Webcam, da ich es normalerweise nicht benutze. Außerdem reicht es völlig aus, die anfängliche Helligkeit basierend auf festen, konfigurierbaren Tagesstunden einzustellen, wenn ich die Werte einige Male im Jahr anpassen kann. Keine wetterabhängigen Sachen, das ist unnötig.
Byte Commander
Ja, ich habe auch Klebeband auf meinem. Großer Bruder weiß schon zu viel.
WinEunuuchs2Unix
Haben Sie versucht xbacklight, die Helligkeit des Bildschirms einzustellen? Nach der Installation würde es xbacklight -set 10für 10% Helligkeit sein. Wenn es funktioniert, kann es leicht zu einem Cronjob oder ähnlichem hinzugefügt werden.
Terrance

Antworten:

4

Grundidee:

  1. Konfigurationsdatei speichern /opt/.time_brightness_values:

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

    Achten Sie auf Anführungszeichen und Kommas. Die erste Spalte mit Anführungszeichen repräsentiert den Stundenbereich im 24-Stunden-Format, die zweite Spalte ist der Prozentsatz. Wenn Sie beispielsweise von 5 bis 7 Uhr booten, wird Ihre Helligkeit auf 25 Prozent eingestellt. Wenn Sie von 8 bis 16 Uhr booten, wären es 50 Prozent.

  2. Speichern Sie das folgende Skript als /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. In greeter-setup-script=/opt/set_timed_brightness.pyder /etc/lightdm/lightdm.confDatei einstellen. Das Greeter-Setup-Skript wird als Root ausgeführt. Sobald Ihr System den Anmeldebildschirm erreicht hat, wird das Skript ausgeführt und stellt die gewünschte Helligkeit ein.

  4. Erstellen Sie Folgendes, wenn Sie aus dem Suspend aufwachen /etc/pm/sleep.d/set_timed_brightness.sh:

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

Denken Sie daran : Es gelten alle Standardregeln. Die Skripte müssen ausführbar gemacht werden chmod +x. Die Benennung und Aufrufe jeder Datei müssen konsistent sein.

Sergiy Kolodyazhnyy
quelle
1
Ein kleines Detail vielleicht, weil ich Python und die Auswirkungen nicht kenne, aber /opt/.time_brightness_valuesEinstellungen für 23 Uhr bis 4 Uhr morgens fehlen. Ich weiß, dass Bytes Mutter möchte, dass er dann schläft, aber er verstößt möglicherweise gegen die Regeln für die Schlafenszeit.
WinEunuuchs2Unix
@ WinEunuuchs2Unix das ist nur ein Beispiel. Er kann die Datei für benutzerdefinierten Zeitraum und Prozentsatz konfigurieren :)
Sergiy Kolodyazhnyy
1

gutaussehend

Eyesome ist ein Bash-Skript, das als Deamon ausgeführt wird und die meiste Zeit rund um die Uhr schläft. Über die Hardwareschnittstelle und bis zu zwei weitere Monitore wird die Bildschirmhelligkeit (und optional auch Gamma) für Ihr Laptop-Display mithilfe der xrandr-Softwaresteuerung automatisch angepasst.

Bei Sonnenaufgang (die Uhrzeit wird jeden Tag automatisch aus dem Internet abgerufen) wird die Bildschirmhelligkeit (und optional auch Gamma) schrittweise angepasst. Die schrittweise Anpassung wird von Ihnen festgelegt, aber 120 Minuten funktionieren für mich. Um die Einstellungen unbemerkt zu lassen, legen Sie ein Schlafintervall zwischen den Einstellungen fest. Ein Wert zwischen 15 und 60 Sekunden ist wahrscheinlich am besten und der Standardwert ist 60.

Nachdem der Übergang zum Sonnenaufgang abgeschlossen ist, schläft der hübsche Dämon viele Stunden, bis der Übergang zum Sonnenaufgang beginnt. Ich benutze 90 Minuten vor Sonnenaufgang, aber Sie können einen beliebigen Zeitraum einstellen.

Im Gegensatz zum Sonnenaufgangsübergang verringert der Sonnenuntergangsübergang allmählich die Bildschirmhelligkeit (und optional auch Gamma), sodass er nicht wahrgenommen wird.

Beachten Sie, dass während des nächtlichen Übergangs Gamma definiert werden kann, um zuzunehmen. Zum Beispiel kann rotes Gamma als 1,0 während des Tages und 1,2 während der Nacht definiert werden, um die Belastung der Augen zu verringern. Blaues Gamma wiederum kann tagsüber als 1,0 und nachts als 0,8 definiert werden, sodass es stattdessen abnimmt.

Um die Ressourcen zu reduzieren, schläft Eyeome die gesamte Zeit zwischen Sonnenuntergang und Sonnenaufgang. Abhängig von Ihrem Wohnort und der Jahreszeit beträgt der durchschnittliche Schlaf 12 Stunden.

Eyesome Setup - Hauptmenü

Zum Konfigurieren von eyeome wird ein Hauptmenü bereitgestellt:

ansehnliches Hauptmenü.png

Konfiguration bearbeiten - Registerkarte Allgemein

Wenn Sie auf dem Bearbeiten - Taste im Hauptmenü der Konfiguration bearbeiten Registerkarte Allgemein zunächst wie unten dargestellt angezeigt.

auffällige Konfiguration allgemein tab.png

Der Name Ihres Landes / Ihrer Stadt sollte automatisch angezeigt werden. Bei Bedarf können Sie es überschreiben.

Konfiguration bearbeiten - Registerkarte Monitor 1

Wenn Sie oben auf die Registerkarte Monitor 1 klicken, wird dieses Fenster in meiner Konfiguration angezeigt (Ihre kann anders sein):

eyeome-edit-configuration-monitor-1.png

Lassen Sie sich von diesen Einstellungen nicht entmutigen, sie werden größtenteils automatisch von eyeome erhalten. Sie müssen jedoch die Helligkeit / Pegel für Tag und Nacht einstellen.

Konfiguration bearbeiten - Registerkarte Monitor 3

Wenn Sie auf die Registerkarte Monitor 3 klicken, wird dieses Fenster in meiner Konfiguration angezeigt (Ihre kann anders sein):

Die Registerkarte Monitor 2 wird nicht angezeigt, da es sich um ein neues Fernsehgerät mit adaptiver Helligkeit und intelligentem Betriebssystem handelt. Es erfordert keine Überschreibungen durch Eyesome.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie nach der Installation von eyeome einen anderen Monitor an Ihr System anschließen, müssen Sie möglicherweise den Monitornamen eingeben xrandr.

Eyesome Setup - 5 Sekunden Test

Im Hauptmenü können Sie Ihren Tag und Nacht Helligkeit und Gamma - Einstellungen für 5 Sekunden testen , indem Sie auf die Schaltfläche Daytime und Nacht Tasten sind. Sie können die Dauer des Tests von 5 Sekunden bis zu 20 Sekunden auf der Registerkarte Konfiguration bearbeiten - Allgemein ändern.

So sieht der 5-Sekunden-Nachttest aus:

schöner nächtlicher test.gif

Ungewöhnliche Ereignisbehandlung

Angenommen, Sie hängen Ihren Laptop am Morgen vor der Arbeit an und der Bildschirm ist voll dunkel. Sie kommen nach der Arbeit nach Hause, wenn die Sonne hoch am Himmel steht, und öffnen Ihren Laptop. Der Bildschirm ist so dunkel, dass Sie ihn nicht lesen können.

Um dieses Szenario anzugehen, wird eine systemd-Steuerdatei bereitgestellt:

  • /etc/systemd/system-sleep/systemd-wake-eyesome Die Steuerdatei wird immer dann aufgerufen, wenn das System angehalten oder fortgesetzt wird.
  • Die Steuerdatei ruft das Bash-Skript /usr/local/bin/wake-eyesome.shauf, um die Helligkeit auf voll zurückzusetzen und dann bis zum Übergang zum Sonnenuntergang zu schlafen.

Sie sehen nachts einen Film auf Ihrem externen Fernseher und schließen den Laptopdeckel, um ihn besser sehen zu können. Ubuntu / Lightdm / xrandr dauert einige Sekunden und setzt dann Ihr externes Fernsehgerät auf volle volle Helligkeit zurück. Autsch zu deinen Augen.

Um dieses Szenario anzugehen, wird eine acpi-Ereignissteuerungsdatei bereitgestellt:

  • /etc/acpi/event/lid-event-eyesome Die Steuerdatei wird immer dann aufgerufen, wenn der Laptopdeckel geöffnet oder geschlossen wird.
  • Die Steuerdatei ruft das Bash-Skript /etc/acpi/acpi-lid-eyesome.shauf, um das Öffnen und Schließen des Deckels zu handhaben.
  • Das ansehnliche Bash-Skript ruft wiederum dazu auf, die /usr/local/bin/wake-eyesome.shHelligkeit für die nächtliche Anzeige zurückzusetzen, und schläft dann bis zum Übergang zum Sonnenuntergang.

    Anhalten / Schließen des Deckels / Testen der Helligkeit / Ausschalten / Hotplug

Zusammenfassung

Diese Antwort ist fast zwei Jahre nach dem Tag, an dem die Frage gestellt wurde. Im Februar 2017 wurde eine frühe Version dieser Antwort gelöscht, die ich gerade gelöscht und überarbeitet habe.

Eyesome kann heruntergeladen werden von: https://github.com/WinEunuuchs2Unix/eyesome

Dieses Programm wurde erst im September 2018 veröffentlicht. Bitte lassen Sie mich wissen, wenn Sie Probleme haben oder Verbesserungsvorschläge haben.

Die Dokumentationsphase beginnt gerade, also zögern Sie nicht, Fragen zu stellen. Ihre Fragen können sogar zu Verbesserungen der Dokumentation führen.

WinEunuuchs2Unix
quelle
Ein Teil davon ist die WIP-Antwort, da ich später ein Cron-Stunden-Bash-Skript hinzufügen werde, das die Helligkeit basierend auf den Tageslichtstunden festlegt. Der andere Teil ist die Beantwortung Ihrer Frage, wie die Tageslichtstunden unter dem angegebenen Link zu finden sind. Sie könnten diesen Link in Sergs Antwort integrieren. Aber vielleicht, wenn alles funktioniert, sollte ich ein neues Q & A posten, ist dein Vorschlag ??? (Serg hatte vor einer
halben