Gestire le finestre dalla shell


Si, avete capito bene, si possono gestire le finestre del nostro WM anche stando comodamente da shell😉

Per questo ci viene in aiuto il tool wmctrl

Il programma è presente nei repositories di Ubuntu, quindi possiamo installarlo da Synaptic o semplicemente da terminale:
sudo apt-get install wmctrl
Ma vediamo subito come usarlo… per avere la lista delle finestre attualmente attive dobbiamo usare l’opzione -l:
$ wmctrl -l
nella prima colonna viene riportato l’identificativo della finestra (window ID), nella seconda l’identificativo del desktop (se negativo significa che è presente in tutti i desktop), poi il nome della macchina ed infine il titolo della finestra.
Ma può risultare utile conoscere anche il PID dell’applicazione, per questo basta fare:
$ wmctrl -lp
in questo caso l’output sarà:
windowID desktopID PID hostname win_title
Ma facciamo un esempio pratico di utilizzo:

Come chiudere un’applicazioni in modo sicuro, cioè salvaguardando eventuali files aperti dall’utente?

Generalmente si sarebbe utilizzato il kill (o pkill) per terminare l’applicazione, ma se ad esempio questa fosse gedit con un documento aperto, non salvato, il kill terminerebbe il processo senza dare la possibilità all’utente di salvare il file😦
Con wmctrl invece, dobbiamo prima individuare il windowId di gedit:
$ wmctrl -l
0x020000ed -1 ubuntu N/A
0x00c00003 -1 ubuntu Bottom Panel
0x00c00031 -1 ubuntu Top Panel
0x00e00021 -1 ubuntu Scrivania
0x03800003 0 ubuntu Documento 1 non salvato - gedit

e quindi, utilizzando l’opzione -c per eseguire il kill “soft” e -i per specificare il windowId, dobbiamo solo:
wmctrl -ic 0x03800003
o più semplicemente:
PROCESSO="gedit"; wmctrl -ic $(wmctrl -pl|grep "[^ ]* *[^ ]* `pidof ${PROCESSO}` "|cut -f 1 -d " ")
Ma facciamo un altro esempio:

Come massimizzare una finestra?

Sempre utilizzando il windowId visto prima per gedit (0x03800003), basta usare questa volta l’opzione -b e -r per impostare un nuovo stato della finestra:
wmctrl -ir 0x03800003 -b add,maximized_horz,maximized_vert
Infine, un altro esempio:

Come visualizzare il desktop e come ripristinare la visualizzazione delle finestre?

In questo caso occorre usare l’opzione -k, quindi
wmctrl -k on
per visualizzare il desktop, e così per ripristinare la precedente situazione:
wmctrl -k off
Spero che questo mio post, vi abbia convinto delle potenzialità del tool, e vi invito a visitare il sito per maggiori dettagli😉

3 thoughts on “Gestire le finestre dalla shell

  1. ciao stavo cercando di scrivere uno script per aprire quattro xterm in gnome e posizionarli ben benino senza sovrapposizioni in un workspace particolare. Prima mi sono imbattuto in wmctrl e poi nel tuo blog. Purtroppo il move and resize di wmctl no mi funziona, se provo:
    $ wmctl -ir 0x02a00024 -e 0,0,0,640,400
    la finestra disobbedisce e non succede niente…
    Sicuramente sei più capace di me, qualche suggerimento?
    ciao

  2. Ho provato con xterm ad impostare i parametri come da te riportati e funziona benissimo… sicuro che 0×02a00024 sia il windowId corretto?
    In caso prova così
    wmctrl -pl|grep "[^ ]* *[^ ]* `pidof xterm` "|cut -f 1 -d " "
    per trovarlo e riprova😉

  3. Marco ha detto:

    Grazie per avermi fatto scoprire questo fantastico programmino!
    Adesso posso ridimensionare la mia finestra di VNCViewer in questo modo:

    wmctrl -r VNCviewer -e 0,0,0,1045,703

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...