Lösung 1:
Um xauth selektiv zu verwenden als Benutzer1 ausführen:
xauth list|grep `uname -n`
Dadurch werden die Hexkey - Autorisierungseinträge für Sie gedruckt . Sie könnten haben auch unterschiedliche Displays, die diesen Hosts zugeordnet sind.
Stellen Sie als Benutzer2 Ihre Anzeige ein (vorausgesetzter Fall):
DISPLAY=:0; export DISPLAY
Führen Sie dann Folgendes aus:
xauth add $DISPLAY . hexkey
Beachten Sie den Punkt nach dem $DISPLAY und vor dem Hexkey.
Wenn der Zugriff nicht mehr benötigt wird, können Sie als Benutzer2 Folgendes ausführen:
xauth remove $DISPLAY
Lösung 2:
Ich habe meinen .zshrc
eingegeben eine Zeile mit export XAUTHORITY=~/.Xauthority
und jetzt kann ich sudo -E xcommand
ausführen . Nach langem Googeln war das für mich der einfachste Weg.
Lösung 3:
Erstens:Verwenden Sie nicht xhost +
, es ist ziemlich unsicher (pauschales Erlauben/Verweigern).
Verwenden Sie lieber den X-Cookie-Mechanismus:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Alternativ, wenn Sie sux
haben installiert, benutze das (siehe ehempels Antwort).
In beiden Fällen verwendet Benutzer2 das geheime Cookie in .Xauthority, um sich beim X-Server zu autorisieren, und niemand sonst hat Zugriff darauf.
Hinweise:
- Abhängig von Ihren Dateiberechtigungen müssen Sie .Xauthority möglicherweise auf andere Weise kopieren.
- Anstatt
.Xauthority
zu kopieren , können Sie auchxauth
verwenden um den Autorisierungsschlüssel zu extrahieren und zu kopieren (siehe Randalls Antwort). Wenn Sie mehrere Schlüssel im.Xauthority
haben Datei ist selektiver; ansonsten ist es geschmackssache.
Lösung 4:
Unter der Annahme von Debian oder Ubuntu (sollte auf Red Hat / SUSE ähnlich sein).
sudo apt-get install sux
sux user -c 'command'
Lösung 5:
Dadurch wird das Problem für alle Benutzer behoben:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF