Установить начальную яркость фона при запуске в зависимости от дневного времени

Я запускаю Ubuntu 16.04 на ноутбуке Acer Aspire E5-773G. К сожалению, я не могу использовать свои функциональные клавиши яркости на экране входа в систему, поэтому первый момент, когда я могу изменить яркость подсветки экрана, - это после успешного ввода пароля и входа в систему.

По умолчанию Ubuntu загружается с уровнем яркости, который был установлен при последнем выключении, но это не очень полезно, например, иногда я закрываюсь поздно ночью с уровнем яркости около 5% и запускаю его снова на следующий день, когда я Для комфортного просмотра всего необходим уровень яркости не менее 50%. С другой стороны, если я выключаюсь в течение дня с яркостью 80% и загружаю его вечером, меня почти ослепит свет...

Как я могу настроить Ubuntu для загрузки с уровнем яркости в зависимости от текущего дня? Я бы хотел что-то вроде 10% яркости с 22:00 до 06:00, 60% яркости с 10:00 до 16:00 и 30% яркости между ними. Сглаживание кривой - это нормально, пока она легко настраивается. Кроме того, если вы найдете способ установить его на основе местного времени заката / восхода солнца, это будет большим бонусом.:)

Изменение яркости в соответствии с этими правилами должно происходить только во время загрузки или при желании при пробуждении из режима ожидания. Может не автоматически менять яркость, пока я работаю.

2 ответа

Решение

Основная идея:

  1. Сохранить файл конфигурации /opt/.time_brightness_values:

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

    Обратите внимание на указанные значения и запятые. Первый столбец с указанными значениями представляет часовой диапазон в 24-часовом формате, второй столбец - в процентах. Например, если вы загрузились с 5 до 7 часов, ваша яркость будет установлена ​​на 25 процентов. Если вы загрузитесь с 8 до 16 часов, это будет 50 процентов.

  2. Сохраните скрипт ниже как /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. Задавать greeter-setup-script=/opt/set_timed_brightness.py в /etc/lightdm/lightdm.conf файл. Сценарий установки greeter запускается от имени пользователя root, и как только ваша система перейдет на экран входа в систему, скрипт запустится и установит необходимую вам яркость.

  4. Что касается пробуждения от приостановки, создайте /etc/pm/sleep.d/set_timed_brightness.sh:

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

Помните: все стандартные правила применяются, сценарии должны быть выполнены с chmod +x, имена и вызовы к каждому файлу должны быть согласованными.

eyesome

Eyesome - это bash-скрипт, работающий как демон и спящий большую часть времени 24/7. Он автоматически регулирует яркость экрана (и, возможно, гамму) для дисплея вашего ноутбука через аппаратный интерфейс и до двух других мониторов с помощью программного управления xrandr.

На рассвете (время автоматически получается из Интернета каждый день), яркость экрана (и, возможно, гамма тоже) регулируется постепенно. Постепенная настройка определяется вами, но у меня работает 120 минут. Чтобы настройки были незаметными, установите интервал ожидания между настройками. Где-нибудь между 15 и 60 секундами, вероятно, лучше, и по умолчанию 60.

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

В противоположность переходу на восход солнца переход на закате постепенно уменьшает яркость экрана (и, возможно, гамму), поэтому он незаметен.

Обратите внимание, что в ночное время можно увеличить гамма-переход. Например, красная гамма может быть определена как 1,0 в течение дня и 1,2 в течение ночи, чтобы уменьшить нагрузку на глаза. Синяя гамма в свою очередь может быть определена как 1,0 в течение дня и 0,8 в ночное время, поэтому она будет уменьшаться.

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

Eyesome Setup - Главное меню

Для настройки eyesome предусмотрено главное меню:

Изменить конфигурацию - вкладка "Общие"

При нажатии кнопки " Редактировать" в главном меню изначально отображается вкладка "Общая конфигурация редактирования", как показано ниже.

Название вашей страны / города должно появиться автоматически. При необходимости вы можете отменить это.

Редактировать конфигурацию - вкладка "Монитор 1"

Нажав на вкладку "Монитор 1" выше, вы увидите эту панель в моей конфигурации (ваша может отличаться):

Не пугайтесь этих настроек, по большей части они автоматически получаются с помощью eyesome. Вам нужно будет установить дневную и ночную яркость / уровни.

Редактировать конфигурацию - вкладка "Монитор 3"

При нажатии на вкладку "Монитор 3" открывается эта панель в моей конфигурации (ваша может отличаться):

Вкладка Monitor 2 не отображается, потому что это новый телевизор с адаптивной яркостью и Smart OS. Это не требует переопределения Eyesome.

Если после установки eyesome вы подключите другой монитор к вашей системе, вам может потребоваться ввести xrandr имя монитора.

Установка для глаз - 5 секундный тест

В главном меню вы можете проверить свои дневные и ночные настройки яркости и гаммы в течение 5 секунд, нажимая кнопки " Дневное" и " Ночное время" соответственно. Вы можете изменить продолжительность теста с 5 до 20 секунд на вкладке "Редактировать конфигурацию - Общие".

Вот как выглядит 5-секундный ночной тест:

Необычная обработка событий

Предположим, вы отключили свой ноутбук, когда утро перед работой, и экран становится полностью тусклым. Вы приходите домой после работы, когда солнце высоко в небе, и открываете свой ноутбук. Экран настолько тусклый, что вы не можете его прочитать.

Для решения этого сценария предоставляется контрольный файл systemd:

  • /etc/systemd/system-sleep/systemd-wake-eyesome управляющий файл вызывается всякий раз, когда система приостанавливается или возобновляет работу.
  • Управляющий файл вызывает скрипт bash /usr/local/bin/wake-eyesome.sh сбросить яркость до полной и затем спать до перехода на закат.

Вы смотрите фильм на внешнем телевизоре ночью и закрываете крышку ноутбука для лучшего просмотра. Ubuntu / Lightdm / xrandr занимает несколько секунд, а затем перезагружает ваш внешний телевизор на полную яркость. ОЧЕНЬ к твоим глазам.

Для решения этого сценария предоставляется файл управления событиями acpi:

  • /etc/acpi/event/lid-event-eyesome управляющий файл вызывается всякий раз, когда крышка ноутбука открывается или закрывается.
  • Управляющий файл вызывает скрипт bash /etc/acpi/acpi-lid-eyesome.sh обрабатывать крышку открытия и закрытия.
  • В свою очередь вызывающий bash скрипт вызывает /usr/local/bin/wake-eyesome.sh сбросить яркость для ночного просмотра, а затем спать до перехода на закат.

    Приостановить / закрыть крышку / проверить яркость / выключить /hotplug

Резюме

Этот ответ почти два года спустя после того, как вопрос был отправлен. В феврале 2017 года была удалена ранняя версия этого ответа, которую я только что восстановил и исправил.

Eyesome можно скачать с: https://github.com/WinEunuuchs2Unix/eyesome

Эта программа была выпущена в сентябре 2018 года, поэтому, пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы или у вас есть предложения по улучшению.

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

Другие вопросы по тегам