Feh na inicialização automática de rc.local ERRO: Não é possível abrir o display X. Ele *está* funcionando, certo?

Feh na inicialização automática de rc.local ERRO: Não é possível abrir o display X. Ele *está* funcionando, certo?

Estou tentando executar meu aplicativo dotnet no arquivo rc.local. Onde eu começo a reproduzir vídeo (trabalhando) ou mostro uma apresentação de slides de imagens com o feh player. Se eu executar meu script manualmente no bash, ele funcionará como deveria.

Quando tento executar o feh player, recebo:

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

De rc.local

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

startUpDigitalSignage.sh

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

Tento adicionar DISPLAY=:0 antes de iniciar meu aplicativo, mas não há ajuda.

No aplicativo dotnet, estou usando a chamada de processo e não sei como adicionar às configurações de exibição da chamada.

 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();

Responder1

Remova o $do início do seu comando, porque você não deseja executar osaídado comando:

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

Em vez disso, basta chamar seu script e configurar o ambiente corretamente ( DISPLAY, etc. Por exemplo,

Em/etc/rc.local

/home/pi/DigitalSignage/startUpDigitalSignage

No seu roteirostartUpDigitalSignage

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

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

Certifique-se de que seja executável:

chmod a+rx startUpDigitalSignage

Responder2

Eu tive o mesmo problema com meu script feh. Eu resolvi isso adicionando export DISPLAY=:0como primeiro comando no meu script.

Espero que ajude você.

Responder3

O problema na execução de aplicativos GUI rc.localou de um script de inicialização semelhante é que as coisas iniciadas dessa maneira não têm a intenção de se tornarem parte de nenhuma sessão da GUI. Portanto, você terá que definir DISPLAY e possivelmente ajustar as dependências para garantir que o script não seja executado antes que o servidor GUI seja iniciado primeiro.

Você pode evitar tudo isso. Existem locais específicos para coisas que você deseja iniciar como parte da inicialização de uma sessão GUI.

No Debian e distribuições relacionadas (como RasPi OS), você pode adicionar um script para /etc/X11/Xsession.dexecutá-lo sempre que uma sessão GUI for iniciada. Funciona mesmo se você não usar um gerenciador de exibição X (= uma caixa de diálogo de login da GUI) ou um login automático da GUI, mas use startxpara iniciar a GUI você mesmo após um login em modo de texto.

Outras distribuições podem ter feito isso de maneira diferente e ter um local separado para execução de coisas em sessões iniciadas com uma caixa de diálogo de login da GUI em vez de com startx. Nesse caso, consulte a página man do gerenciador de exibição X da sua distribuição (geralmente man gdm, man sddmou man <whatever>dm) ou a versão da sua distribuição startxpara obter os detalhes exatos.

As distribuições modernas também possuem o /etc/xdg/autostart/diretório: qualquer ambiente de desktop que esteja em conformidade coma respectiva especificação XDGiniciará qualquer aplicativo cujo *.desktoparquivo esteja colocado nesse diretório. Há também uma versão deste diretório por usuário, geralmente em ~/.config/autostart/(dependendo de como $XDG_CONFIG_HOME está definido).

Responder4

Tente executar fehsem sudoe como usuário local, funcionou para mim.

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

informação relacionada