Solution 1 :
Pour utiliser xauth sélectivement, en tant qu'utilisateur1, exécutez :
xauth list|grep `uname -n`
Cela imprime les entrées d'autorisation hexkey pour vous. Vous pourriez ont également différents affichages associés à ces hôtes.
En tant qu'utilisateur2, définissez votre affichage (en supposant que le cas par défaut) :
DISPLAY=:0; export DISPLAY
Exécutez ensuite :
xauth add $DISPLAY . hexkey
Notez le point après $DISPLAY et avant la clé hexagonale.
Lorsque l'accès n'est plus nécessaire, en tant qu'utilisateur2, vous pouvez exécuter :
xauth remove $DISPLAY
Solution 2 :
J'ai mis mon .zshrc
une ligne avec export XAUTHORITY=~/.Xauthority
et maintenant je suis capable d'exécuter sudo -E xcommand
. Après de nombreuses recherches sur Google, c'était pour moi le moyen le plus simple.
Solution 3 :
Premièrement :n'utilisez pas xhost +
, c'est plutôt peu sûr (autorisation/refus général).
Utilisez plutôt le mécanisme X-Cookie :
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Alternativement, si vous avez sux
installé, utilisez-le (voir la réponse d'ehempel).
Dans les deux cas, l'utilisateur2 utilisera le cookie secret dans .Xauthority pour autoriser le serveur X, et personne d'autre n'y aura accès.
Remarques :
- Selon vos autorisations de fichier, vous devrez peut-être copier .Xauthority d'une autre manière.
- Au lieu de copier
.Xauthority
, vous pouvez également utiliserxauth
pour extraire et copier la clé d'autorisation (voir la réponse de Randall). Si vous avez plusieurs clés dans le.Xauthority
fichier c'est plus sélectif; sinon c'est une question de goût.
Solution 4 :
En supposant que debian ou ubuntu (devrait être similaire sur Red Hat / SUSE).
sudo apt-get install sux
sux user -c 'command'
Solution 5 :
Cela résoudra le problème pour tous les utilisateurs :
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF