我正在尝试从 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 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/