0

xlib http://tronche.com/gui/x/xlib/でプログラミングするためのこのチュートリアルに従おうとしています

これは私がこれまでに書いたコードです

  display = XOpenDisplay(NULL);
  screen  = XDefaultScreen(display);
  width   = 640;
  height  = 480;

  XLockDisplay(display);
  fullscreen = 0;
  window[0] = XCreateSimpleWindow(display, XDefaultRootWindow(display),
                                  0, 0, width, height, 0, 0, 0);
  window[1] = XCreateSimpleWindow(display, XDefaultRootWindow(display),
                                  0, 0, width, height, 0, 0, 0);

しかし、私はこれを理解していません: xinerama を使用しない 2 つの X11 サーバー (2 つの gpu) を備えたシステムで、window[0] を最初の xserver と 2 番目の xserver に移動させたい場合、どの関数を呼び出す必要がありますか? 私はディスプレイ、スクリーン、ウィンドウについて混乱していると思います....

助けてくれてありがとう

4

3 に答える 3

3

ネストは次のとおりです。

  • Xサーバー(ディスプレイとも呼ばれます)は、X11プロトコルで通信するものです。XID(ウィンドウID、GC ID、ピックスマップIDなど)は、ディスプレイ内で一意になります。従来、ディスプレイには1つのキーボードと1つのマウスがありますが、最近ではより複雑になっています。

  • X画面はルートウィンドウと1対1で対応します。ルートウィンドウは、親(ウィンドウツリーのルート)のないウィンドウです。すべての非ルートウィンドウは、ルートウィンドウの子(または子の子など)です。

  • ウィンドウは、画面内の長方形の領域です。ウィンドウは階層ツリーに配置され、親ウィンドウが子をクリップします(子ウィンドウは完全にまたは部分的に親の範囲外に配置できますが、親の内側の部分のみが表示されます)。(「長方形」はわずかな嘘です。実際にシェイプマスクを適用することはできますが、今は忘れてください。)

  • 物理モニターは、画面に対応する場合と対応しない場合があります。TwinViewとXineramaは、1つの画面を2つ以上のモニターに拡張する機能の名前です。各モニターは、独自の画面にすることも、マルチモニター画面の一部にすることもできます。

従来、画面は異なるハードウェアプロパティ(異なるビット深度など)を持つ可能性があるため、ウィンドウを別の画面に移動することはできません。TwinViewまたはXineramaを使用すると、モニター間でウィンドウを移動できますが、モニターごとの画面では移動できません。ただし、ディスプレイ上のすべての画面は同じ入力デバイス(マウスとキーボード)を共有します。

于 2011-02-15T18:40:54.690 に答える
2

それらが実際に 2 つの異なる X サーバーである場合 (Havoc の説明を参照してください)、次のようにする必要があります。

Display displays[2];

displays[0] = XOpenDisplay(":0.0");
displays[1] = XOpenDisplay(":1.0");

[...]

window[0] = XCreateSimpleWindow(displays[0], XDefaultRootWindow(displays[0]),
                                0, 0, width, height, 0, 0, 0);
window[1] = XCreateSimpleWindow(displays[1], XDefaultRootWindow(displays[1]),
                                0, 0, width, height, 0, 0, 0);

それらが同じ X サーバー上の異なる X スクリーンである場合、ディスプレイは代わりに:0.0andになり:0.1ます。(これはすべて、これらの X サーバーのみの最も単純なケースを想定しており、他の VT に X サーバーを追加したり、Xvfb、Xnest、Xephyr などの仮想 X サーバーを追加したりすることはありません。)

もちろん、本格的な GUI プログラミングは、生の Xlib 呼び出しではなく、GTK+ や Qt などのツールキットを使用して行われます。

于 2011-02-15T19:24:25.970 に答える
1

与えられた回答の上で、DMX(分散マルチヘッド)を見てください。これにより、複数のXサーバー/画面を1つの大きな画面に結合でき、コマンドをスレーブサーバーにディスパッチする別のXサーバーによって提供されます。

http://dmx.sourceforge.net/

于 2011-02-16T16:44:07.197 に答える