Solución 1:
Para usar xauth de forma selectiva, como usuario1 ejecutar:
xauth list|grep `uname -n`
Esto imprime las entradas de autorización de clave hexadecimal para usted. podrías tener diferentes pantallas asociadas con esos hosts también.
Como usuario2, configure su pantalla (asumiendo el caso predeterminado):
DISPLAY=:0; export DISPLAY
Luego ejecuta:
xauth add $DISPLAY . hexkey
Tenga en cuenta el punto después de $DISPLAY y antes de la clave hexadecimal.
Cuando ya no se necesita acceso, como usuario2 puede ejecutar:
xauth remove $DISPLAY
Solución 2:
Puse mi .zshrc
una línea con export XAUTHORITY=~/.Xauthority
y ahora puedo ejecutar sudo -E xcommand
. Después de mucho buscar en Google, para mí esta fue la forma más fácil.
Solución 3:
Primero:no use xhost +
, es bastante inseguro (permitir/denegar general).
Más bien utilice el mecanismo X-Cookie:
su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority
export DISPLAY=:0
Alternativamente, si tiene sux
instalado, use eso (vea la respuesta de ehempel).
En ambos casos, el usuario 2 utilizará la cookie secreta en .Xauthority para autorizar el servidor X y nadie más tendrá acceso a él.
Notas:
- Dependiendo de sus permisos de archivo, es posible que deba copiar .Xauthority de alguna otra manera.
- En lugar de copiar
.Xauthority
, también puedes usarxauth
para extraer y copiar la clave de autorización (ver la respuesta de Randall). Si tiene varias claves en el.Xauthority
archivo esto es más selectivo; de lo contrario, es cuestión de gustos.
Solución 4:
Suponiendo que debian o ubuntu (debería ser similar en Red Hat/SUSE).
sudo apt-get install sux
sux user -c 'command'
Solución 5:
Esto solucionará el problema para todos los usuarios:
cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF