Feh 从 rc.local 自动启动错误:无法打开 X 显示。它正在运行,是吗?

Feh 从 rc.local 自动启动错误:无法打开 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 会话的一部分。因此,您必须设置 DISPLAY 并可能调整依赖项,以确保在 GUI 服务器首先启动之前不会执行脚本。

你可以避免这一切。作为 GUI 会话启动的一部分,有一些特定的位置可以放置您希望启动的内容。

在 Debian 和相关发行版(例如 RasPi OS)上,您可以添加一个脚本以/etc/X11/Xsession.d使其在每次 GUI 会话启动时执行。即使您不使用 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/

相关内容