2017-06-23 11 views
5

私はapache/ubuntuサーバー上でphpスクリプトを使用して、引数として(IDAPro)Pythonスクリプトを実行するアプリケーションをトリガーするbashスクリプトを呼び出します。PHP/Ubuntuパーミッションエラー - QxcbConnection:表示に接続できませんでした。

PHPコード今

chdir('/var/www/dashboard/team/static/sql'); 
$output = exec('sudo -u rohan ./start.sh'); 

、私は端末からPHPファイルを実行すると、上記のコードは正常に動作します - しかし、私は、rootユーザーとして、それを実行している場合だけです。言うまでもなく、bashファイルを直接実行すると、それも実行されます。

しかし、私は、ブラウザ上のPHPファイルを実行すると、それは動作しませんし、私はapacheのエラーログに次のエラーを取得する:

QXcbConnection: Could not connect to display 
Aborted 

Iは、Apache/PHPが「WWW-として実行されていることを理解しますデータ 'ユーザー(確認のために' whoami 'を使用しました)、それが私のエグゼクティブにsudoを持っている理由です。私は微調整し、両方のユーザのためのパーミッションを無駄にしました。 'www-data'ユーザとして端末からphpファイルを実行すると、エラーはスローされますが、デバッグするスクリプトの開始時と終了時にランダムなエコータグを表示する以外は何もしません。

私はLinuxの初心者ですので、どんな助けでも大歓迎です。

答えて

4

私は最終的にそれを解決することができました。

問題は権限ではなく、環境変数にあります。

私はbashスクリプトでターミナルに変数を設定し、スクリプトを実行すると動作しないことを

export DISPLAY=':0.0' 

注意を次の行を含める必要がありました。行はスクリプト内にある必要があります。

これは、root以外のユーザーとしてスクリプトを実行した場合、DISPLAY変数が設定されていないためです。これは、スクリプトが 'www-data'ユーザーとして実行されるApache/PHPの場合。

2

おそらくあなたは、あなたのスクリプトの先頭に次のようなものを使用することができます `XAUTHORITY`ため

if [ "$(id -un)" != "rohan" ]; then 
    exec sudo -u rohan $0 "[email protected]" 
fi 

export XAUTHORITY=/home/rohan/.Xauthority 
export DISPLAY=:0 
+0

感謝を! – kyb

関連する問題