O problema não está ocorrendo devido ao UID do usuário. O 500 é excelente como um UID, e esse UID não o torna um usuário que não faz login, exceto aos olhos das configurações padrão de alguns poucos gerenciadores de tela.
A mensagem de erro Nenhum protocolo especificado soa como uma mensagem de erro específica do aplicativo e não é útil, mas acho que o erro é que o aplicativo não pode entrar em contato com o monitor X11 porque não tem permissão para fazer isso. por isso está sendo executado como um usuário diferente. Os aplicativos precisam de um "cookie mágico" (token secreto) para conversar com o servidor X11 para que outros processos no sistema em execução sob outros usuários não possam invadir sua tela, criar janelas e espionar suas teclas. O outro usuário do sistema não tem acesso a esse cookie mágico porque as permissões são definidas para que sejam acessíveis apenas ao usuário que iniciou o ambiente da área de trabalho (que é como deveria ser).
Tente isso, executando como seu usuário original, para copiar o cookie X11 para a outra conta:
su - <otheruser> -c "unset XAUTHORITY; xauth add $(xauth list)"
em seguida, execute seu aplicativo. Você também pode precisar desmarcar XAUTHORITY
esse shell também. Esse comando extrai o cookie mágico ( xauth list
) do seu usuário principal e o adiciona ( xauth add
) para onde o outro usuário pode obtê-lo.
xauth list >/tmp/xa.$$; su - <otheruser> -c "unset XAUTHORITY; xargs xauth add </tmp/xa.$$"; rm -f /tmp/xa.$$
mas esteja ciente de que há uma condição de corrida horrível lá.su
quiser pedir uma senha. Experimente este novo comando.No meu caso, o novo servidor de exibição
wayland
foi o problema,basta fazer com
xhost + local:
que outros usuários (por exemplo, root) tenham permissão para executar programas em sua sessão; no entanto, as conexões de rede não serão permitidas.Se você deseja permitir clientes de qualquer host , é possível usá-lo
xhost +
sem especificar nenhum host. No entanto , isso é inseguro ; seria melhor especificar apenas os hosts para os quais você deseja conceder acesso à sua sessão.fonte
xhost +
foi suficienteSuponha que você queira que a força bruta faça uma conexão com X ...
Vamos supor que você já esteja executando seus comandos no servidor (onde o X é executado); caso contrário, faça com que funcione primeiro e depois use o 'ssh -X user @ server) do cliente depois;).
Pode haver várias maneiras de executar os comandos xauth, por exemplo, você pode estar usando 'sudo', mas isso pode perder ou alterar variáveis de ambiente. As seguintes variáveis de ambiente precisam ser preservadas: DISPLAY e XAUTHORITY. Para testar se esse é o caso, você pode executar 'echo $ XAUTHORITY' da mesma maneira que executa seus comandos, mas certifique-se de não expandir as variáveis de ambiente antes de executar esses comandos. Por exemplo, tente: sudo bash -c 'echo "$ XAUTHORITY"' para ver o que realmente é XAUTHORITY depois de executar o seu sudo (se ele desaparecer, talvez seja necessário adicionar algo ao seu arquivo sudoers, consulte outro local).
Eventualmente, execute o seguinte comando como o usuário com o qual você deseja acessar, no servidor:
xauth info
Isso mostrará o 'arquivo de autoridade' que será usado (/root/.Xauthority por padrão, para root ou algo como /home/theuser/.Xauthority). Se ele mostrar o arquivo .Xauthority correto, não será necessário se preocupar com a variável de ambiente XAUTHORITY (na verdade, eu não saberia quando não apareceria, exceto se você quiser manipular um local não padrão desse arquivo )
Remova esse arquivo (se ele existir):
rm /root/.Xauthority
Substitua
/root/.Xauthority
pelo arquivo XAUTHORITY correto para o seu caso.Recrie-o, mas vazio (isso é necessário para muitos comandos):
touch /root/.Xauthority
Nesse ponto, você receberá o erro No protocol especificado , mesmo se você tiver MIT-MAGIC-COOKIE-1 inválido antes. Encontre o arquivo de autoridade que o servidor X está usando no momento:
ps aux | grep Xorg
Isso deve mostrar algo como:
root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7
O nome do arquivo depois
-auth
é o que você precisa no próximo comando. Execute isso como root:sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list
Isso lista uma chave hexadecimal de 32 dígitos. Por exemplo, a saída poderia ser:
hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
Use isso para gerar seu arquivo .Xauthority (como usuário que precisa fazer login novamente):
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
substitua 'c0eaf749aa252101a0f57d5087089db7' pelo que foi retornado pelo comando list para você. Agora, a sua .Xauthority deve ter o tamanho de 51 bytes e você pode se conectar ao servidor X (novamente).
fonte
Tente algo assim
fonte
Ps : a resposta aceita não funcionou para mim
fonte
Eu tive esse erro "Nenhum protocolo especificado" quando iniciei uma instância do Selenium 3.3.1 a partir de um script inicial e usei o driver Chrome no Selenium. O Selenium foi executado como o mesmo usuário do X11 e a variável de ambiente do shell DISPLAY foi definida corretamente. O interessante é que esse erro não ocorreu quando eu usei o driver do Firefox. A configuração da variável de ambiente do shell XAUTHORITY no script inicial para apontar para o valor de $ XAUTHORITY do usuário ativo do X11 corrigiu o erro do driver do Chrome.
Em uma nota lateral, o erro "Nenhum protocolo especificado" foi completamente ocultado pelo driver Chrome / Chrome e não foi de forma alguma fácil de encontrar. Percebi que o Chrome continuava criando diretórios no padrão de
/tmp/.org.chromium.Chromium.*
, mas eles estavam desaparecendo rapidamente. Consegui perceber que eles continham um arquivochrome_debug.log
com a mensagem "Não é possível abrir a tela". Achei que isso era bastante estranho, pois verifiquei que o processo Selenium tinha o DISPLAY correto/proc/$pid/environ
e examinei a saída dostrace
processo Selenium mais detalhadamente, o que revelou "Nenhum protocolo especificado", levando-me a essa pergunta.Este erro pode ser reproduzido desmarcando XAUTHORITY e tentando executar algum cliente X11. Por exemplo:
fonte
Isso foi simples. O problema ocorre quando você está no estado raiz e deseja usar o gksu Apenas saia do estado raiz e tente novamente
fonte
Basta digitar isso no seu terminal e
xhost +SI:localuser:root
digitarexport DISPLAY=:0.0
e tentar novamentefonte
Usando dicas nas respostas aceitas, consegui resolver o problema de maneira diferente:
Em código:
fonte
Vamos dizer que você tenta acessar a GUI como usuário2 ( usuário normal ) e, em seguida, é necessário carregar a interface do usuário de instalação como usuário2 .
Tente seguir o seguinte:
Faça o login como root :
Teste o servidor x:
Se você pode ver um relógio funcionando, está pronto, tente executar o seguinte:
O resultado deve ser assim:
Agora deixe o user2 acessar o xhost
Agora tente entrar novamente no user2 e tente abrir qualquer programa da GUI.
fonte