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
これは役に立ちます各ウィンドウで別々のプロセスを使用する。
答え2
私はPIDに似ており、昇順に割り当てられますが、次のようにはなりません。
PIDのラップアラウンド。
(今は)上昇だけすると仮定しましょう。長い間実行されているシステムはどうなりますか? IDが大きすぎるか、IDサイズを32ビット、64ビット、128ビットに増やす必要があります。
上がる必要がある場合、多くのシステムリソースがアイドル状態の間に使い果たされる可能性があります(再利用できないため、最終的にシステムはIDがなくなったため終了します)。