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?

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

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


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.


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-

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.