特定の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の使い方を学ぶ以外に選択肢はありません(戦率)。