Definindo as dimensões da janela de um aplicativo em execução

28

Estou tentando iniciar um aplicativo no Ubuntu (xfce ou gnome) e através da linha de comando e queria saber se existe uma maneira genérica de definir as dimensões de uma determinada janela de um determinado aplicativo que está sendo executado no momento?

Jamie
fonte

Respostas:

18

Isso é mais fácil se você instalar algo parecido xdotool. Então você pode fazer:

xdotool search --name "window name" windowsize 300 400

substitua "nome da janela" por um nome ou reg ex que apareça no título da janela (você também pode pesquisar por classe de janela e várias outras coisas), e os dois números que aparecem após o tamanho da janela são largura e altura, respectivamente. (Você também pode usar porcentagens, etc.) Veja man xdotooluma vez instalado.

No entanto, se você estiver no Lucid ou anterior, recomendo ir ao site do xdotool para obter uma versão mais recente.

Para redimensionar o Firefox, por exemplo:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
frabjous
fonte
3
existe alguma maneira de redimensionar a janela de tela cheia sem decorações (barra de título)? E defina a posição exata na tela (por exemplo, x = 0, y = 0)? Estou tentando definir isso para que o mplayer maximizado vá para 800x600 x = 0 y = 0 e depois de alguns minutos para o mesmo modo de tela cheia. obrigado #
27276 Peter
15

Se o gerenciador de janelas suportar Xlib, existe. Isso usa Python para definir o tamanho da janela para 500x300:

WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

A parte difícil é obter o ID da janela; no código acima, obteve o ID da janela ativa. Se você quiser outro ID, poderá usar algo assim para obter o título e controlar o PID de cada janela e escolher o ID correto com base naqueles:

windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
    window = display.create_resource_object('window', windowID)
    name = window.get_wm_name() # Title
    prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
    pid = prop.value[0] # PID
Michael Mrozek
fonte
quando print pidrecebo <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... alguma sugestão para isolar o PID real?
Khaverim 5/03
Nvm. Não parece ser possível, mas eu posso fazer uma solução alternativa via name.
Khaverim
1
@khaverim Hmm. Eu acho que essa API mudou desde a última vez que a escrevi, que costumava ser apenas o PID. Eu atualizei a resposta, você quer tomar o valor retornado pelo get_full_propertye fazer .value[0]( valueé um conjunto )
Michael Mrozek
1
python Xlib pode ser instalado via: sudo apt-get install python-xlib (no Ubuntu)
Tom
4

Específico para o XFCE, existe o pyxfce, que permitirá fazer isso usando a linguagem python . O Pyxfce é uma API que, entre outras coisas, permite a comunicação com o gerenciador de janelas . Para usar isso na linha de comando, é necessário preparar primeiro um script.

Dependendo do seu uso, a importância de usar uma API baseada em X usando IDs de janelas X (como python-xlib ou xdotools mencionados em outra resposta) em comparação com outros que usam cadeias correspondentes a títulos de janelas (como wmctrl), é que não pode haver confusão entre janelas, que podem ter as mesmas palavras-chave em seus respectivos títulos.

Benjamin
fonte
3
#!/bin/bash
#get window pid under mouse
xprop -id $(xwit -current -print | cut -d ":" -f 1) | grep _NET_WM_PID | cut -d "=" -f2 | cut -c 2-
Wilton lazary
fonte
0

Eu achei o wmctrl mais adequado para mim. Está disponível como um pacote pequeno, para Ubuntu e Raspbian, e provavelmente para outras distros também.

Karel Adams
fonte
Temos uma resposta que menciona wmctrl , mas não temos uma resposta que mostre como usá-la; você poderia expandir sua resposta com uma demonstração, apenas para que as pessoas possam pegá-la e adaptá-la para seu uso específico? Obrigado!
Jeff Schaller
Se eu tivesse um exemplo em mãos, certamente o acrescentara. Ainda assim, não é para isso que servem as páginas de manual?
Karel Adams