Faça o Ubuntu lembrar o nível de brilho da tela sem o xbacklight

5

O problema é que o Ubuntu sempre redefine o nível de brilho para o máximo após cada reinicialização. Eu instalei o utilitário xbacklight , mas comandos como xbacklight -get ou xbacklight -set XX não funcionam. Eu não recebo nada como a saída.

Na verdade, eu gostaria de fazer meu Ubuntu lembrar o nível de brilho que foi usado por último. Como exatamente posso fazer isso? Veja algumas informações:

ls -l /sys/class/backlight/
total 0
lrwxrwxrwx 1 root root 0 Feb 27 09:43 radeon_bl0 -> ../../devices/pci0000:00/0000:00:01.0/drm/card0/card0-LVDS-1/radeon_bl0


ls -l /sys/class/backlight/radeon_bl0/
total 0
-r--r--r-- 1 root root 4096 Feb 27 09:54 actual_brightness
-rw-r--r-- 1 root root 4096 Feb 27 09:54 bl_power
-rw-r--r-- 1 root root 4096 Feb 27 09:47 brightness
lrwxrwxrwx 1 root root    0 Feb 27 09:54 device -> ../../card0-LVDS-1
-r--r--r-- 1 root root 4096 Feb 27 09:43 max_brightness
drwxr-xr-x 2 root root    0 Feb 27 09:54 power
lrwxrwxrwx 1 root root    0 Feb 27 09:54 subsystem -> ../../../../../../../class/backlight
-r--r--r-- 1 root root 4096 Feb 27 09:43 type
-rw-r--r-- 1 root root 4096 Feb 27 09:42 uevent

uname -r
4.2.0-30-generic
    
por misha 27.02.2016 / 07:56

5 respostas

6
% bl0ck_qu0te%

Introdução

O script abaixo aborda a necessidade do OP de armazenar e restaurar o brilho da tela que foi usado por último. Ele funciona em conjunto com the lightdm greeter e é ativado por lightdm . Não há necessidade de usar lightdm , portanto, se você preferir usar um cron job, poderá fazê-lo.

ideia básica:

  1. Tenha o script armazenado em algum lugar (seja aqui ou através do github)
  2. Crie /etc/lightdm/lightdm.conf usando o privilégio sudo .
  3. Verifique se o arquivo tem 3 linhas: [SeatDefaults] , display-setup-script e display-stopped script . Veja abaixo os detalhes. O cabeçalho do script também fornece uma visão geral.

Origem do script

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: March 7th, 2016
# Purpose: Script that will remember screen brightness
#          Must be used in conjunction with lightdm
#          Place the following 5 lines into /etc/lightdm/lightdm.conf
#
#           [SeatDefaults]
#           #display-setup-script = Script to run when starting a greeter session (runs as root)
#           display-setup-script = /home/USER/bin/sergrep/brightness.sh restore
#           #display-stopped-script = Script to run after stopping the display server (runs as root)
#           display-stopped-script = /home/USER/bin/sergrep/brightness.sh store
#
#           Basic idea is that you must give full path and either store or restore as an option 
# Written for: http://askubuntu.com/q/739654/295286
# Tested on:  Ubuntu 14.04 LTS
# Version: 1.2 , added brightness limit, file creation
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.
ARGV0=$0
ARGC=$#



store()
{
   cat "$SYSDIR"/*/actual_brightness > "$1"
}
#----------

# This function restores brightness. We avoid 
# setting brightness to complete 0, hence
# minimum is 10% that can be restored.

restore()
{
  MAX=$(cat "$SYSDIR"/*/max_brightness  )
  LIMIT=$((MAX/10)) # get approx 10 percent value
  VAL=$(cat "$1" )
  if [ "$VAL" -lt "$LIMIT"  ] ;
  then
       # avoid going bellow 10% of brightness
       # we don't want user's screen to be completely dark
       echo "$LIMIT" > "$SYSDIR"/*/brightness
  else
       echo "$VAL" > "$SYSDIR"/*/brightness
  fi
}
#------------

# This function works for initial run of the script; the script cannot set
# brightness unless datafile exists first, so here we create the file
# Initial value there will be whatever the current brightness on first
# reboot was

