我正在嘗試從 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/