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

8

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

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

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

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

Byte Commander
источник
Когда я впервые перешел с 14.04 на 16.04, я заметил, что systemd настраивал последнюю яркость, о которой мечтал окулист, потому что 14.04 всегда работал на полную мощность, и вам пришлось вручную изменять ее. Я предполагаю, что что-то может быть сфальсифицировано, где хранятся несколько конфигураций, а затем устанавливается в зависимости от времени суток. Помимо запроса «местное время заката / восхода», вы также можете попросить «облачно против солнечного» :)
WinEunuuchs2Unix
Это было бы полезно для этого в зависимости от интенсивности света в комнате (или снаружи на пляже): () [ askubuntu.com/questions/23593/…
WinEunuuchs2Unix
У меня есть веб-камера, так как я обычно ее не использую. Кроме того, установка начальной яркости на основе фиксированных настраиваемых дневных часов вполне достаточна, если я могу адаптировать значения несколько раз в год. Никаких погодных условий, в этом нет необходимости.
Byte Commander
Да, у меня тоже есть клейкая лента. Большой брат уже знает слишком много.
WinEunuuchs2Unix
Вы пытались использовать xbacklightдля установки яркости экрана? После того, как это установлено, это было бы как xbacklight -set 10для 10% яркости. Если это работает, его можно легко добавить в cronjob или что-то в этом роде.
Терренс

Ответы:

4

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

  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, имена и обращения к каждому файлу должны быть согласованы.

Сергей Колодяжный
источник
1
Небольшая деталь, возможно, потому что я не знаю python и его последствий, но мне не /opt/.time_brightness_valuesхватает настроек с 11 вечера до 4 утра. Я знаю, что мать Байта хочет, чтобы он тогда спал, но он может нарушать правила перед сном.
WinEunuuchs2Unix
@ WinEunuuchs2Unix это просто пример. Он может настроить файл для настраиваемого диапазона времени и процентов :)
Сергей Колодяжный,
1

eyesome

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

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

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

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

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

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

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

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

eyesome main menu.png

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

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

общая конфигурация

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

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

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

eyesome-редактирование-конфигурация-монитор-1.png

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

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

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

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

введите описание изображения здесь

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

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

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

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

приятное ночное время test.gif

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

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

Для решения этого сценария предоставляется контрольный файл 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 года, поэтому, пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы или у вас есть предложения по улучшению.

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

WinEunuuchs2Unix
источник
Отчасти это ответ WIP, так как позже я добавлю скрипт почасового запуска cron, который устанавливает яркость в зависимости от времени суток. Другая часть состоит в том, чтобы ответить на ваш вопрос о том, как летнее время можно найти в размещенной ссылке. Вы можете включить эту ссылку в ответ Серга. Но, может быть, когда все заработает, я должен опубликовать новый Q & A, это ваше предложение ??? (У Сергея были проблемы в чате 1/2 часа назад)
WinEunuuchs2Unix