Řešení 1:
Chcete-li xauth používat selektivně jako uživatel1 spusťte:
xauth list|grep `uname -n`
Tím se vytisknou položky oprávnění hexkey. Mohli byste mít také různé displeje spojené s těmito hostiteli.
Jako uživatel2 nastavte svůj displej (za předpokladu, že výchozí velikost písmen):
DISPLAY=:0; export DISPLAY
Poté spusťte:
xauth add $DISPLAY . hexkey
Všimněte si tečky za $DISPLAY a před hexadecimálním klíčem.
Když již přístup nepotřebujete, jako uživatel2 můžete spustit:
xauth remove $DISPLAY
Řešení 2:
Vložil jsem svůj .zshrc
řádek s export XAUTHORITY=~/.Xauthority
a teď jsem schopen spustit sudo -E xcommand
. Po dlouhém googlování to pro mě byl nejjednodušší způsob.
Řešení 3:
Za prvé:Nepoužívejte xhost +
, je to dost nejisté (povolení/odepření přikrývky).
Použijte raději mechanismus X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Případně, pokud máte sux
nainstalovaný, použijte to (viz odpověď ehempel).
V obou případech uživatel2 použije tajný soubor cookie v .Xauthority k autorizaci na X serveru a nikdo jiný k němu nebude mít přístup.
Poznámky:
- V závislosti na vašich oprávněních k souboru možná budete muset zkopírovat .Xauthority jiným způsobem.
- Místo kopírování
.Xauthority
, můžete také použítxauth
extrahovat a zkopírovat autorizační klíč (viz odpověď Randalla). Pokud máte v.Xauthority
více klíčů soubor je selektivnější; jinak je to věc vkusu.
Řešení 4:
Za předpokladu, že debian nebo ubuntu (mělo by být podobné na Red Hat / SUSE).
sudo apt-get install sux
sux user -c 'command'
Řešení 5:
Toto vyřeší problém pro všechny uživatele:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF