rc.local에서 자동 시작 시 Feh 오류: X 디스플레이를 열 수 없습니다. *실행 중*입니다. 그렇죠?

rc.local에서 자동 시작 시 Feh 오류: X 디스플레이를 열 수 없습니다. *실행 중*입니다. 그렇죠?

rc.local 파일에서 내 dotnet 앱을 실행하려고 합니다. 내가 비디오 재생(작업)을 시작하거나 feh 플레이어로 이미지 슬라이드 쇼를 표시하는 곳입니다. bash에서 스크립트를 수동으로 실행하면 제대로 작동합니다.

feh player를 실행하려고 하면 다음과 같은 결과가 나타납니다.

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

rc.local에서

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

startUpDigitalSignage.sh

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

내 앱을 시작하기 전에 DISPLAY=:0을 추가하려고 시도했지만 도움이 되지 않습니다.

dotnet 앱에서 프로세스 호출을 사용하고 있는데 디스플레이 설정 호출에 추가하는 방법을 모르겠습니다.

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

답변1

$명령을 실행하지 않으려면 명령 시작 부분에서 제거하십시오 .산출명령에서 :

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

대신 스크립트를 호출하여 환경을 올바르게 설정하도록 하십시오( DISPLAY등). 예를 들어,

~ 안에/etc/rc.local

/home/pi/DigitalSignage/startUpDigitalSignage

스크립트에서startUpDigitalSignage

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

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

실행 가능한지 확인하십시오.

chmod a+rx startUpDigitalSignage

답변2

내 feh 스크립트에서도 동일한 문제가 발생했습니다. export DISPLAY=:0내 스크립트의 첫 번째 명령으로 추가하여 문제를 해결했습니다 .

나는 그것이 당신에게 도움이되기를 바랍니다.

답변3

rc.localGUI 응용프로그램 이나 유사한 시작 스크립트를 실행할 때의 문제점은 그런 방식으로 시작된 작업이 전혀 GUI 세션의 일부가 될 의도가 없다는 것입니다. 따라서 GUI 서버가 먼저 시작되기 전에 스크립트가 실행되지 않도록 DISPLAY를 설정하고 종속성을 조정해야 합니다.

그 모든 것을 피할 수 있습니다. GUI 세션 시작의 일부로 시작하려는 작업을 위한 특정 위치가 있습니다.

Debian 및 관련 배포판(예: RasPi OS)에서는 /etc/X11/Xsession.dGUI 세션이 시작될 때마다 실행되도록 스크립트를 추가할 수 있습니다. X 디스플레이 관리자(= GUI 로그인 대화 상자) 또는 GUI 자동 로그인을 사용하지 않더라도 작동하지만 startx텍스트 모드 로그인 후 GUI를 직접 시작하는 데 사용합니다.

다른 배포판에서는 이 작업을 다르게 수행했을 수 있으며 GUI 로그인 대화 상자와 startx. 이 경우 정확한 세부 정보는 배포판의 X 디스플레이 관리자(일반적으로 또는 )의 매뉴얼 페이지 man gdmman sddm배포판 man <whatever>dm버전을 참조하십시오.startx

최신 배포판에는 다음 /etc/xdg/autostart/디렉터리도 있습니다.해당 XDG 사양*.desktop해당 디렉토리에 파일이 있는 모든 응용 프로그램을 시작합니다 . 일반적으로 ~/.config/autostart/$XDG_CONFIG_HOME 설정 방법에 따라 이 디렉토리의 사용자별 버전도 있습니다 .

답변4

나에게 도움이 된 로컬 사용자 feh없이 실행해 보십시오 .sudo

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

관련 정보