Como autostart serviço no linux?

3

Eu tenho um programa chamado redshift que gostaria de iniciar automaticamente quando eu fizer login. Se eu executar " redshift "em um terminal (ou redshift & ) ou via alt + f2 , isto irá iniciá-lo. Eu não acho que tenha um script de inicialização, então adicionar " redshift " ao meu arquivo .profile fará com que ele seja carregado no início? Eu suponho que um cronjob definido para @reboot também poderia funcionar?

Eu acho que alguns programas precisam ser executados a partir de um determinado ambiente de usuário, especialmente aqueles que afetam elementos gráficos? Por exemplo, se eu usar o SSH em uma máquina remota e tentar abrir um programa de GUI, obviamente isso não será possível, então ele falhará. É isso que eu estou tentando evitar em relação a onde eu executo este programa.

    
por Peter 07.02.2014 / 07:37

1 resposta

5

redshift não é um serviço do sistema; ele funciona dentro da sua sessão de login, pois ele precisa acessar o servidor X11. Então, basicamente, ele deve ser iniciado automaticamente da mesma forma que a maioria dos programas gráficos são:

Método 1

Adicione um arquivo redshift.desktop ao diretório de início automático do XDG, ~/.config/autostart/ :

[Desktop Entry]
Type=Application
Name=Redshift
Exec=/usr/bin/redshift

Isso funciona com ambientes de área de trabalho que seguem a especificação XDG Autostart; isso inclui o GNOME, o KDE, o Xfce e muitos outros. Em alguns, é editável por meio de interfaces gráficas (por exemplo, gnome-session-properties no GNOME).

Método 2

Adicione a seguinte linha ...

redshift &

... para o seu ~/.xprofile . Isso funciona com a maioria dos gerenciadores de exibição (gdm, kdm, lightdm, lxdm, sddm - não é magro, no entanto).

Se você usar a ferramenta startx , ~/.xprofile não será usado por padrão, portanto, será necessário atualizar seu script ~/.xinitrc - adicione a mesma linha em algum lugar antes de iniciar o gerenciador de sessões .

Método 3

Se você usar um gerenciador de exibição como o GDM, talvez queira executar o programa antes de efetuar login, para que também se aplique à tela de login. Como isso varia entre gerenciadores de exibição, mas no GDM isso pode ser feito editando /etc/gdm/Init/Default . (Disclaimer: Eu não tentei e isso pode ser o arquivo errado.)

Coisas que não funcionam

  • Um script de inicialização do sistema não funcionará, pois ele é executado independentemente das sessões gráficas - ele não terá o% correto$DISPLAY nem o% correto$XAUTHORITY definido; se você codificar esses, pode acabar tentando se conectar à exibição errada (por exemplo, você codifica DISPLAY=":0" , mas sua sessão começa em :1 ); e se você tentar ver todas as telas, o script ainda é muito provável de ser iniciado antes que qualquer qualquer display X11 tenha sido iniciado.

  • Um @reboot cronjob será executado como o usuário certo (em vez de precisar su / sudo ), mas caso contrário, ele terá todos os mesmos problemas que os scripts init do sistema.

por 07.02.2014 / 15:40

Tags