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

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

rc.local 파일에서 dotnet 애플리케이션을 실행하려고 합니다. 직장에서 비디오 재생을 시작하거나 feh 플레이어를 사용하여 이미지 슬라이드쇼를 표시하는 곳입니다. bash에서 스크립트를 수동으로 실행하면 제대로 작동합니다.

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

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

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

이 모든 것을 피할 수 있습니다. GUI 세션 시작의 일부로 시작하려는 콘텐츠를 넣을 특정 장소가 있습니다.

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

다른 배포판에서는 이 작업을 다르게 수행할 수 있으며 GUI 로그인 대화 상자를 사용하여 시작된 세션에 대해 별도의 위치를 ​​가질 수 있습니다( 를 사용하는 것과 비교) startx. 이 경우 정확한 내용은 배포판의 X 디스플레이 관리자(일반적으로 man gdm, man 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/

관련 정보