Digamos que eu tenho 2 contas de usuário user1
e user2
. Quando efetuo login como user1
e depois user2
uso su
, posso executar programas de linha de comando, mas os programas da GUI falham.
Exemplo:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
Então, como posso executar um aplicativo GUI?
$XAUTHORITY
ainda está definido como user1's~/.Xauthority
, que o programa, eu acho, tentará ler, e falha porque esse arquivo normalmente tem o modo 0600 (-rw-------
), o que significa que não está disponível para leitura por qualquer pessoa do grupo "outro", que inclui o usuário2. Ou seja, se vocêchmod o+r ~/.Xauthority
(como usuário1), você terá invadido esse problema. Eu escrevi um script que demonstra isso.Respostas:
su vs. su -
Ao se tornar outro usuário, você geralmente deseja usar
su - user2
. O traço forçará o usuário2.bash_profile
a obter a origem.xhost
Além disso, você precisará conceder aos usuários acesso ao seu monitor. Isso é controlado pelo X. Você pode usar o comando
xhost +
para permitir que outros usuários exibam GUIs na área de trabalho do usuário1.NOTA: Ao executar,
xhost +
você deseja executá-lo ainda em um shell que pertence ao usuário1.$ DISPLAY
Quando você se torna usuário2, pode ser necessário definir a variável de ambiente
$DISPLAY
.fonte
xhost +user2
ainda me dá esse erro -xhost: bad hostname "user2"
. Pesquisei alguns no Google e parece que preciso fazerxhost +user2@laptop
ouxhost +user2@localhost
não tenho certeza de qual. Então dizxhost +user2@localhost being added to access control list
.xhost
e especificarexport DISPLAY=:0.0
, a execuçãoleafpad
ainda me dáNo protocol specified leafpad: Cannot open display:
e falha na execução. Encontrei este link em linuxquestions.org/questions/linux-newbie-8/… , que diz que existem alguns cookies mágicos exauth
. Você já testou que essas coisas funcionam no seu computador? Talvez algo esteja diferente com a minha configuração? Estou no Debian + LXDE.xhost +
trabalhos e nada mais parece ser necessário (não é necessário definir$DISPLAY
). Você pode atualizar sua resposta e eu a aceito?xhost
fornece uma lista no formatoSI:localuser:USERNAME
, portantoxhost SI:localuser:user2
deve funcionar. Ah, e a exibição do usuário pode ser encontrada usandow
.xhost +
permitirá que qualquer usuário em qualquer host que possa se conectar ao seu servidor x acesse sua tela.xhost +SI:localuser:user2
funciona para mim no Debian.Você precisa compartilhar o token de autenticação do usuário1 (supondo que
~
seja a casa do usuário1 ):fonte
tee -a
para evitar que ocorra qualquer informação existente no.Xauthority
.Você pode usar o encaminhamento X11:
fonte
Você pode iniciar o aplicativo a partir de outro usuário. Iniciarei o aplicativo gimp a partir do usuário2, enquanto estiver conectado (GUI) com o usuário 1:
(insira o passe)
Aproveitar :)
fonte
export DISPLAY
primeiro, como a resposta aceita diz)$ xhost -
Você pode tentar o comando sux:
O sux manipulará o material $ DISPLAY para você. Pode ser necessário instalá-lo com:
sob Debian / Ubuntu.
fonte
sux
não é mais enviado pelo Debian ou Ubuntu. A melhor alternativa que eu poderia encontrar é a adiçãoxhost SI:localuser:root
(ou qualquer usuário) para~/.xprofile
permitir-lo permanentemente ou para usorunuser
gksu
/gksudo
alternativa que funcionava bem. Enquanto ainda está no Sid, ele é removido no Buster por problemas de segurança.Como alternativa
sux
, para executar com segurança o comando gráfico (firefox-esr
no exemplo abaixo) como$AUTHUSER
(guest
no exemplo abaixo):o código faz:
guest
usuário acesso ao seu usuário atual$DISPLAY
viaxhost +SI:localuser:guest
ssh-askpass
para solicitar graficamente sua senha (é claro, você podesudoers(5)
NOPASSWD:
evitar isso, se sua política de segurança achar que está ok. Ou você pode usar outrosaskpass
programas ou especificá-los nos arquivos de configuração (vejasudo(8)
detalhes em--askpass
)sudoers(5)
), executa o comando/usr/bin/firefox-esr
como outro usuário (guest
)guest
) para acessar o seu$DISPLAY
são revogadas viaxhost -SI:localuser:guest
finalmente,
sudo -K
remove a senha em cache; portanto, a próxima chamada dessh-askpass
solicitará a senha novamente (em vez de usar a senha em cache)Embora seja um pouco mais trabalhoso do que o que
gksu(8)
ou o quesux(8)
foi feito, ele pode ser script e é muito mais seguro do que:xhost +
(qualquer usuário terá acesso à sua exibição gráfica enquanto estiver em vigor)gksu
/sux
did (cópia temporária de~/.Xauthority
, o que permitiu que o usuário especificado copiasse o seuMIT-MAGIC-COOKIE-1
e continuasse usando o seu monitor mesmo após a conclusão do gksu / sux (desde que você não desligasse a máquina ou desconectasse o monitor - protetores de tela, hibernação etc. não alteraram a mágica biscoito).pois permitirá apenas um usuário local acessar sua tela e somente enquanto o comando for executado (quando o comando for concluído,
$AUTHUSER
não será mais possível acessar sua tela de nenhuma maneira).Outra alternativa segura é
ssh -X
(sem-Y
que realmente o torna menos seguro! VerForwardX11Trusted
emssh_config(5)
para mais detalhes), como é mais fácil de usar se você não está scripting, mas induz sobrecarga additinal (por exemplo., É mais lento) e alguns programas podem não funcionar corretamente sem inseguro-Y
.fonte
Você precisa carregar a interface do usuário de instalação como user2 .
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
sudo su
. Usesudo
ousu
; escolha um. (3) A questão está escrita em termos deuser1
euser2
. Por favor, escreva sua resposta em termos deuser1
euser2
. (Faça ou não; não hátri
.) (4) Sua resposta seria melhor se incluísse uma explicação deSI:localuser
. …………………… Por favor, não responda nos comentários; edite sua resposta para torná-la mais clara e completa.