Se você estiver usando o Compiz (execute wmctrl -m
se não tiver certeza), o wmctrl só verá 1 desktop (2º campo de wmctrl -l, ie 0) mas você pode usar a opção geometry (-G) para saber qual janela está em que área de trabalho virtual. Todas as janelas na sua área de trabalho atual terão uma posição x entre 0 e a largura da sua tela. O mesmo para a posição y entre 0 e a altura da sua tela.
Então você pode usar algo assim
#!/bin/bash
SCREEN_W=$(xwininfo -root | sed -n 's/^ Width: \(.*\)$//p')
SCREEN_H=$(xwininfo -root | sed -n 's/^ Height: \(.*\)$//p')
NAME='Navigator.Firefox'
wmctrl -xlG | awk -v W="$SCREEN_W" -v H="$SCREEN_H" -v NAME="$NAME" '==NAME && >=0 && <W && >=0 && <H {print }' | while read WINS; do wmctrl -ia "$WINS"; done
exit 0
Você pode codificar a largura e a altura de sua tela, se quiser, e NAME se quiser uma linha única. Não tenho certeza de como você deseja lidar com várias janelas correspondentes a NAME. Isso irá focar todos eles.
Para o metacity, o número da área de trabalho do Windows pode ser encontrado usando wmctrl -l
e grepping o segundo campo.