2

ログイン後にターミナルでROOT権限で実行されるプログラムを作成しましたが、再起動後にXOpenDisplay(NULL)呼び出しが行われると失敗します。プログラムはrc.localを介して起動されますが、X11を表示できないようです。

LibUSB呼び出しを行うため、ROOTが必要ですが、ROOTでない場合、これらは失敗します。プログラムがROOT権限で実行されていることはわかりますが、環境変数を調べると、DISPLAYが設定されていないことがわかります。遅延ループを実行していて、ユーザーのログイン後にチェックが行われ、ユーザーは環境変数に設定されたDISPLAYを表示できますが、プログラムは表示できません。プログラムが終了してターミナルで実行される場合、プログラムは完全に機能するため、プログラムが開始されたときにプログラムがX11と対話できず、この状態が続くという問題があります。

ユーザーログインなしでプログラムを起動して実行したい。

誰かが私に何をする必要があるか教えてもらえますか?

デビッド

4

2 に答える 2

1

プログラムは、X11 が起動して実行されてから開始する必要があります。しかし、はるかに優れた設計は、root 権限で実行されるが X を使用しないサービスを作成し、X クライアントが何らかの形でサービスと対話できるようにすることです。X なしでは存在できない場合は、システムの起動ではなく、X11 の起動シーケンスにフックします。

于 2012-05-09T13:55:50.690 に答える
1

tripleee のおかげで解決しました。

Ubuntu は LightDM を使用するようになったため、以下の行を/etc/lightdm/lightdm.conf

greeter-setup-script=usr/bin/'my-script'

「私のスクリプト」は次のとおりです。

#!/bin/sh
/usr/bin/'my-prog' &

すべてが機能します。

于 2012-05-10T12:12:02.373 に答える