rc.localのFeh自動起動エラー:Xディスプレイを開くことができません。実行中ですか?

rc.localのFeh自動起動エラー: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.localGUIセッションの一部にまったくないことです。したがって、GUIサーバーが最初に起動するまでスクリプトが実行されないようにDISPLAYを設定し、依存関係を調整する必要があります。

これらすべてを避けることができます。 GUIセッションの開始の一部として開始したいコンテンツを置く特定の場所があります。

Debianおよび関連ディストリビューション(RasPi OSなど)では、/etc/X11/Xsession.dGUIセッションが開始されるたびに実行するスクリプトを追加できます。 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/

関連情報