Eu quero executar um programa (obs) em determinados momentos, para isso eu queria escrever um arquivo de serviço systemd que aponta para um script de shell, que eu teria executado por um cronômetro.
Eu executei o arquivo e ele executa o script... mas por algum motivo não executa o programa.
O arquivo de serviço:
[Unit]
Description=Starting Yoga recording on OBS
[Service]
ExecStart=/usr/local/bin/script.sh
script.sh
:
#!/bin/bash
echo "yo working" >> /home/user/1.txt
/usr/bin/obs --minimize-to-tray --startrecording
echo "or is it?" >> /home/user/2.txt
As strings são gravadas nos arquivos de texto e script.sh
funcionam quando executadas via terminal, então tenho certeza de que o problema está no arquivo de serviço
Estou em uma distro Arch btw se isso ajuda
Eu suspeito que o OBS é um aplicativo GUI.
systemd
executa scripts muito bem, mas os aplicativos GUI precisam de alguns truques.Primeiro, use o
--user
ônibus. Isso significa que o OBS será executado como você e não como root. Além dos benefícios de segurança óbvios, a execução no barramento do usuário permite que seu serviço herde o ambiente de seus usuários, incluindo o que$DISPLAY
você está usando e onde$XAUTHORITY
está. Isso também significa que a execução do bash carregará seu pessoal , o.bashrc
que não aconteceria no barramento do sistema. Para fazer isso, mova essassystemd
unidades de/etc/systemd/system/
para~/.config/systemd/user/
.Use um timer systemd para isso:
Isso será acionado a
obs.service
cada duas horas. Então o seuobs.service
pode permanecer o mesmo:Para fazer com que isso seja iniciado na inicialização:
O cronômetro acionará seu serviço, para que você não precise iniciar ou habilitar explicitamente seu serviço.
Se você deseja que o serviço seja executado AGORA, você sempre pode iniciá-lo: