XCreateWindow を使用してウィンドウを作成するプログラムを作成しました。これは私のシステムや他の多くのシステムでは完全に機能しますが、多くのシステムでは奇妙な問題がいくつか発生しています。たとえば、そこから取得した ID が、プログラムを起動した端末の ID と衝突します。そのような場合、gnome-terminal のウィンドウ ID も 0x2400001 (親がルート) であり、プログラムのウィンドウ ID も 0x2400001 (親もルート) です。何がうまくいかないのでしょうか?
3 に答える
ウィンドウ ID はおそらく、X サーバーへの各接続内でのみ一意です (つまり、X サーバーに接続するさまざまなプロセスが同じウィンドウ ID を取得し、X サーバーは接続とウィンドウ ID を使用してそれらを内部的に分離します)。
X はウィンドウ ID について約束をしないと思います。たとえば、ウィンドウ ID はプロセス間で一意であるなど、他の目的で使用しない方がよいでしょう。
各接続に対して同じ値 (例: 1) で始まるウィンドウ ID として連続した数値を返すだけの X 実装を見ても驚かないでしょう。これはあなたの経験を説明するでしょう。たとえば、すべてのクライアントの最初のウィンドウは同じウィンドウ ID を持っているようです。その X 実装で。
他の回答に加えて、実行しますxwininfo -root -all
(詳細については、そのマニュアルページを読んでください)。gnome-terminal ウィンドウ ID とアプリのウィンドウ ID を確認します。
Xserver は、すべてのウィンドウに対して一意の不透明 ID を作成します。ウィンドウ ID の識別に使用している方法が間違っている可能性があります。
あなたの質問は、別の問題の兆候です。あなたが本当に解決しようとしている問題は何ですか?