O Redshift está ligado a um servidor X . Embora você possa iniciá-lo como parte da inicialização do sistema, isso é frágil; a maneira robusta de iniciá-lo está no contexto da sessão do servidor X (que é mais ampla que a sessão de login do X).
Pode haver vários servidores X sendo executados na mesma máquina em um determinado momento. Eles são atribuídos números de exibição em um primeiro a chegar, primeiro a ser servido. O número de exibição é como um programa sabe qual servidor contatar, e os programas procuram por ele na variável de ambiente DISPLAY
. A maneira natural de iniciar um programa GUI é em um contexto em que a variável de ambiente DISPLAY
está configurada para o valor desejado.
Você pode supor que lightdm é a primeira entidade que inicia um servidor X, portanto, exibe :0
e codifica a variável de ambiente DISPLAY=:0
em seu trabalho inicial. Você também precisará definir a variável XAUTHORITY
(consulte Abra uma janela em um display X remoto (por que" Não é possível abrir o display ")? ). Acho lightdm no Ubuntu armazena o cookie em /var/lib/lightdm/.Xauthority
.
env DISPLAY=":0"
env XAUTHORITY="/var/lib/lightdm/.Xauthority"
Mas isso é frágil: presume-se que o display lightdm esteja em :0
. Eu acho que não vai funcionar em sua forma atual por causa de uma condição de corrida: o trabalho lightdm
pode ser considerado iniciado antes do servidor X estar ativo e em execução (não tenho certeza sobre isso, não sei que ponto o trabalho conta como iniciado).
A maneira limpa é fazer com que o lightdm inicie o Redshift. Dessa forma, é iniciado no momento certo e no contexto certo. Edite /etc/lightdm/lightdm.conf
e adicione redshift -c /etc/redshift.conf
à linha display-setup-script
na seção SeatDefaults
:
[SeatDefaults]
…
display-setup-script=redshift -c /etc/redshift.conf &
Observe o &
para iniciar redshift
no segundo plano (caso contrário, o lightdm esperaria que ele fosse concluído). Acho que o Redshift sairá quando o servidor X sair (os aplicativos X geralmente saem quando a tela some, portanto não há necessidade de rastrear o processo e eliminá-lo explicitamente.