1

私は D プログラミング言語の gtkD バインディングを使用していくつかの GTK プログラムを作成しました。これはコンソール アプリですが、画面にプロットを表示してファイルに保存することができます。コンソールベースの SSH アクセスしかできないマシンでこれらを実行したいと思います。つまり、プロットは画面に表示されず、ファイルに書き込まれます。

Main.init() を呼び出すと、Gtk-WARNING **: cannot open display, as expected. が表示されます。代わりに Main.initCheck() を呼び出してエラーを無視すると、後で画面が表示されないことに関連するエラーがさらに発生します。

利用可能な画面がないという事実をプログラムに無視させ、画面上のすべての描画をダミーデバイス (/dev/null に相当するグラフィックス) に実行させ、それでも実際に Pixmaps と Pixbufs に描画させる簡単な方法はありますか?プロットをファイルに保存する)、アプリの非 GUI ベースの部分を実行しますか?

編集: アプリがウィンドウを起動し、イベント ループでブロックする場合、理想的な方法は、ウィンドウをすぐに閉じて (または最初に開くことができなかった場合)、非 GUI ベースの部分を実行し続けることです。プログラムの。これが不可能な場合は、ウィンドウを起動しないようにすることで回避できます。

また、Pixbufs と Pixmaps は画面がないと機能しないようです。Main.checkInit() を呼び出してエラーを無視するか、init ステートメントを使用せずに、いずれかの方法で GTK が画面の欠如について不平を言う。

4

2 に答える 2

1

最も簡単な解決策はGdkPixbuf、プロットの処理に s のみを使用することだと思います。私の知る限り、このgdk-pixbufライブラリはメモリ内の pixbuf のみを処理し、ウィンドウ システムは必要ありません。コードの処理部分と表示部分を厳密に分離してください。そうすれば、画面がなくても問題ないはずです。画面への描画を無効にするコマンド ライン オプションを作成することもできます。

使用することもできますGtkOffscreenWindowが、これは GTK 2.20 以降でのみ利用可能であり、私が知る限り、D バインディングは 2.18 までしかカバーしていません。

または、SSH セッションで X 転送を使用することもできます。SSH コマンド ラインで-Xまたはを使用します。-Y詳細については、SSH のマニュアルを参照してください。SSH 接続しているマシンで X サーバーを実行している場合、ローカル マシンの画面にプロットを表示できます。

于 2010-07-19T13:33:38.017 に答える
0

ピックスマップはサーバーなしでは機能しません。定義上 (X 用語で)、X サーバーに格納された画像リソースです。ただし、Pixbufs はクライアント アプリケーションに保存されるため、X がなくても動作するはずです。

Pixmaps は必要だがグラフィックスは必要ない場合は、次の 2 つの選択肢があります。

  1. -Xフラグを渡して SSH X トンネリングを有効にします。この場合、アプリはローカル X サーバーを使用できます。
  2. Xvfb を使用します。出力をまったく行わないダミーの X サーバーであり、すべてのグラフィックがメモリに格納されます。
于 2010-07-20T13:10:35.860 に答える