2012-05-09 18 views
2

ログイン後に端末のROOT権限で実行するプログラムを作成しましたが、リブート後にXOpenDisplay(NULL)を呼び出すと失敗します。プログラムはrc.local経由で起動しますが、X11を見ることはできません。UBUNTU:rc.local経由でプログラムを起動すると、XOpenDisplay(NULL)が失敗する

私はLibUSB呼び出しを行うため、ROOTが必要です。これらはROOTではなく失敗します。プログラムがROOT権限で実行されているのがわかりますが、環境変数の検査でDISPLAYが設定されていないことがわかります。私は遅延ループを実行しており、ユーザーのログイン後にチェックが行われ、ユーザーはDISPLAYが環境変数に設定されているのを見ることができますが、プログラムはできません。プログラムが終了してターミナルで実行されると、それは完全に動作するので、プログラムが起動され、この状態が持続するときにプログラムがX11とやり取りできないという問題があります。

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

誰でも私に何をする必要があるのか​​教えていただけますか?

デビット

答えて

1

トリプルプレイのおかげで解決されました。

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

すべてが動作します: '私のスクリプト' はどこ

Ubuntuは今LightDMを使用していますので、/etc/lightdm/lightdm.confに以下の行を追加して

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

+0

修正のおめでとうございます!あなたができるときは、他の人があなたの解決策から学ぶことができるように、あなたの答えに「受け入れられた」とマークするようにしてください。乾杯〜 –

0

あなたのプログラムは、X11が起動して一度起動する必要があります。しかし、はるかに優れた設計は、root特権で動作するサービスを作ることですが、Xを使用せず、Xクライアントが何とかそれを話すように手配します。 Xなしでは存在できない場合は、システムの起動ではなく、X11の起動シーケンスに接続します。

+0

では、X11が動作しているかどうかをどのように確認できますか? rc.localが実行されているときに、X11が起動したときのrc5の後に発生するので、X11を実行してはいけません。 – David

+0

私の答えが更新されました。 USBのものはX11に全く依存しないほうがいいです。 – tripleee

+0

だから、ログインが完了する前にすべてを起動して実行したいと思ったら、Xクライアントをいつ実行するのですか?私はクライアントが同じ問題にぶつかると思います。 – David

関連する問題