Réglez la luminosité d'arrière-plan du démarrage initial en fonction de la journée

8

J'exécute Ubuntu 16.04 sur un ordinateur portable Acer Aspire E5-773G. Malheureusement, je ne peux pas utiliser mes touches de fonction de luminosité sur l'écran de connexion, donc le premier moment où je peux changer la luminosité du rétroéclairage de mon écran est après avoir réussi à entrer mon mot de passe et à me connecter.

Par défaut, Ubuntu démarre avec le niveau de luminosité qui a été défini lors du dernier arrêt, mais ce n'est pas très utile car par exemple, je m'arrête tard le soir avec un niveau de luminosité d'environ 5% et je le redémarre le lendemain où je aurait besoin d'un niveau de luminosité d'au moins 50% pour tout voir confortablement. Inversement, si j'arrête pendant la journée avec peut-être 80% de luminosité et que je démarre le soir, je suis presque aveuglé par les lumières ...

Comment puis-je configurer Ubuntu pour démarrer avec un niveau de luminosité en fonction de la journée actuelle? Je voudrais quelque chose comme 10% de luminosité de 22h00 à 06h00, 60% de luminosité de 10h00 à 16h00 et 30% de luminosité entre les deux. Le lissage de la courbe est correct, tant qu'il reste facilement configurable. Alternativement, si vous trouvez un moyen de le définir en fonction des heures locales de coucher / lever de soleil, ce serait un gros bonus. :)

La modification de la luminosité selon ces règles ne doit avoir lieu qu'au démarrage ou éventuellement au réveil de la suspension. Il se peut que la luminosité ne change pas automatiquement lorsque je travaille.

