Iniciando o Chromium na inicialização com o systemd

1

Tarefa : Inicie o Chromium na inicialização na máquina do openSUSE

Problema : Eu acho que o problema é que eu quero iniciar um programa GUI

Até agora :

Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  
Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  ls -l
total 24
-rw-r--r-- 1 root root  529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root  138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root  768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root  709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root  772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root    0 Mar 15 07:20 user
-rw-r--r-- 1 root root  992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  sudo chmod 664 chorm_start.service 
root's password:
Mon Aug 14; 06:45:19; marton;/etc/systemd ;  $  ls -l
total 24
-rw-r--r-- 1 root root  529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root  138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root  768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root  709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root  772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root    0 Mar 15 07:20 user
-rw-r--r-- 1 root root  992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:20; marton;/etc/systemd ;  $  cat chorm_start.service                      
[Unit]                                                                                       
Description="Starting chromium on startup"                                                   

[Service]                                                                                    
ExecStart=/usr/lib64/chromium/chromium                                                       

[Install]                                                                                    
WantedBy=multi-user.target                                                                   
Mon Aug 14; 06:45:38; marton;/etc/systemd ;  $  sudo systemctl status chorm_start
chorm_start.service - "Starting chromium on startup"                                         
   Loaded: loaded (/etc/systemd/chorm_start.service; enabled)                                
   Active: failed (Result: exit-code) since Mon 2017-08-14 06:38:44 EEST; 7min ago           
  Process: 853 ExecStart=/usr/lib64/chromium/chromium (code=exited, status=1/FAILURE)
 Main PID: 853 (code=exited, status=1/FAILURE)

Aug 14 06:38:47 date chromium[853]: Unable to init server: Could not connect: Connection refused
Aug 14 06:38:47 date chromium[853]: [853:853:0814/063844.727638:ERROR:browser_main_loop.cc(279)] Gtk: cannot open display:
Mon Aug 14; 06:46:35; marton;/etc/systemd ;  $  

Pergunta : O que estou fazendo de errado e como resolver o problema

    
por Hartun 14.08.2017 / 06:02

3 respostas

1

E agora, a resposta do sistema.

Desde que você perguntou como fazer isso com o systemd. ☺

É assim que o pessoal do sistema tem dito às pessoas para fazer isso.

Você está colocando o arquivo da unidade de serviço inteiramente no diretório errado. Não deve ir em /etc/systemd . Ele não deve nem entrar em /etc/systemd/system . Deve ir em ~marton/.config/systemd/user .

Isso ocorre porque um programa gráfico que você deseja executar sob a égide de sua própria conta é um serviço por usuário e não um serviço sistema . (Você está atualmente invocando um navegador WWW como o superusuário. Isso é uma idéia muito ruim. Pare com isso agora !) Você poderia configurá-lo para todos usuários no diretório /etc/systemd/user , mas é provável que nem todos os usuários em sua máquina precisem iniciar o Chromium como um serviço. Então, configure-o apenas para sua conta de usuário, especificamente.

Como é um serviço por usuário, você deve manipulá-lo com a opção --user para systemctl , sans sudo . Por exemplo:

systemctl --user status chrome.service

Isso vale para ativá-lo e desativá-lo também.

Como uma unidade de serviço por usuário, ela deve ser WantedBy=default.target , porque não há multi-user.target para serviços por usuário. (Embora eu suspeite que deve realmente ser WantedBy=your-desktop-session.target , que será algo como gnome-session.target dependendo de qual área de trabalho você está usando. O que o pessoal do sistema tem dito não é maravilhosamente claro neste ponto. )

E uma parte da organização do sistema para fazer com que os serviços por usuário se pareçam com os serviços de sessão por sessão é todo o mecanismo graphical-session , que sua unidade de serviço deve incorporar à configuração:

[Unit]
PartOf=graphical-session.target

O que mais você tem a fazer depende de quão longe o OpenSuSE ficou com todo o graphical-session bodge, que o pessoal do sistema começou a usar em 2016. O Ubuntu e o Debian fornecem uma bagunça completa nos bastidores e desligamento que inclui o início / parada de graphical-session.target e a injeção da variável de ambiente DISPLAY . Se o seu OpenSuSE ainda não tiver isso, talvez você precise preencher essa parte.

Leitura adicional

por 14.08.2017 / 08:26
1

Eu mesmo tentei isso e, como você, descobriu que systemd é a ferramenta errada para o trabalho quando se trata de iniciar aplicativos de desktop gráficos. Uma abordagem fácil é usar o recurso "autostart apps" do seu ambiente de desktop preferido.

A diferença é que systemd não tem acesso fácil à variável de ambiente DISPLAY , enquanto a abordagem "auto start apps" será ativada.

    
por 14.08.2017 / 17:01
0

Isso funciona para mim. A chave é adicionar User no Service , além de iniciar o DISPLAY no Environment .

[Unit]
Description=launch chromium

[Service]
User=<user>
Environment=DISPLAY=:0
ExecStart=/usr/bin/chromium-browser

[Install]
[email protected]
    
por 15.08.2018 / 09:43