Preciso de uma solução para obter as informações atuais da janela ativa (focada) em uma área de trabalho do Gnome 2. Estou interessado principalmente no processo que executa essa janela e o título da janela.
É possível?
SOLUÇÃO:
Obtendo o título da janela:
xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1
Obtendo o nome do processo:
ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'
ou:
cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Mais simples (IMO) do que a solução do OP (ou seja
ps
, semgrep
eawk
), para obter o nome do processo:Ou se você deseja um fim de linha:
fonte
cat /proc/
é bom (e sem dúvida mais rápido, pois não envolve saudar toda aps
saída). Eu o adicionei à solução no corpo da pergunta, para que futuros usuários possam encontrá-lo.Tente o comando xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , ele definitivamente retorna o título da janela e, no que diz respeito ao processo, bem ...
X atribuiu um ID a ele e se tornou o PID pai da janela e também o ocultou por padrão, assumindo que o Gnome tem suporte a NET_WM_PID, como esse patch de 2001 indica, http://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.html , podemos revisar este post, http://www.mail-archive.com/[email protected]/msg05809.html , onde o autor escreve um programa C curto para converter Window ID em PID, voila.
fonte
xwininfo
exige que eu selecione manualmente a janela necessária. Eu esperava uma maneira de obter a janela focada do bash.Eu sei que a pergunta é antiga, mas acho que
xprop
também deve ser mencionada aqui. Está prontamente disponível no X. Pode ser usado de maneira interativa:xprop
e selecione a janela desejada usando o cursor do mouse e, em seguida,WM_NAME
dá o título da janela,_NET_WM_PID
dá o pidOu você pode dizer diretamente de
xprop
que janela precisa passando-id
ou-name
opção. Usandoawk
você pode obter o ID da janela ativa e passá-lo de volta para oxprop
seguinte (extraído daqui ):Por fim, usando sua Ferramenta favorita ™ (por exemplo,
grep
oused
), você pode exibir os valores necessários. Por exemplo, parapid
a saída do comando acima pode ser canalizado parased
:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'
fonte