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:
- Tenha o script armazenado em algum lugar (seja aqui ou através do github)
- Crie
/etc/lightdm/lightdm.conf
usando o privilégiosudo
. - Verifique se o arquivo tem 3 linhas:
[SeatDefaults]
,display-setup-script
edisplay-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.