Eu instalei /usr/local/stata/xstata-mp como root, permissões 755.
Quando tento executar este programa a partir de uma conta não raiz por meio do terminal, recebo:
user@host ~ % /usr/local/stata/xstata-mp
(xstata-mp:8030): Gtk-WARNING **: 10:09:24.384: cannot open display: 0
"Isso é estranho", eu acho, só sei que configurei DISPLAY=0
em meu .zshrc, "Bem, talvez eu precise fazer isso explicitamente ao executar este comando?" Então eu tento:
user@host ~ % DISPLAY=0 /usr/local/stata/stata-mp
(xstata-mp:8201): Gtk-WARNING **: 10:13:28.638: cannot open display: 0
Editar: de acordo com o comentário de @steeldriver, também tentei DISPLAY =: 0
Eu dei uma olhada e descobri Por que não gksu/gksudo ou iniciar um aplicativo gráfico com sudo funciona com Wayland? o que parece promissor (embora eu não esteja usando o Wayland, estou no Ubuntu 18.10 e o Wayland continua instalado). Eu tento o comando abaixo como user@host e como su em uma conta administrativa:
user@host ~ % xhost -si:localuser:root
xhost: unable to open display "0"
Eu fico desesperada, e tento:
user@host ~ % DISPLAY=0 xhost -si:localuser:root
xhost: unable to open display "0"
Eu tento outros números de exibição, todos sem sucesso. Eu penso "Eu sou um newb, talvez localhost
realmente signifique [USUÁRIO LOCAL] e tente com as permutações mencionadas acima.
user@host ~ % xhost -si:user:root
xhost: unable to open display "0"
Acontece que sou novato, mas isso não ajudou. :)
Como posso fazer a mágica do xhost acontecer para que o Gtk não dê um ataque e eu possa apenas iniciar meu aplicativo (como usuário@host)?
EDIÇÃO 3-22-2019:
pgrep -a Xorg
3907 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/123/gdm/Xauthority -background none -noreset -keeptty -verbose 3
7370 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
Por algum motivo (provavelmente relacionado ao fato de eu ser um newb mencionado acima), embora
echo $DISPLAY
return:0
, se eu digitarwho
, vejo que minha exibição é realmente:1
(?!), de modo que, se eu invocarDISPLAY=:1 /usr/local/stata/stata-mp
, o programa será iniciado sem erros.Para reiterar minha solução de
unable to open display #
:who
e anote o número de exibição real (incluindo dois pontos, se presente)xhost
, ou/usr/local/stata/stata-mp
), digiteDISPLAY=[INSERT NUMBER YOU NOTED HERE] [x COMMAND HERE]
Terei prazer em votar e aceitar outra resposta que possa me ajudar a entender esse comportamento aparentemente discrepante.
Tentar
xhost +si:localuser:root
Isso diz ao xserver que você está usando (seja no display :0 ou :1, ou onde quer que seja) para aceitar conexões de usuários locais chamados 'root' - isto é, programas com SUID para root, ou você fez
sudo
antes.Nenhum dos esquemas xauth ou xhost permitiu que o root abrisse a exibição no Debian 10 (Buster) ou Ubuntu 20.04 a partir de um terminal executando root via "su" ou um aplicativo iniciado usando "sudo".
Alguém (não me lembro quem) postou (não me lembro onde) para adicionar a seguinte linha a /etc/pam.d/su e /etc/pam.d/sudo:
sessão opcional pam_xauth.so
Seria útil se isso fosse (a) mais fácil de encontrar ou (b) assim nas distribuições.
A execução de uma janela X sob sudo (ou como root) normalmente falha com um arquivo
unable to open display ..
. Eu não tentei modificar o/etc/pam.d/su and /etc/pam.d/sudo
arquivo, mas outra pequena solução corrige a exibição (como root) ala este script:
Salve como, diga
xsudo.sh
e chame como um comando normalsudo
ala> xsudo.sh gparted
Ele apenas adiciona seu cookie xauth por usuário aos cookies de contas raiz e, portanto, faz com que a exibição funcione no host local.