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_DIR
está 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 specified
oWARNING **: 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:
Y puede verificar qué
sudo
piensa que es su PANTALLA escribiendo: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 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:xauth
yxhost
. El más utilizado hoy en día esxauth
(1) que utiliza laXAUTHORITY
variable de entorno. Nuevamente, verifiquemos si está configurado correctamentesudo
:Si
XAUTHORITY
está 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
DISPLAY
o las deXAUTHORITY
entornosudo
, puede indicarle asudo
(8) que conserve el entorno utilizando la-E
opción, de esta manera:Una mejor manera: env_keep
Podrías preguntar, espera, si
-E
todo 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
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í: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
root
como nombre de usuario, ya que esa es la cuenta quesudo
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).
fuente
xhost +
para permitir el acceso universal.)XDG_RUNTIME_DIR
es 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
evince
comoroot
, ha ingresado la condición en la que un usuario (root
) está intentando acceder a laneo
pantalla de otro usuario ( ). Esto se considera como algo malo.Si decides que DEBES ejecutar un editor gráfico como
root
, leeman gksudo
y utilizagksudo
.fuente
journalctl -b -p err | wl-copy
informaFailed to connect to a Wayland server
que tiene sentido, pero suena tonto por el POV del usuario.