Byte Commander
la source
Lorsque j'ai converti pour la première fois du 14.04 au 16.04, j'ai remarqué que systemd définissait la dernière luminosité qui était le rêve d'un ophtalmologue parce que le 14.04 fonctionnait toujours à plein régime et que vous deviez le changer manuellement. J'imagine que quelque chose peut être truqué où plusieurs configurations sont stockées, puis définies en fonction de l'heure de la journée. En plus de demander des "heures locales de coucher / lever de soleil", vous pouvez également demander "nuageux vs ensoleillé" :)
WinEunuuchs2Unix
Cela serait utile pour le faire en fonction de l'intensité lumineuse dans la pièce (ou à l'extérieur sur la plage): () [ askubuntu.com/questions/23593/…
WinEunuuchs2Unix
J'ai de la bande sur ma webcam car je ne l'utilise normalement pas. De plus, le réglage de la luminosité initiale sur la base d'heures de jour fixes et configurables est totalement suffisant si je peux adapter les valeurs plusieurs fois par an. Aucune substance dépendante de la météo, ce n'est pas nécessaire.
Byte Commander
Oui, j'ai aussi du ruban adhésif sur le mien. Le grand frère en sait déjà trop.
WinEunuuchs2Unix
Avez-vous essayé d'utiliser xbacklightpour régler la luminosité de l'écran? Une fois installé, ce serait comme xbacklight -set 10pour une luminosité de 10%. Si cela fonctionne, il pourrait facilement être ajouté à un cronjob ou quelque chose comme ça.
Terrance

Réponses:

4

Idée basique:

  1. Enregistrez le fichier de configuration /opt/.time_brightness_values:

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

    Faites attention aux valeurs citées et aux virgules. La première colonne avec les valeurs citées représente la plage horaire au format 24 heures, la deuxième colonne est le pourcentage. Par exemple, si vous avez démarré de 5 à 7 heures, votre luminosité serait réglée à 25%. Si vous démarriez de 8 à 16 heures, ce serait 50%.

  2. Enregistrez le script ci-dessous sous /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. Définissez greeter-setup-script=/opt/set_timed_brightness.pydans le /etc/lightdm/lightdm.conffichier. Le script de configuration de greeter s'exécute en tant que root et une fois que votre système atteint l'écran de connexion, le script s'exécute et définit la luminosité dont vous avez besoin.

  4. En ce qui concerne le réveil de la suspension, créez /etc/pm/sleep.d/set_timed_brightness.sh:

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

N'oubliez pas : toutes les règles standard s'appliquent, les scripts doivent être rendus exécutables chmod +x, la dénomination et les appels à chaque fichier doivent être cohérents.

Sergiy Kolodyazhnyy
la source
1
Un détail mineur peut-être parce que je ne connais pas le python et les ramifications mais qu'il /opt/.time_brightness_valuesmanque des paramètres de 23h à 4h. Je sais que la mère de Byte veut qu'il dorme alors, mais il pourrait enfreindre les règles de l'heure du coucher.
WinEunuuchs2Unix
@ WinEunuuchs2Unix c'est juste un exemple. Il peut configurer le fichier pour une plage de temps et un pourcentage personnalisés :)
Sergiy Kolodyazhnyy
1

horrible

Eyesome est un script bash fonctionnant comme démon et dormant la plupart du temps 24h / 24 et 7j / 7. Il ajuste automatiquement la luminosité de l'écran (et éventuellement le gamma aussi) pour l'affichage de votre ordinateur portable via l'interface matérielle et jusqu'à deux autres moniteurs à l'aide du contrôle logiciel de xrandr.

Au lever du soleil (l'heure est automatiquement obtenue sur Internet chaque jour), la luminosité de votre écran (et éventuellement le gamma aussi) est ajustée progressivement. L'ajustement progressif est défini par vous mais, 120 minutes me conviennent. Pour garder les ajustements inaperçus, définissez un intervalle de sommeil entre les ajustements. N'importe où entre 15 et 60 secondes est probablement le meilleur et la valeur par défaut est 60.

Une fois la transition au lever du soleil terminée, le démon a beau dormir pendant plusieurs heures jusqu'au début de la transition au lever du soleil. J'utilise 90 minutes avant le lever du soleil, mais vous pouvez définir la période de votre choix.

À l'inverse de la transition au lever du soleil, la transition au coucher du soleil diminue progressivement la luminosité de l'écran (et éventuellement le gamma aussi) de sorte qu'elle est imperceptible.

Notez que pendant la transition nocturne, le gamma peut être défini pour augmenter. Par exemple, le gamma rouge peut être défini comme 1,0 pendant le jour et 1,2 pendant la nuit pour réduire la fatigue oculaire. Le gamma bleu à son tour peut être défini comme 1,0 pendant le jour et 0,8 pendant la nuit, il diminuera donc à la place.

Pour réduire les ressources, un sommeil somnolent pendant toute la période entre le coucher et le lever du soleil. Selon l'endroit où vous vivez et la saison de l'année, le sommeil moyen sera de 12 heures.

Configuration impressionnante - Menu principal

Pour configurer eyesome, un menu principal est fourni:

menu principal eyes.png

Modifier la configuration - onglet Général

Lorsque vous cliquez sur le bouton Modifier dans le menu principal, l'onglet général de modification de la configuration apparaît initialement comme illustré ci-dessous.

configuration générale de eyesome tab.png

Le nom de votre pays / ville devrait apparaître automatiquement. Si nécessaire, vous pouvez le remplacer.

Modifier la configuration - onglet Moniteur 1

En cliquant sur l'onglet Moniteur 1 ci-dessus, ce panneau apparaîtra dans ma configuration (la vôtre peut être différente):

eyesome-edit-configuration-monitor-1.png

Ne vous laissez pas intimider par ces paramètres, ils sont pour la plupart automatiquement obtenus par eyesome. Vous devrez cependant régler la luminosité et les niveaux de jour et de nuit.

Modifier la configuration - onglet Moniteur 3

Cliquer sur l'onglet Monitor 3 révèle ce panneau dans ma configuration (la vôtre peut être différente):

L'onglet Moniteur 2 n'est pas affiché car il s'agit d'un nouveau téléviseur doté d'une luminosité adaptative et d'un système d'exploitation intelligent. Il ne nécessite aucun remplacement par Eyesome.

entrez la description de l'image ici

Si, après avoir installé eyesome, vous connectez un moniteur différent à votre système, vous devrez peut-être saisir le xrandrnom du moniteur.

Configuration impressionnante - test de 5 secondes

Dans le menu principal, vous pouvez tester vos paramètres de luminosité et de gamma de jour et de nuit pendant 5 secondes en cliquant respectivement sur les boutons de jour et de nuit . Vous pouvez modifier la durée du test de 5 secondes à 20 secondes dans l'onglet Modifier la configuration - Général.

Voici à quoi ressemble le test nocturne de 5 secondes:

horrible nuit test.gif

Gestion d'événements inhabituels

Supposons que vous suspendez votre ordinateur portable le matin avant le travail et que l'écran est complètement sombre. Vous rentrez chez vous après le travail lorsque le soleil est haut dans le ciel et ouvrez votre ordinateur portable. L'écran est si sombre que vous ne pouvez pas le lire.

Pour résoudre ce scénario, un fichier de contrôle systemd est fourni:

  • /etc/systemd/system-sleep/systemd-wake-eyesome le fichier de contrôle est appelé chaque fois que le système se suspend ou reprend.
  • Le fichier de contrôle appelle le script bash /usr/local/bin/wake-eyesome.shpour réinitialiser la luminosité à son niveau maximal, puis le mettre en veille jusqu'au coucher du soleil.

La nuit, vous regardez un film sur votre téléviseur externe et fermez le couvercle de votre ordinateur portable pour une meilleure visualisation. Ubuntu / Lightdm / xrandr prend quelques secondes, puis réinitialise votre téléviseur externe à sa pleine luminosité. OUCH à vos yeux.

Pour résoudre ce scénario, un fichier de contrôle des événements acpi est fourni:

  • /etc/acpi/event/lid-event-eyesome le fichier de contrôle est appelé chaque fois que le couvercle de l'ordinateur portable est ouvert ou fermé.
  • Le fichier de contrôle appelle le script bash /etc/acpi/acpi-lid-eyesome.shpour gérer l'ouverture et la fermeture du couvercle.
  • À son tour, le script bash horrible appelle /usr/local/bin/wake-eyesome.shà réinitialiser la luminosité pour la visualisation nocturne, puis s'endort jusqu'à la transition au coucher du soleil.

    Suspension / fermeture du couvercle / test de la luminosité / mise hors tension / prise de courant

Sommaire

Cette réponse est presque deux ans jour pour jour après la publication de la question. Il y a eu une première version de cette réponse supprimée en février 2017 que je viens de rétablir et de réviser.

Eyesome peut être téléchargé à partir de: https://github.com/WinEunuuchs2Unix/eyesome

Ce programme vient de sortir en septembre 2018, alors faites-moi savoir si vous rencontrez des problèmes ou avez des suggestions d'amélioration.

La phase de documentation ne fait que commencer alors n'hésitez pas à poser des questions. Vos questions peuvent même entraîner des améliorations de la documentation.

WinEunuuchs2Unix
la source
Une partie de cela est la réponse WIP car j'ajouterai plus tard un script bash cron horaire qui définit la luminosité en fonction des heures de lumière du jour. L'autre partie consiste à répondre à votre question sur la façon de trouver les heures de clarté dans le lien affiché. Vous pouvez intégrer ce lien dans la réponse de Serg. Mais peut-être que quand tout fonctionnera, je devrais poster un nouveau Q&R est votre suggestion ??? (Serg avait des inquiétudes dans la salle de chat il y a 1/2 heure)
WinEunuuchs2Unix