質問: Raspberry pi上で動作するアプリケーションの開発を行っています。 udevのrules.dにUSB挿入時にアプリケーションを起動するように設定し、起動したアプリケーションからGUIを表示しようとしています。 イメージはUSB挿入時に表示される動作選択ダイアログのようなものです。 現状udevからアプリケーションは起動されるのですが、起動された直後に終了してしまいます。 udevから起動されるアプリケーションをターミナルやファイルマネージャーから起動した場合には期待したGUIが表示されます。 udevから起動した場合にはX-windowと接続されていないため初期化で失敗しているのだと思うのですが、udev起動でX-Windowの機能を使うにはどのようにすればよいのでしょうか? GUIアプリケーションはQtフレームワークを使用しています。
回答: 起動中の X Window System のディスプレイ番号と、xauth や xhost での接続許可が必要と思います。 ディスプレイ番号は、端末(ターミナルエミュレーター)で `echo $DISPLAY` を実行すると、:0 とか :1 とかが表示されると思います。 それを、環境変数 DISPLAY にセットしてプログラムを実行するようにします。 xauth で許可する手順は下記 URL を参考ください。 検証のためであれば、一時的に端末(ターミナルエミュレーター) で `xhost +` を実行し、全許可してもいいと思います。 (参考) SSHで接続してGUIプログラムを実行すると手元で起動してしまう