udevルールでGUIアプリケーションを実行する

udevルールでGUIアプリケーションを実行する

特定のUSBデバイスが接続されているときにGUIアプリケーションを実行しようとしています。 udevルールが実行されましたが、アプリは私の画面に表示されます。別のTTYでスクリプトを実行すると、アプリケーションは私のグラフィカル環境で開きます。また、ルールの日付をファイルに追加して、ルールが実行されたことを確認することもできます。

/etc/udev/rules.d/99-betaflight.rules:

SUBSYSTEMS=="usb", ATTR{serial}=="314839673237", RUN+="/usr/bin/su daniel -c '/home/daniel/bin/betaflight-configurator'"

/home/daniel/bin/betaflight-configurator:

#!/bin/bash

export DISPLAY=:1
/opt/betaflight/betaflight-configurator/betaflight-configurator

私の理解は、GUIアプリケーションがXサーバーのコンテキストで起動しないため、起動するのが難しいということです。しかし、他のttyでコードを実行すると、アプリケーションは完全に開きます。

USBデバイスが接続されているときにアプリを実行するには、どのような改善が必要ですか?

答え1

&udevルールで長期実行プログラムを起動しないでください。 udevdは、スクリプトを介してバックグラウンドで実行しようとすると、短時間でそのプログラムを終了します。それはまた彼らの道に別の障害物を置くでしょう。

atd廃止されたアプローチはデーモンをインストールしますecho some_command | at now。オンラインでこれの多くの例を見つけることができます。

実際にすべきことは、どのようなシステムがあるかによって異なります。 「現代的な」システムでは、systemdの使い方を学ぶ以外に選択肢はありません(戦率)。

関連情報