O script shell falha quando executado pelo serviço systemd

1

Então eu tenho um serviço systemd chamado startup.service:

[Unit]
Description=startup scripts

[Service]
Type=oneshot
ExecStart=/home/user/Documents/Tools/Scripts/startup.sh

[Install]
WantedBy=multi-user.target

que chama um script chamado startup.sh:

#! /bin/sh -
DIR='/home/user/Documents/Tools/Scripts'
$DIR/audio.sh
$DIR/powertop.sh
$DIR/xinput.sh

que chama um script chamado xinput.sh:

export DISPLAY =: 0.0 if xinput set-prop 11 297-107-107; então eco "pronto!" fi

Quando executo o startup.sh como root, o xinput.sh retorna "pronto!" e altera corretamente as configurações. Quando executo o startup.service como root, o xinput falha e retorna:

Jun 23 22:37:45 localhost startup.sh[7051]: No protocol specified
Jun 23 22:37:45 localhost startup.sh[7051]: Unable to connect to X server

(Isso é tudo depois que o X começou)

Qual é a diferença? Por que isso está acontecendo?

    
por Gooberpatrol66 24.06.2016 / 05:48

1 resposta

1

A diferença entre executar o script via systemd e executá-lo diretamente diretamente é o ambiente. Você pode testá-lo assim. No seu arquivo de unidade, adicione isso à seção [Serviço], para teste:

StandardOutput=console

Em seguida, no seu script bash, na parte superior, adicione esta linha para despejar o ambiente:

env

Agora, execute o script dentro e fora do systemd e compare as variáveis de ambiente que são descartadas.

É um recurso do systemd que controla rigidamente o ambiente. Isso melhora a segurança e fornece consistência.

    
por 24.06.2016 / 16:14