Primero lo primero: XDG_RUNTIME_DIR
Para responder a su primera pregunta, "¿Qué es XDG_RUNTIME_DIR?" , es una variable de entorno que se configura automáticamente cuando inicia sesión. Le dice a cualquier programa que ejecute dónde encontrar un directorio específico del usuario en el que pueda almacenar pequeños archivos temporales. Tenga en cuenta que XDG_RUNTIME_DIR
está establecido por pam_systemd
(8) , por lo que en realidad no está relacionado con X (ejecutar programas gráficamente), que es el problema que parece tener.
Cómo solucionar problemas
Su segunda pregunta, "¿Cómo solucionar este problema?" es muy bueno Eso significa que está interesado no solo en cuál es la solución, sino también en cómo resolverlo usted mismo. Para comenzar, mire primero los primeros mensajes de error. En particular, buscar No protocol specified
o WARNING **: Could not open X display
debería mostrarle que el problema está en X (también llamado The X Windowing System ), que es cómo se muestran los programas gráficos en su pantalla. Saber eso debería plantear muchas preguntas de solución de problemas en su mente.
X PANTALLA
Su próxima pregunta podría ser, ¿qué es esta "pantalla X" que no puede abrirse? Una "pantalla" es la dirección de su pantalla. [*] Cualquier programa que quiera escribir en tu pantalla tiene que saber la dirección. Puede ver cuál es su pantalla X marcando la variable de entorno DISPLAY:
echo $DISPLAY
Y puede verificar qué sudo
piensa que es su PANTALLA escribiendo:
sudo -s
echo $DISPLAY
exit
Si no muestra nada, entonces ese es el problema. (Ver arreglo a continuación).
XAUTHORITY
Pero, ¿qué DISPLAY
pasa si ese no es el problema y está configurado correctamente sudo
? Entonces podría preguntarse, ¿ tiene X algún tipo de permiso que impida que otros usuarios escriban en mi pantalla? Si pensabas eso, estarías en lo cierto, X tiene dos métodos principales de autorización: xauth
y xhost
. El más utilizado hoy en día es xauth
(1) que utiliza la XAUTHORITY
variable de entorno. Nuevamente, verifiquemos si está configurado correctamente sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Si XAUTHORITY
está apuntando a un archivo en su directorio de inicio para usted, pero está en blanco cuando lo ejecuta sudo
, entonces ese es el problema.
REVISIÓN: guardar las variables de entorno
Entonces, ¿cuál es la solución? Si no se guardan las variables de entorno DISPLAY
o las de XAUTHORITY
entorno sudo
, puede indicarle a sudo
(8) que conserve el entorno utilizando la -E
opción, de esta manera:
sudo -E evince
Una mejor manera: env_keep
Podrías preguntar, espera, si -E
todo funciona mágicamente, ¿por qué no es el predeterminado sudo
? La respuesta es que es un peligro potencial para la seguridad. Las variables de entorno afectan la forma en que funcionan los programas y no desea que se exporten todos desde una cuenta de usuario a la raíz. La forma "correcta" de hacerlo es agregar la línea Defaults env_keep += "DISPLAY XAUTHORITY"
al archivo sudoers
(5) usando visudo
(8) . Puede verificar qué variables de entorno conserva sudo ejecutando:
sudo sudo -V
(Sí, escribe sudo
dos veces). Recomiendo poner la línea no en el archivo de sudoers predeterminado ( /etc/sudoers
), sino en un archivo local que no se sobrescribirá cuando actualice su sistema. Puedes hacerlo así:
sudo visudo -f /etc/sudoers.d/local
Pero espera, ¿qué pasa si ninguno de los anteriores funciona?
Creo que esta es una respuesta bastante exhaustiva, pero si todavía tiene problemas, hay otra cosa que sugeriría. Puede usar xhost
(1) para otorgar acceso a un usuario específico en el host local (su máquina) de esta manera,
xhost si:localuser:root
En este caso, estamos especificando root
como nombre de usuario, ya que esa es la cuenta que sudo
ejecuta programas como.
[*] : P: Solo tengo una pantalla, entonces ¿por qué una pantalla X necesita una "dirección"? R: Es porque X puede funcionar no solo en su máquina, sino a través de Internet. Con X , es fácil ejecutar programas en su máquina que aparecen en otros hosts de Internet y programas en otros hosts que aparecen en su pantalla (suponiendo que les dé permiso).