Definir o brilho inicial do fundo de inicialização, dependendo do dia

8

Eu corro o Ubuntu 16.04 em um notebook Acer Aspire E5-773G. Infelizmente, não consigo usar minhas teclas de função de brilho na tela de login; portanto, o primeiro momento em que posso alterar o brilho da luz de fundo da tela é depois de inserir com êxito minha senha e fazer login.

Por padrão, o Ubuntu inicializa com o nível de brilho que foi definido no último desligamento, mas isso não é muito útil, por exemplo, às vezes eu desligo tarde da noite com um nível de brilho em torno de 5% e inicio novamente no dia seguinte em que precisaria de um nível de brilho de pelo menos 50% para ver tudo confortavelmente. Por outro lado, se eu desligar durante o dia com talvez 80% de brilho e inicializá-lo à noite, quase fico cego pelas luzes ...

Como posso configurar o Ubuntu para inicializar com um nível de brilho dependendo da hora do dia atual? Gostaria de algo como 10% de brilho das 22:00 às 06:00, 60% de brilho das 10:00 às 16:00 e 30% de brilho no meio. Suavizar a curva é bom, desde que permaneça facilmente configurável. Como alternativa, se você encontrar uma maneira de defini-lo com base nos horários locais do pôr-do-sol / nascer do sol, isso seria um grande bônus. :)

A modificação do brilho de acordo com essas regras deve ocorrer apenas durante a inicialização ou, opcionalmente, ao acordar da suspensão. Pode não mudar automaticamente o brilho enquanto estou trabalhando.

Byte Commander
fonte
Quando converti de 14.04 para 16.04, notei que o systemd estava definindo o último brilho, que era o sonho de um oftalmologista, porque o 14.04 sempre funcionava a todo vapor e era preciso alterá-lo manualmente. Eu imagino que algo pode ser manipulado onde várias configurações são armazenadas e, em seguida, definidas com base na hora do dia. Além de pedir para "sol Local / Nascer" você também pode pedir para "nublado vs ensolarado" :)
WinEunuuchs2Unix
Isso seria útil para fazer isso com base na intensidade da luz na sala (ou fora da praia): () [ askubuntu.com/questions/23593/…
WinEunuuchs2Unix 26/16
Eu tenho fita na minha webcam porque normalmente não a uso. Além disso, definir o brilho inicial com base em horas diurnas fixas e configuráveis ​​é totalmente suficiente se eu puder adaptar os valores algumas vezes por ano. Nenhum material dependente do clima, isso é desnecessário.
Byte Commander
Sim, também tenho fita adesiva na minha. O irmão mais velho já sabe demais.
WinEunuuchs2Unix 26/09/16
Você já tentou usar xbacklightpara definir o brilho da tela? Depois de instalado, seria como xbacklight -set 10obter 10% de brilho. Se funcionar, pode ser facilmente adicionado a um cronjob ou algo assim.
Terrance

Respostas:

4

Ideia básica:

  1. Salve o arquivo de configuração /opt/.time_brightness_values:

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

    Preste atenção aos valores e vírgulas citados. A primeira coluna com valores entre aspas representa o intervalo de horas no formato de 24 horas, a segunda coluna é em porcentagem. Por exemplo, se você inicializasse das 5 às 7 horas, seu brilho seria definido em 25%. Se você inicializasse das 8 às 16 horas, seria 50%.

  2. Salve o script abaixo como /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. Defina greeter-setup-script=/opt/set_timed_brightness.pyno /etc/lightdm/lightdm.confarquivo. O script de configuração greeter é executado como root e, quando o sistema acessa a tela de login, o script é executado e define o brilho que você precisa.

  4. No que diz respeito ao despertar da suspensão, crie /etc/pm/sleep.d/set_timed_brightness.sh:

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

Lembre - se : todas as regras padrão se aplicam, os scripts devem ser executáveis chmod +x, a nomeação e as chamadas para cada arquivo devem ser consistentes.

Sergiy Kolodyazhnyy
fonte
1
Um detalhe menor, talvez porque eu não conheço python e as ramificações, mas /opt/.time_brightness_valuesfaltam configurações para as 23:00 às 04:00. Eu sei que a mãe de Byte quer que ele esteja dormindo, mas ele pode estar violando as regras da hora de dormir.
WinEunuuchs2Unix 2/16/16
@ WinEunuuchs2Unix isso é apenas um exemplo. Ele pode configurar o arquivo para o intervalo de tempo de costume e percentual :)
Sergiy Kolodyazhnyy
1

comovente

Eyesome é um script bash que funciona como um daemon e dorme a maior parte do tempo 24/7. Ele ajusta automaticamente o brilho da tela (e opcionalmente também a gama) para a exibição do seu laptop via interface de hardware e até dois outros monitores usando o controle de software da xrandr.

Ao nascer do sol (a hora é obtida automaticamente da Internet todos os dias), o brilho da tela (e opcionalmente também a gama) é ajustado gradualmente. O ajuste gradual é definido por você, mas 120 minutos funcionam para mim. Para manter os ajustes imperceptíveis, defina um intervalo de suspensão entre os ajustes. Qualquer lugar entre 15 e 60 segundos é provavelmente o melhor e o padrão é 60.

Após a conclusão da transição do nascer do sol, um daemon atraente dorme muitas horas até o início da transição do nascer do sol. Estou usando 90 minutos antes do nascer do sol, mas você pode definir qualquer período que desejar.

Inversamente à transição do nascer do sol, a transição do pôr do sol diminui gradualmente o brilho da tela (e, opcionalmente, também gama), tornando-se imperceptível.

Observe que durante a transição noturna a gama pode ser definida para aumentar. Por exemplo, gama vermelha pode ser definida como 1,0 durante o dia e 1,2 durante a noite para reduzir a fadiga ocular. A gama azul, por sua vez, pode ser definida como 1,0 durante o dia e 0,8 durante a noite, diminuindo.

Para reduzir recursos, alguém dorme o período inteiro entre o pôr do sol e o nascer do sol. Dependendo de onde você mora e da estação do ano, o sono médio será de 12 horas.

Configuração impressionante - Menu principal

Para configurar algo interessante, é fornecido um menu principal:

eyesome main menu.png

Editar configuração - guia Geral

Quando você clica no botão Editar no menu principal, a guia geral da configuração de edição aparece inicialmente como mostrado abaixo.

configuração geral tab.png

O nome do seu país / cidade deve aparecer automaticamente. Se necessário, você pode substituí-lo.

Editar configuração - guia Monitor 1

Clicar na guia Monitor 1 acima mostrará este painel na minha configuração (a sua pode ser diferente):

eyesome-edit-configuration-monitor-1.png

Não se assuste com essas configurações, pois elas são na maioria das vezes obtidas automaticamente pelo visual. Você precisará definir os níveis / brilho diurno e noturno.

Editar configuração - guia Monitor 3

Clicar na guia Monitor 3 revela este painel na minha configuração (a sua pode ser diferente):

A guia Monitor 2 não é exibida porque é uma nova TV com brilho adaptável e Smart OS. Não requer substituições por Eyesome.

insira a descrição da imagem aqui

Se, após instalar o eyesome, você conectar um monitor diferente ao sistema, poderá ser necessário inserir o xrandrnome do monitor.

Configuração impressionante - teste de 5 segundos

No menu principal, você pode testar as configurações de brilho diurno e noturno e gama por 5 segundos, clicando nos botões Diurno e Noturno, respectivamente. Você pode alterar a duração do teste de 5 segundos para 20 segundos na guia Editar configuração - Geral.

Veja como é o teste noturno de 5 segundos:

noite sombria test.gif

Manipulação de eventos incomuns

Suponha que você suspenda seu laptop na manhã anterior ao trabalho e a tela esteja totalmente escura. Você chega em casa depois do trabalho quando o sol está alto no céu e abre o laptop. A tela está tão escura que você não consegue lê-la.

Para resolver esse cenário, é fornecido um arquivo de controle systemd:

  • /etc/systemd/system-sleep/systemd-wake-eyesome O arquivo de controle é chamado sempre que o sistema suspende ou continua.
  • O arquivo de controle chama o script bash /usr/local/bin/wake-eyesome.shpara redefinir o brilho para cheio e depois dormir até a transição do pôr do sol.

Você está assistindo a um filme na TV externa à noite e fecha a tampa do laptop para ter uma melhor visualização. O Ubuntu / Lightdm / xrandr leva alguns segundos e redefine sua TV externa para o brilho total. OUCH aos seus olhos.

Para resolver esse cenário, é fornecido um arquivo de controle de eventos acpi:

  • /etc/acpi/event/lid-event-eyesome O arquivo de controle é chamado sempre que a tampa do laptop é aberta ou fechada.
  • O arquivo de controle chama o script bash /etc/acpi/acpi-lid-eyesome.shpara lidar com a abertura e o fechamento da tampa.
  • Por sua vez, o script do bash chama /usr/local/bin/wake-eyesome.sha redefinir o brilho para a exibição noturna e depois dorme até a transição do pôr do sol.

    Suspender / Fechar a tampa / Brilho do teste / desligar / hotplug

Sumário

Essa resposta é quase dois anos após a publicação da pergunta. Houve uma versão anterior desta resposta excluída em fevereiro de 2017 que acabei de cancelar e revisar.

Eyesome pode ser baixado em: https://github.com/WinEunuuchs2Unix/eyesome

Este programa foi lançado em setembro de 2018, por favor, entre em contato se encontrar algum problema ou tiver sugestões de melhorias.

A fase de documentação está apenas começando, portanto, não hesite em fazer qualquer pergunta. Suas perguntas podem até resultar em melhorias na documentação.

WinEunuuchs2Unix
fonte
Parte disso é a resposta WIP, pois adicionarei o script de cron horário por hora mais tarde, que define o brilho com base no horário de verão. A outra parte é responder à sua pergunta sobre como o horário de verão pode ser encontrado no link postado. Você pode integrar esse link na resposta de Serg. Mas talvez, quando tudo estiver funcionando, eu deva postar uma nova sessão de perguntas e respostas, é sua sugestão ??? (Serg tinha preocupações na sala de bate-papo há meia hora)
WinEunuuchs2Unix 25/17/17