Feh al iniciar automáticamente desde rc.local ERROR: No se puede abrir la pantalla X. *Está* funcionando, ¿sí?

Feh al iniciar automáticamente desde rc.local ERROR: No se puede abrir la pantalla X. *Está* funcionando, ¿sí?

Estoy intentando ejecutar mi aplicación dotnet desde el archivo rc.local. Donde empiezo a reproducir videos (trabajar) o muestro una presentación de diapositivas de imágenes con el reproductor Feh. Si ejecuto mi script manualmente desde bash, funciona como debería.

Cuando intento ejecutar feh player me sale:

feh ERROR: Can't open X display. It *is* running, yeah?

De rc.local

$(cd /home/pi/DigitalSignage/ ; sh startUpDigitalSignage.sh) &

iniciarUpDigitalSignage.sh

#!/bin/bash
echo "Start Digital Signange"
sudo DISPLAY=:0 dotnet DigitalSignage.dll

Intento agregar DISPLAY=:0 antes de iniciar mi aplicación, pero no obtengo ayuda.

Desde la aplicación dotnet estoy usando la llamada de proceso y no sé cómo agregar la configuración de visualización de la llamada.

 process = new Process();
 process.StartInfo.FileName = "feh";
 process.StartInfo.UseShellExecute = false;
 string geometry = screenType == ScreenOutputType.HDMI_1 ? "1920x1080" : "1920x1080+1920";
 string textInfo = string.IsNullOrEmpty(outputText) ? "" : "--font  yudit/48 --info \"echo " + outputText + "\"";
 process.StartInfo.Arguments = " -Y -z "+ textInfo + " --geometry=" + geometry + " -x --zoom fill \"" + path + "\" ";
 process.StartInfo.RedirectStandardInput = true;
 process.StartInfo.RedirectStandardOutput = true;
 process.Start();

Respuesta1

Elimine el $desde el principio de su comando, porque no desea ejecutar elproduccióndel comando:

$(cd /home/pi/DigitalSignage/ ; sh startUpDigitalSignage.sh) &

En su lugar, simplemente llame a su script y haga que configure el entorno correctamente ( DISPLAY, etc. Por ejemplo,

En/etc/rc.local

/home/pi/DigitalSignage/startUpDigitalSignage

en tu guiónstartUpDigitalSignage

#!/bin/sh
# Start the digital signage
#
echo 'Start Digital Signage'

cd /home/pi/DigitalSignage &&
    DISPLAY=:0 dotnet DigitalSignage.dll &

Asegúrese de que sea ejecutable:

chmod a+rx startUpDigitalSignage

Respuesta2

Tuve el mismo problema con mi script feh. Lo resolví agregando export DISPLAY=:0como primer comando en mi script.

Espero que te ayude.

Respuesta3

El problema al ejecutar aplicaciones GUI rc.localo un script de inicio similar es que las cosas que se inician de esa manera no están destinadas a formar parte de ninguna sesión GUI. Por lo tanto, tendrá que configurar DISPLAY y posiblemente ajustar las dependencias para asegurarse de que el script no se ejecute antes de que el servidor GUI se haya iniciado primero.

Puedes evitar todo eso. Hay lugares específicos para las cosas que desea iniciar como parte del inicio de una sesión GUI.

En Debian y distribuciones relacionadas (como RasPi OS), puede agregar un script para /etc/X11/Xsession.dque se ejecute cada vez que se inicia una sesión de GUI. Funciona incluso si no usa un administrador de pantalla X (= un cuadro de diálogo de inicio de sesión GUI) o un inicio de sesión automático GUI, pero úselo startxpara iniciar la GUI usted mismo después de iniciar sesión en modo texto.

Es posible que otras distribuciones hayan hecho esto de manera diferente y tengan un lugar separado para ejecutar cosas en sesiones iniciadas con un cuadro de diálogo de inicio de sesión GUI en lugar de con startx. En ese caso, consulte la página de manual del administrador de visualización X de su distribución (generalmente man gdm, man sddmo man <whatever>dm) o la versión de su distribución startxpara obtener detalles exactos.

Las distribuciones modernas también tienen el /etc/xdg/autostart/directorio: cualquier entorno de escritorio que cumpla conla especificación XDG respectivainiciará cualquier aplicación cuyo *.desktoparchivo esté ubicado en ese directorio. También hay una versión por usuario de este directorio, generalmente en ~/.config/autostart/(dependiendo de cómo esté configurado $XDG_CONFIG_HOME).

Respuesta4

Intente ejecutar fehsin sudoy como usuario local, eso funcionó para mí.

DISPLAY=:0 feh --geometry [3440]x[1440]+[0]+[0] -x png_pictures/

información relacionada