Como executar um script bash com um serviço systemd?

Como executar um script bash com um serviço systemd?

Quero iniciar um aplicativo gráfico via systemd. Eu tentei fazer isso via udev antes, mas o aplicativo é encerrado após o término da regra. Funciona quando executo o aplicativo diretamente via systemd, mas não quando executo o script que inicia o aplicativo com algumas restrições.

Meu arquivo de serviço é assim:

[Unit]
Description=App starter

[Service]
Type=oneshot
RemainAfterExit=yes
Environment=DISPLAY=:0
Environment=HOME=/home/user/
ExecStart=/home/user/runApp

[Install]
WantedBy=multi-user.target

journalctl -xe me dá

Sep 25 13:50:00 host systemd[1]: Starting App starter...
Subject: A start job for unit app.service has begun execution
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
A start job for unit xournalpp.service has begun execution.
 
The job identifier is 19196.
Sep 25 13:50:00 host runApp[313232]: App is not running
Sep 25 13:50:00 host systemd[1]: app.service: Main process exited, code=exited, status=1/FAILURE
Subject: Unit process exited
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
An ExecStart= process belonging to unit xournalpp.service has exited.
 
The process' exit code is 'exited' and its exit status is 1.
Sep 25 13:50:00 host systemd[1]: app.service: Failed with result 'exit-code'.
Subject: Unit failed
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
The unit xournalpp.service has entered the 'failed' state with result 'exit-code'.
Sep 25 13:50:00 host systemd[1]: Failed to start App starter.
Subject: A start job for unit app.service has failed
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
A start job for unit app.service has finished with a failure.
 
The job identifier is 19196 and the job result is failed.

Aqui está o roteiro. Pode ser devido à execução em segundo plano &? Preciso disso porque quero reutilizar o script.

#!/bin/bash

  if pgrep app
  then
      echo App is running
          wmctrl -x -a app
          wmctrl -x -r app -b "add,maximized_vert,maximized_horz"
          
  else
          echo App is not running
          /usr/bin/app & disown
  fi

Responder1

Pode ser um problema de permissão.

/home/usergeralmente não permite que nenhum outro usuário os acesse e sistemas de segurança como apparmor e selinux geralmente proíbem tal uso.

Se você quiser usar um script no systemd, é melhor colocá-lo no /usr/local/bin.

informação relacionada