回答:
Xディスプレイでウィンドウを開くには、アプリケーションに2つのものが必要です。Xディスプレイの場所を知る必要があります。それはDISPLAY
環境変数によって伝えられます。また、Xサーバーでの認証も必要です。これはCookieを介して伝達されます。Cookieは、Xサーバーの起動時に生成され、Xサーバーを起動したユーザーのみがアクセスできるファイルに格納されている秘密の値です。デフォルトのCookieファイルは~/.Xauthority
です。
XサーバーがデフォルトのCookieファイルの場所を使用している場合、追加Environment=XAUTHORITY=/home/dogs/.Xauthority
は機能します(/home/dogs
Xでログインしているユーザーのホームディレクトリが想定されます)。場所を見つける必要がある場合は、「別のユーザーのデスクトップでrootとしてグラフィカルプログラムを起動できますか?」を参照してください。リモートXディスプレイでウィンドウを開きます(「ディスプレイを開けない」理由)。
または、Xサーバーを実行しているユーザーとしてプログラムを実行しても、Cookieファイルがデフォルトの場所にある場合は機能します(そうでない場合は、ルートケースのようにCookieファイルを見つける必要があります)。User
ディレクティブを追加します(例:)User=dogs
。
もちろん、指定したユーザーが所有するその番号のXディスプレイがない場合、サービスは実行されません。
SystemdからGUIプログラムを開始するのはかなり奇妙です。これのために設計されていません。GUIプログラムは、ユーザーが開始したXセッションに存在します。Systemdはシステムプロセス用です。代わりにデーモンを試す必要があります。
systemctl --user
。また、DISPLAY
変数は問題ではありません。見ていこちらを。