Você pode codificar o PATH
no serviço systemd:
[Service]
Environment=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Mais flexível seria o PAM. É terrivelmente indireto comparado a simplesmente usar bash -c '....'
, mas você pode fazer isso com o PAM.
Crie uma nova configuração do PAM em /etc/pam.d
(digamos, /etc/pam.d/foo
) e adicione:
session required pam_env.so user_envfile=some-file user_readenv=1
E em /home/someUser/some-file
, adicione:
PATH DEFAULT=/home/someUser/bin:${PATH}
Naturalmente, você pode ajustar o nome some-file
para algo mais sensato, mas o caminho em user_envfile
deve ser relativo ao diretório pessoal do usuário (o usuário que você definiu em User=
no serviço).
Em seguida, no arquivo de serviço, na seção [Service]
, adicione ( foo
sendo o arquivo em /etc/pam.d
criado anteriormente):
PAMName=foo
Agora, quando você iniciar o serviço (após recarregar, etc.), os session
modules em /etc/pam.d/foo
serão executados, o que neste caso é apenas pam_env
. pam_env
carregará variáveis de ambiente de /etc/environment
, sujeito a restrições em /etc/security/pam_env.conf
e, em seguida, o ambiente do usuário a partir de ~/some-file
. Como PATH
é definido como um valor padrão em /etc/environment
, o ambiente do usuário é adicionado a esse valor padrão.
Aqui, o valor padrão de user_envfile
é .pam_environment
, que também é lido pela configuração do PAM de outras coisas como SSH ou login do LightDM, etc. Eu usei um arquivo diferente aqui caso você não queira afeta essas coisas. Você pode remover o user_envfile=...
e usar o padrão ~/.pam_environment
. você também pode usar apenas uma configuração existente do PAM em /etc/pam.d
, que possui user_readenv=1
, mas outros módulos PAM podem causar efeitos colaterais indesejados.