create_datafile()
{
  cat "$SYSDIR"/*/actual_brightness > "$1" 
}

puke(){
    printf "%s\n" "$@" > /dev/stderr
    exit 1
}

main()
{
  local DATAFILE="/opt/.last_brightness"
  local SYSDIR="/sys/class/backlight" # sysfs location of all the data

  # Check pre-conditions for running the script
  if [ "$ARGC" -ne 1  ];then
     puke "Script requires 1 argument"
  fi

  if [ $(id -u) -ne 0 ]   ; then
     puke "Script has to run as root"
  fi

  # ensure datafile exists
  [ -f "$DATAFILE"  ] || create_datafile "$DATAFILE"

  # perform storing or restoring function
  case "$1" in
     'restore') restore  $DATAFILE ;;
     'store') store $DATAFILE ;;
     *) puke "Unknown argument";;
  esac

}

main "$@"

Obtenção e configuração do script

Você pode copiar o script diretamente ou seguir estes passos a partir da linha de comando (para abrir a linha de comando, pressione Ctrl Alt T )

sudo apt-get install git
cd /opt
sudo git clone https://github.com/SergKolo/sergrep.git

O script estará localizado em /opt/sergrep/brightness.sh , por isso fazemos um:

sudo chmod +x /opt/sergrep/brightness.sh

para torná-lo executável. Em seguida, precisamos configurá-lo para funcionar com lightdm. Crie o arquivo /etc/lightdm/lightdm.conf abrindo-o com a linha de comando nano editor de texto (o comando é sudo nano /etc/lightdm/lightdm.conf ) ou gráfico gedit ( pkexec gedit /etc/lightdm/lightdm.conf )

Escreva no arquivo as seguintes linhas:

[SeatDefaults]
#display-setup-script = Script to run when starting a greeter session (runs as root)
display-setup-script = /opt/sergrep/brightness.sh restore
#display-stopped-script = Script to run after stopping the display server (runs as root)
display-stopped-script = /opt/sergrep/brightness.sh store

Salvar e sair

Visão geral do Indepth

Você já descobriu que pode gravar diretamente no arquivo /sys/class/backlight/*/brightness e também pode ler nesses valores. O problema é que /sys é um sistema de arquivos virtual, portanto, assim que você reiniciar, todos os arquivos desse sistema de arquivos desaparecerão.

Assim, você pode armazenar o valor em /sys/class/backlight/*/actual_brightness em um arquivo permanente a cada reinicialização. A questão é como - via cron job, via lightdm, ou por outros meios. Pessoalmente, escolhi a rota lightdm .

Basicamente, aproveitamos o recurso do lightdm - poder executar um script antes do início do greeter e após a saída da sessão. O brilho é gravado no arquivo /opt/.last_brightness e lido a cada vez que o script é iniciado. Estamos essencialmente realizando duas ações com o mesmo script, apenas passando argumentos diferentes.

    
por Sergiy Kolodyazhnyy 07.03.2016 / 18:24
1

Você já tentou isso:

  1. sudo nano /etc/rc.local
  2. adicione esta linha ao arquivo (substitua X pelo nível desejado de brilho):

    echo X > /sys/class/backlight/intel_backlight/brightness
    
por Jay T. 03.03.2016 / 21:17
0

Se você conseguir definir o brilho com um comando, será fácil alterar o nível de brilho para um determinado valor na inicialização. Faça o seguinte:

  • Abra o Dash pressionando a tecla Super / Windows
  • Insira "Aplicativos de inicialização" e pressione Enter
  • Clique em "Adicionar"
  • Insira um nome (irrelevante) e o comando
  • Clique em "Adicionar"

Isso deve executar esse comando na inicialização. Não tenho certeza de como lembrar o brilho anterior, mas espero que isso ajude.

    
por Rahul Mukherji 04.03.2016 / 19:37
0

Tudo bem. Eu vou responder minha própria pergunta apenas para referência futura. No meu caso, o que eu fiz foi adicionar as seguintes linhas (é realmente apenas uma linha com vários comentários para me lembrar por que e o que eu fiz lá) para /etc/rc.local antes de exit 0 :

# The following line should solve the problem of Ubuntu resetting
# the brightness level back to maximum after every reboot.

echo 50 > /sys/class/backlight/radeon_bl0/brightness

É assim que o arquivo inteiro se parece agora:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# The following line should solve the problem of Ubuntu resetting
# the brightness level back to maximum after every reboot.
echo 50 > /sys/class/backlight/radeon_bl0/brightness

exit 0

Embora eu não tenha cem por cento de certeza se essa é a melhor maneira de fazer isso, tudo parece estar funcionando bem para mim agora.

    
por misha 04.03.2016 / 14:46
0

Use a luz em vez disso ... Caso contrário, é uma bagunça para consertá-lo, especialmente se você tiver intel e nvidia gráficos juntos!

Funciona no Ubuntu 16.04 ... e é testado no Alienware M14XR2

Checkout- > link

    
por Rohith Saradhy 15.06.2017 / 23:23