it-swarm-ja.com

X出力のリダイレクト

Webサービスのいくつかの要素をチェックする小さなプログラムがあります。プログラムはグラフィック出力を表示し、コマンドラインの結果も表示します。

私はこのプログラムを自動化して、オフィスのサーバーで定期的に実行しようとしています。問題は、Xを有効にしている場合にのみ機能することです。サーバー上で直接、またはSSH -Xを介して機能します。

グーグルに続いて、私はXvfbを試しましたが、それは私にかなり不可解なエラーメッセージを与えました:

Xvfb :1 -screen 0 1600x1200x32

Fatal server error:
Server is already active for display 1
        If this server is no longer running, remove /tmp/.X1-lock
        and start again.

それを実行する方法はありますか?私は実際に&>/dev/null ..に相当するXを探しています。

3
Adam Matan

VNCディスプレイを作成できます。 VNCは、リモートデスクトップを実行することを目的としています。サーバー側で、メモリ内にレンダリングする仮想Xディスプレイを作成し(ビデオカードも必要ありません)、VNCクライアントを使用してリモートで接続できます。

Ubuntuパッケージは、ユニバースではvnc4serverという名前です。次のコマンドを使用して、ディスプレイを起動できます。

vnc4server :10

初めて実行するとパスワードの入力を求められますが、リモートでディスプレイに接続する必要がないため、何でも入力できます。これにより、この新しいXディスプレイへの接続に使用できるポート(この例では5910)がマシンに開かれることに注意してください。ファイアウォールを使用することをお勧めします。

次に、環境内でDISPLAY=:10.0を指定してcronスクリプトを実行すると、VNCディスプレイが使用されます。

1
Alex Morega

Ubuntuでは、echo $DISPLAYおそらく:0.0、Ubuntuセッションがディスプレイ0を使用していることを通知します。これにより、他の番号を使用できるようになります。そう、 :1は、前のテストから実行されているXvfbがまだない限り、問題ないはずでしたか? (または、エラー状態のように:一時ファイルがない限り/tmp/.X1-lockは以前のテストの後で削除されませんでした。)しかし:whatがディスプレイ1を使用していることがわからない場合は、他のより高い数値でも同様に行う必要があります。

新しいUbuntu9.10での簡単なテスト:

#必要に応じて1回インストール:
 Sudo apt-get install xvfb 
 Sudo apt-get install imagemagick 
 
#バックグラウンドでXvfbを実行、ディスプレイ1 
 Xvfb:1&
 
#バックグラウンドでxclockを実行し、ディスプレイ1 
 DISPLAY =:1 xclock&
 
#Xclock 
 DISPLAY =:1 import -window Xclock current-time.png 
 
#名前でウィンドウのスクリーンキャプチャを作成します。#xclock [.____を停止します。 ] kill `pidof xclock` 
 
#Xvfbを停止
 kill` pidof Xvfb`

これにより、ファイルが作成されますcurrent-time.png現在の時刻を表示します。これはあなたのために働きますか?

3
Arjan

私も同様の問題を抱えていました。AlexMoregaの答えは問題ありませんが、私はこれが好きでした。

Xvfbをインストールした後、それを1行で解決できます: "xvfb-run <command>"、ここで<command>はプログラムです。

出典

3
Jonny Best

サーバーがランレベル5(X11アクティブ)で実行されているようです。あなたが望むかもしれないのはそれなしのランレベルなので、Xvfbを実行するために3を試してください? (Ubuntuを実行していないと仮定すると、これは醜くなる可能性があります)

0
brandstaetter