PHP経由でtightvncビューアを起動する
-
21-12-2019 - |
質問
PHP を使用して Raspberry Pi で vncviewer を起動しようとしています。RPi がクライアントで、VNC サーバーは MS Windows を実行しています。
PHP では、このスクリプトを使用して vncviewer を起動しています
$cmd="echo password | vncviewer -autopass " .$ip;
shell_exec($cmd);
RPi からシェル スクリプトを実行する場合にのみ機能しますが、PHP から試行すると次のエラーが発生します。
Error: Can't open display:
このエラーに対する回避策はありますか?
解決
X11 を使用している場合は、おそらく DISPLAY
変数。
X11 サーバー (ディスプレイ) 上でウィンドウを開く必要がある X11 クライアント (プログラム) は、この変数を使用して、クライアントがサーバーを検索する場所を決定します。ここではクライアント/サーバー モデルが使用されています。 サーバ ウィンドウ表示機能を提供します クライアント.
X には、ネットワーク上のリモート サーバーにウィンドウを表示する機能が含まれていますが、99.9% の場合、プログラムを実行しているマシンのメイン ディスプレイに表示することになるため、通常は DISPLAY=localhost:0.0
.
問題は、次の場合です。 DISPLAY
は ない 設定すると、同じマシン上で X サーバーが実行されている場合でも、プログラムはウィンドウをどこで開いたらよいかわかりません。そして、プログラムが実行されるとき、 cron
または、システム起動スクリプト、または実際には X 自体によって起動されなかったもの (Web サーバーによって実行される PHP スクリプトを含む) には通常、 DISPLAY
何かに設定します。
それで ..コメントで指摘したように、設定 DISPLAY=:0
vncviewer にウィンドウの送信先を指示します。これは次の短縮形です DISPLAY=localhost:0.0
. 。ホスト名が除外されている場合、ホスト名は localhost とみなされます。そしてその .0
最後の はスクリーン番号を指します。これもデフォルトでは 0 です。をチェックしてください 詳細については、X ドキュメントを参照してください.
また、コメントでも指摘されているように、X が実行されている環境 (つまり、 DISPLAY
はすでに設定されています)、実行する必要がある場合があります xhost +
X によって起動されていないプログラムがウィンドウを開くことを許可します。
PHP で環境変数を設定するには、次のようなものを使用します。
putenv("DISPLAY=:0");
VNC を起動するコードの前。