Não há uma resposta direta à sua pergunta, exceto "depende do ambiente", ou seja, da distribuição GNU / Linux.
Antes de entrar em detalhes semi-relevantes, você deve saber que o motivo pelo qual sudo service import-image-service
não funciona é porque o comando import não possui informações suficientes sobre o ambiente para saber onde e como tirar a captura de tela. Leitura homem sudo revela:
DESCRIPTION
sudo allows a permitted user to execute a command as the superuser or
another user, as specified by the security policy.
Isso é um pouco enigmático e aprender sobre essa "política de segurança" é divertido, mas talvez não seja uma de suas atividades favoritas. Eu dou a minha palavra que isso significa que os comandos iniciados com o sudo são executados em um ambiente isolado .
Por outro lado, /etc/init.d/myservice
funciona porque o environment-setup-policy toma medidas para configurar alguns padrões normais, como export DISPLAY=:0.0
. Você terá que investigar as complexidades da distribuição em uso para descobrir como informar adequadamente um serviço sobre a presença de um servidor X. Nesse meio tempo, você pode tentar sudo -E service myservice
-E The -E (preserve environment) option indicates to the secu‐
rity policy that the user wishes to preserve their existing
environment variables. The security policy may return an
error if the -E option is specified and the user does not
have permission to preserve the environment.
Alguns antecedentes
aviso: esta seção é semi-factual e tendenciosa historicamente
Os serviços em um sistema GNU / Linux se comportam de maneira arbitrária de uma distribuição para outra. Principalmente, a diferença está na configuração do ambiente antes que o serviço seja executado. Isso depende de vários fatores, sendo os mais importantes:
- sistema init
- shell simples do System V init + posix (Slackware, Debian)
- OpenRC (Gentoo)
- Upstart (Ubuntu)
- systemd (muitas distribuições recentes)
- distribuições environment-setup-policy *
- detalhes do script de inicialização específico
Debian, Slackware e Gentoo (OpenRC) usam uma abordagem concebivelmente semelhante, onde /etc/init.d/ services são scripts independentes que opcionalmente obtêm informações adicionais de / etc / default / servicename, / etc /conf.d/servicename e similar. Os scripts podem ou não depender da função init específica da distribuição, como / lib / lsb / init-functions ou /lib64/rc/sh/functions.sh. Essas bibliotecas de shell adicionais podem obter informações (configurar o ambiente) de fontes específicas de distribuição adicionais.
O Ubuntu (Upstart) e o systemd têm uma abordagem "inteiramente" diferente, em que cada serviço tem um arquivo de configuração e o sistema init faz toda a mágica.
Para entender completamente o que está acontecendo, é preciso ler e entender o sistema init e as peculiaridades da distribuição em uso.
* o processo de inicializar variáveis de ambiente e iniciar um serviço.