Soluzione 1:
Per utilizzare xauth in modo selettivo, as user1 eseguire:
xauth list|grep `uname -n`
Questo stampa le voci di autorizzazione hexkey per te. Potresti avere display diversi associati anche a quegli host.
Come user2 imposta il display (assumendo il caso predefinito):
DISPLAY=:0; export DISPLAY
Quindi esegui:
xauth add $DISPLAY . hexkey
Nota il punto dopo $DISPLAY e prima della chiave esadecimale.
Quando l'accesso non è più necessario, come utente2 puoi eseguire:
xauth remove $DISPLAY
Soluzione 2:
Ho inserito il mio .zshrc
una riga con export XAUTHORITY=~/.Xauthority
e ora sono in grado di eseguire sudo -E xcommand
. Dopo molte ricerche su Google, per me questo è stato il modo più semplice.
Soluzione 3:
Primo:non usare xhost +
, è piuttosto insicuro (blanket allow/deny).
Usa piuttosto il meccanismo X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
In alternativa, se hai sux
installato, usa quello (vedi la risposta di ehempel).
In entrambi i casi l'utente2 utilizzerà il cookie segreto in .Xauthority per autorizzare il server X e nessun altro avrà accesso ad esso.
Note:
- A seconda delle autorizzazioni del tuo file, potresti dover copiare .Xauthority in qualche altro modo.
- Invece di copiare
.Xauthority
, puoi anche utilizzarexauth
per estrarre e copiare la chiave di autorizzazione (vedi la risposta di Randall). Se hai più chiavi nel.Xauthority
file questo è più selettivo; altrimenti è una questione di gusti.
Soluzione 4:
Assumendo debian o ubuntu (dovrebbe essere simile su Red Hat / SUSE).
sudo apt-get install sux
sux user -c 'command'
Soluzione 5:
Questo risolverà il problema per tutti gli utenti:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF