Correção de gama com Upstart e um script

1

Escrevi um trabalho do Upstart para alterar automaticamente a gama de exibição de acordo com a alteração no brilho da tela:

start on (backlight-device-changed)
exec /usr/bin/gammach  

E isso é "gammach":

#! /bin/bash
Br='cat /sys/class/backlight/acpi_video0/actual_brightness' # Display brightness
Gm=.$((((Br+76)%100)))                      # Corrected gamma according to brightness
xrandr --output LVDS --gamma $Gm:$Gm:$Gm  

Mas toda vez que eu altero o brilho, recebo esse erro no arquivo de log:

Can't open display

Eu tentei o xgamma, mas recebi um erro semelhante.
Qualquer ajuda apreciada. Obrigado.

    
por Nowruz 10.08.2014 / 09:13

2 respostas

0

Eu finalmente encontrei a resposta.
Aparentemente, foi com permissão e autorização para acessar o Xserver e coisas assim.
A versão xgamma do meu script que funciona como um encanto é:

#! /bin/bash
export XAUTHORITY=/home/<username>/.Xauthority  # This give permission to access Xserver
Br='cat /sys/class/backlight/acpi_video0/actual_brightness' # Display brightness
Gm=.$((((Br+76)%100)))                      # Corrected gamma according to brightness
xgamma -d :0 -gamma $Gm
    
por Nowruz 10.08.2014 / 18:40
0

O programa que você usa precisa acessar o servidor X e não sabe qual display X ele deve usar.

Na maioria dos casos, você pode resolver isso definindo um nome de exibição fixo :0.0 , que normalmente é o nome da primeira exibição, e o único se apenas um estiver em execução.

Por exemplo, no início do seu script, você pode usar:

export DISPLAY=:0.0

Em geral, você pode ter várias exibições , como se executasse vários servidores X em vários consoles ou servidores X aninhados como Xnest ou Xvnc.

Além disso, você pode ter um servidor X em execução apenas, com um nome de exibição diferente que :0.0 , como :10.0

Nesses casos, você precisa encontrar uma maneira de especificar para o seu script qual DISPLAY usar.


Para obter uma saída útil no seu registro, você pode adicionar:

pgrep -fa /usr/bin/X

para mostrar se um ou mais servidores X estão sendo executados no momento em que o job upstart é executado. As linhas de comando também podem mostrar as exibições em que são executadas.
E

echo DISPLAY: "\"$DISPLAY\""

para gravar a variável DISPLAY no log.

    
por Volker Siegel 10.08.2014 / 09:45