Feh при автоматическом запуске из rc.local ОШИБКА: Невозможно открыть X display. Он *работает*, да?

Feh при автоматическом запуске из rc.local ОШИБКА: Невозможно открыть X display. Он *работает*, да?

Я пытаюсь запустить свое приложение dotnet из файла rc.local. Где я начинаю воспроизводить видео (работает) или показывать слайд-шоу изображений с помощью feh player. Если я запускаю свой скрипт вручную из 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 и не знаю, как добавить в настройки отображения вызовов.

 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. Поэтому вам придется установить DISPLAY и, возможно, настроить зависимости, чтобы убедиться, что сценарий не будет выполнен до того, как сервер GUI запустится первым.

Вы можете избежать всего этого. Есть определенные места для вещей, которые вы хотите запустить как часть запуска сеанса GUI.

В Debian и связанных дистрибутивах (например, RasPi OS) вы можете добавить скрипт, чтобы /etc/X11/Xsession.dон выполнялся каждый раз при запуске сеанса GUI. Он работает, даже если вы не используете X display manager (= диалог входа GUI) или автовход GUI, а используете startxдля запуска GUI самостоятельно после входа в текстовом режиме.

Другие дистрибутивы могли бы сделать это по-другому и иметь отдельное место для вещей, которые нужно выполнить в сеансах, запущенных с помощью диалогового окна входа в GUI, а не с помощью startx. В этом случае см. страницу руководства X display manager вашего дистрибутива (обычно 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/

Связанный контент