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/

相關內容