Solusi 1:
Untuk menggunakan xauth secara selektif, saat pengguna1 menjalankan:
xauth list|grep `uname -n`
Ini mencetak entri otorisasi hexkey untuk Anda. Anda bisa memiliki tampilan berbeda yang terkait dengan host tersebut juga.
Saat pengguna2 menyetel tampilan Anda (dengan asumsi huruf besar-kecil):
DISPLAY=:0; export DISPLAY
Kemudian jalankan:
xauth add $DISPLAY . hexkey
Perhatikan titik setelah $DISPLAY dan sebelum hexkey.
Saat akses tidak lagi diperlukan, sebagai pengguna2 Anda dapat menjalankan:
xauth remove $DISPLAY
Solusi 2:
Saya memasukkan .zshrc
saya baris dengan export XAUTHORITY=~/.Xauthority
dan sekarang saya bisa mengeksekusi sudo -E xcommand
. Setelah banyak googling, bagi saya ini adalah cara termudah.
Solusi 3:
Pertama:Jangan gunakan xhost +
, agak tidak aman (blanket allow/deny).
Lebih baik gunakan mekanisme X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Atau, jika Anda memiliki sux
diinstal, gunakan itu (lihat jawaban ehempel).
Dalam kedua kasus, pengguna2 akan menggunakan cookie rahasia di .Xauthority untuk mengotorisasi ke server X, dan tidak ada orang lain yang memiliki akses ke sana.
Catatan:
- Bergantung pada izin file Anda, Anda mungkin harus menyalin .Xauthority dengan cara lain.
- Daripada menyalin
.Xauthority
, Anda juga dapat menggunakanxauth
untuk mengekstrak dan menyalin kunci otorisasi (lihat jawaban Randall). Jika Anda memiliki beberapa kunci di.Xauthority
file ini lebih selektif; kalau tidak, itu masalah selera.
Solusi 4:
Dengan asumsi debian atau ubuntu (harus serupa di Red Hat / SUSE).
sudo apt-get install sux
sux user -c 'command'
Solusi 5:
Ini akan memperbaiki masalah untuk semua pengguna:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF