Eu encontrei algo que funciona muito bem no KDE
kdesu -u username /path/to/program
Minha conta de usuário comum é, digamos, user1. Eu criei user2 separado para alguns aplicativos x que eu gostaria de executar ao ser logado em x como user1, mas de uma forma que irá impedi-lo de acesso de leitura / gravação para os dados user1. Eu pensei que eu poderia usar xauth e sudo / su para user2 do user1 para executar este aplicativo. Como eu faço isso? Não sei como configurar o xauth.
Para usar o xauth seletivamente, como o user1 é executado:
xauth list|grep 'uname -n'
Isto imprime as entradas de autorização hexkey para você. Você poderia ter exibições diferentes associadas a esses hosts também.
Como user2 define sua exibição (assumindo o caso padrão):
DISPLAY=:0; export DISPLAY
Em seguida, execute:
xauth add $DISPLAY . hexkey
Observe o ponto após o $ DISPLAY e antes do hexkey.
Quando o acesso não é mais necessário, como user2 você pode executar:
xauth remove $DISPLAY
Eu coloco minha .zshrc
a linha com export XAUTHORITY=~/.Xauthority
e agora posso executar sudo -E xcommand
. Depois de muito googlar, para mim esta foi a maneira mais fácil.
Assumindo o debian ou ubuntu (deve ser similar no Red Hat / SUSE).
sudo apt-get install sux
sux user -c 'command'
Primeiro: não use xhost +
, é bastante inseguro (permissão / negação geral).
Em vez disso, use o mecanismo X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Alternativamente, se você tiver sux
instalado, use isso (veja a resposta de ehempel).
Em ambos os casos, o usuário2 usará o cookie secreto em .Xauthority para autorizar o servidor X, e ninguém mais terá acesso a ele.
Notas:
.Xauthority
, você também pode usar xauth
para extrair e copiar a chave de autorização (veja a resposta de Randall). Se você tiver várias chaves no arquivo .Xauthority
, isso é mais seletivo; caso contrário, é uma questão de gosto. Isso resolverá o problema de todos os usuários:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF
Como root:
xhost local:yourusername
Onde seu nome de usuário é seu nome de usuário:)
Então faça o su como seu usuário
xclock
deve funcionar se estiver instalado
Estes são apenas hacks:
sleske acima tem, penso eu, a solução adequada.
Desta forma, feito em suse / opensuse: link
Simplesmente modificando o /etc/pam.d/su, adicionando a opção (negrito):
session optional pam_xauth.so systemuser=1
Então você pode alternar com o su sem -:
su user2
e execute o aplicativo graficamente.
Para o GNOME (e sem qualquer ambiente de desktop, eu uso apenas com o icewm) gksu
:
gksu -u username program