MATEウィンドウマネージャはウィンドウIDをどのように提供しますか?

MATEウィンドウマネージャはウィンドウIDをどのように提供しますか?

wmctrlに関連するスクリプトを作成している間(LMDE 2のMATEは、LMDE 2にはないCompizに関連する他のWM構成ほど多くの高度な機能を提供しないため)、同じタイトルを持つウィンドウ内にウィンドウを作成します。
この問題は、次の理由で発生します。ここで述べたように、PIDを使用してウィンドウを識別することはできません。
したがって、ウィンドウIDが昇順で提供されるという仮定(編集:もちろん上限を含む)が本当かどうか疑問に思います。

では、簡潔に説明してください。 (ご存知の方なら簡単にお答えいただけると思います。)

wmctrl -l密接に関連する:同じタイトルを持つウィンドウが実際に昇順(16進数)の数値順に並べられているかどうかを知りたいです。そうですが、これについて正式に文書化されたステートメントを見つけることができませんでした。

ベストアンサー1

ウィンドウIDはXサーバーによって提供されます。ウィンドウマネージャは言うまでもありません。

ウィンドウIDは、ウィンドウが属するクライアントを上位12ビットにエンコードします。下位 12 ビットが最初に順次割り当てられますが、中数字が空の場合は再利用できます。したがって、ウィンドウIDを比較すると、最後に作成されたウィンドウは確実に表示されません。

プロセスIDでウィンドウを識別できますが、PIDが時間の経過とともに常に増加するわけではないため、最新のウィンドウを見つけるのに役立ちません。 PIDを順次割り当てるUnixバリアント(普遍的ではない)でも最大値に達するとラップされます(デフォルトはLinuxでは32767ほど低い)。さらに、X11 クライアントはサーバーとは異なるシステムで実行できますが、プロセス ID は 1 つのシステムでのみ意味があります。

Freedesktop互換アプリケーション(Mate Terminalを含む)の設定_NET_WM_USER_TIME財産ユーザーアクティビティ(Mate端末の場合は入力を意味)があるたびにウィンドウが表示されます。この属性を照会できますxprop -id … _NET_WM_USER_TIME。これは、ウィンドウが作成された時間ではなく、最後にアクティブになった時間を示します。

ウィンドウを確実に識別するには、タイトルを設定する1つの方法です。もう1つの可能性は、一意の値で環境変数を設定し、その一意の値でプロセスを使用するかターゲットpsにすることです。/procあなたはできますX11ウィンドウを開いたクライアントのプロセスIDを探すそれを通して_NET_WM_PID財産、存在する場合、xpropまたはを使用して照会できますxdotool getwindowpid。このプロパティを持つWindowsでは、このプロパティをクライアントプロセスを実行しているコンピュータのホスト名に_NET_WM_PIDも設定する必要があります。WM_CLIENT_MACHINEこれは役に立ちます各ウィンドウで別々のプロセスを使用する

おすすめ記事