Enquanto eu tentava abrir o Evince na linha de comando, isso estava me dando um erro
neo@Muhammad:~$ sudo evince
No protocol specified
** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:
Como solucionar esse problema?
command-line
sudo
evince
Muhammad Iliyas
fonte
fonte
Respostas:
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 porpam_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
ouWARNING **: 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:
E você pode verificar o que
sudo
acha que seu DISPLAY é digitando: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 corretamentesudo
? 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
exhost
. O mais usado hoje éxauth
(1), que usa aXAUTHORITY
variável de ambiente. Mais uma vez, vamos verificar se está configurado corretamentesudo
:Se
XAUTHORITY
estiver apontando para um arquivo no diretório inicial para você, mas estiver em branco quando você executarsudo
, esse é o problema.CORRECÇÃO: Salvar as variáveis de ambiente
Então, qual é o problema? Se as variáveis de ambiente
DISPLAY
ouXAUTHORITY
não estiverem sendo salvassudo
, você pode dizersudo
(8) para preservar o ambiente usando a-E
opção:Uma maneira melhor: env_keep
Você pode perguntar, espere, se
-E
faz tudo funcionar magicamente, por que não é o padrãosudo
? 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 linhaDefaults env_keep += "DISPLAY XAUTHORITY"
ao arquivosudoers
(5) usandovisudo
(8) . Você pode verificar quais variáveis de ambiente o sudo preserva executando:(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: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,Nesse caso, especificamos
root
como o nome de usuário, pois essa é a conta quesudo
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).
fonte
xhost +
para permitir o acesso universal.)XDG_RUNTIME_DIR
é uma variável de ambiente definida no contexto do X Windows, para que os programas possam encontrar coisas. Você (neo
) configurou o contexto gráfico.Ao tentar executar
evince
comoroot
, você inseriu a condição em que um usuário (root
) está tentando acessar aneo
exibição de outro usuário ( ). Isso é considerado uma coisa ruim.Se você decidir que DEVE executar um editor gráfico como
root
, leiaman gksudo
e utilizegksudo
.fonte
journalctl -b -p err | wl-copy
relata oFailed to connect to a Wayland server
que faz sentido, mas parece idiota do POV do usuário.