IDs de janela são fornecidos pelo servidor X. O gerenciador de janelas não diz nada.
IDs de janela codificam o cliente ao qual a janela pertence nos 12 bits superiores. Os 12 bits inferiores são atribuídos sequencialmente no início, mas se um número intermediário ficar livre, ele pode ser reutilizado. Portanto, comparar IDs de janela não fornece uma indicação confiável de qual janela foi criada por último.
Observe que, mesmo se você pudesse identificar a janela por um ID de processo, isso não ajudaria a descobrir qual é a mais recente, já que os PIDs nem sempre aumentam com o tempo. Mesmo em variantes Unix que atribuem PIDs sequencialmente (o que não é universal), elas são quebradas quando atingem o valor máximo (que é tão baixo quanto 32767 por padrão no Linux). Além disso, os clientes X11 podem ser executados em máquinas diferentes do servidor, mas os IDs de processo são significativos apenas em uma máquina.
Aplicativos compatíveis com Freedesktop, incluindo o Mate Terminal, defina a _NET_WM_USER_TIME
property de uma janela sempre que houver atividade do usuário (para o Terminal Mate, isso significa entrada). Você pode consultar a propriedade com xprop -id … _NET_WM_USER_TIME
. Isso indica quando uma janela estava ativa pela última vez, não quando foi criada.
Se você quiser identificar com segurança uma janela, uma possibilidade é definir seu título. Outra possibilidade é definir uma variável de ambiente com um valor exclusivo e usar ps
ou /proc
para localizar o processo com esse valor exclusivo. Você pode localizar o ID do processo do cliente que abriu uma janela do X11 através de sua _NET_WM_PID
property , se presente, que você pode consultar com xprop
ou com xdotool getwindowpid
. As janelas que possuem a propriedade _NET_WM_PID
também devem ter a propriedade WM_CLIENT_MACHINE
definida como o nome do host da máquina em que o processo do cliente está sendo executado. Isso ajudará para que use processos separados para cada janela .