Mientras intentaba abrir Evince desde la línea de comando, me está dando un error
neo@Muhammad:~$ sudo evince
No protocol specified
** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:
¿Cómo solucionar este problema?
command-line
sudo
evince
Muhammad Iliyas
fuente
fuente

Respuestas:
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_DIRestá establecido porpam_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 specifiedoWARNING **: Could not open X displaydeberí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:
Y puede verificar qué
sudopiensa que es su PANTALLA escribiendo:Si no muestra nada, entonces ese es el problema. (Ver arreglo a continuación).
XAUTHORITY
Pero, ¿qué
DISPLAYpasa si ese no es el problema y está configurado correctamentesudo? 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:xauthyxhost. El más utilizado hoy en día esxauth(1) que utiliza laXAUTHORITYvariable de entorno. Nuevamente, verifiquemos si está configurado correctamentesudo:Si
XAUTHORITYestá apuntando a un archivo en su directorio de inicio para usted, pero está en blanco cuando lo ejecutasudo, 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
DISPLAYo las deXAUTHORITYentornosudo, puede indicarle asudo(8) que conserve el entorno utilizando la-Eopción, de esta manera:Una mejor manera: env_keep
Podrías preguntar, espera, si
-Etodo funciona mágicamente, ¿por qué no es el predeterminadosudo? 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íneaDefaults env_keep += "DISPLAY XAUTHORITY"al archivosudoers(5) usandovisudo(8) . Puede verificar qué variables de entorno conserva sudo ejecutando:(Sí, escribe
sudodos 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í: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,En este caso, estamos especificando
rootcomo nombre de usuario, ya que esa es la cuenta quesudoejecuta 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).
fuente
xhost +para permitir el acceso universal.)XDG_RUNTIME_DIRes una variable de entorno establecida en su contexto X Windows, para que los programas puedan encontrar cosas. Usted (neo) ha configurado el contexto gráfico.Al intentar ejecutar
evincecomoroot, ha ingresado la condición en la que un usuario (root) está intentando acceder a laneopantalla de otro usuario ( ). Esto se considera como algo malo.Si decides que DEBES ejecutar un editor gráfico como
root, leeman gksudoy utilizagksudo.fuente
journalctl -b -p err | wl-copyinformaFailed to connect to a Wayland serverque tiene sentido, pero suena tonto por el POV del usuario.