Primeiras coisas primeiro: XDG_RUNTIME_DIR
Para responder à sua primeira pergunta, "O que é XDG_RUNTIME_DIR?" , é uma variável de ambiente que é definida automaticamente quando você faz login. Diz a qualquer programa que você executa onde encontra um diretório específico do usuário no qual pode armazenar pequenos arquivos temporários. Observe que XDG_RUNTIME_DIR
é definido por pam_systemd
(8) , portanto, não está realmente relacionado ao X (executando programas graficamente), que é o problema que você parece estar tendo.
Como solucionar problemas
Sua segunda pergunta, "Como solucionar esse problema?" é muito bom. Isso significa que você está interessado não apenas no que é a correção, mas também em como descobrir isso sozinho. Para começar, observe primeiro as primeiras mensagens de erro. Em particular, procurar No protocol specified
ou WARNING **: Could not open X display
deve mostrar que o problema está no X (também chamado de Sistema de Janelas X ), que mostra como os programas gráficos são exibidos na tela. Saber isso deve gerar muitas perguntas para a solução de problemas em sua mente.
X DISPLAY
Sua próxima pergunta pode ser: o que é esse "monitor X" que não pode ser aberto? Um "display" é o endereço da sua tela. [*] Qualquer programa que queira gravar na sua tela precisa saber o endereço. Você pode ver qual é o seu monitor X verificando a variável de ambiente DISPLAY:
echo $DISPLAY
E você pode verificar o que sudo
acha que seu DISPLAY é digitando:
sudo -s
echo $DISPLAY
exit
Se não mostrar nada, então esse é o problema. (Veja a correção abaixo).
XAUTHORITY
Mas, e se esse não for o problema e o DISPLAY
estiver definido corretamente sudo
? Então você pode se perguntar: o X tem algum tipo de permissão que impede que outros usuários escrevam no meu monitor? Se você achou isso correto, o X tem dois métodos principais de autorização: xauth
e xhost
. O mais usado hoje é xauth
(1), que usa a XAUTHORITY
variável de ambiente. Mais uma vez, vamos verificar se está configurado corretamente sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Se XAUTHORITY
estiver apontando para um arquivo no diretório inicial para você, mas estiver em branco quando você executar sudo
, esse é o problema.
CORRECÇÃO: Salvar as variáveis de ambiente
Então, qual é o problema? Se as variáveis de ambiente DISPLAY
ou XAUTHORITY
não estiverem sendo salvas sudo
, você pode dizer sudo
(8) para preservar o ambiente usando a -E
opção:
sudo -E evince
Uma maneira melhor: env_keep
Você pode perguntar, espere, se -E
faz tudo funcionar magicamente, por que não é o padrão sudo
? A resposta é que é um risco potencial à segurança. As variáveis de ambiente afetam a maneira como os programas funcionam e você não deseja que todos sejam exportados de uma conta de usuário para a raiz. A maneira "correta" de fazer isso é adicionar a linha Defaults env_keep += "DISPLAY XAUTHORITY"
ao arquivo sudoers
(5) usando visudo
(8) . Você pode verificar quais variáveis de ambiente o sudo preserva executando:
sudo sudo -V
(Sim, você digita sudo
duas vezes). Eu recomendo colocar a linha não no arquivo sudoers padrão ( /etc/sudoers
), mas em um arquivo local que não será substituído quando você atualizar seu sistema. Você pode fazer o seguinte:
sudo visudo -f /etc/sudoers.d/local
Mas espere, e se nenhuma das opções acima funcionar?
Acho que essa é uma resposta bastante completa, mas se você ainda está tendo problemas, há outra coisa que eu sugiro. Você pode usar xhost
(1) para conceder acesso a um usuário específico no host local (sua máquina) dessa forma,
xhost si:localuser:root
Nesse caso, especificamos root
como o nome de usuário, pois essa é a conta que sudo
executa os programas como.
[*] : P: Eu tenho apenas uma tela, então por que um monitor X precisa de um "endereço"? R: É porque o X pode funcionar não apenas na sua máquina, mas na Internet. Com o X , é fácil executar programas em sua máquina que aparecem em outros hosts da Internet e programas em outros hosts que aparecem na tela (supondo que você permita a eles).