Come impostare le dimensioni della finestra e la posizione di un'applicazione sullo schermo tramite riga di comando?


33

Voglio che la finestra di Firefox sia aperta in una dimensione specifica e la posizione sullo schermo usando un comando shell, ad esempio:

firefox myfile.html size 800x600 location bottom-left

Esiste un tale comando?


Sono riuscito a farlo (con l'aiuto di questo forum), sebbene se trovi qualche altra soluzione, per favore dimmi perché probabilmente sarà più robusto: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Risposte:


20

Ecco una versione comunitaria della risposta di Yokai che incorpora esempi offerti da Rudolf Olah .


È possibile utilizzare lo strumento chiamato xdotoolper controllare le dimensioni e la posizione della finestra. Non solo, qualsiasi script in cui scrivi bash, usando xdotool, può essere configurato per funzionare con una finestra completamente ingrandita e può essere scritto per impostare la dimensione della finestra e le coordinate x: y manipolando i comandi mousemovee click.

  1. Trova l'ID della finestra:

    xdotool search --onlyvisible --name firefox
  2. Imposta la dimensione della finestra

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Sposta la finestra

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Ad esempio, se l'id della finestra per Firefox è 123, dovresti farlo:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Il posizionamento in basso a sinistra dovrà essere calcolato in base alla risoluzione dello schermo.


1
C'è un bug con xdotool, wmctrlecc. E Ubuntu, XFCE (che ho): se la finestra è già stata avviata in modalità a schermo intero, non puoi più spostarlo: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi

19

Per quanto ne so, questo non è possibile in quanto Firefox non accetta i comandi per controllare la finestra. Questa è anche (principalmente) la responsabilità del window manager, quindi dubito che ci saranno mai dei parametri per farlo. Tuttavia, puoi controllare la finestra con wmctrl , ma sarà un po 'difficile:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

Potrebbero esserci modi più intelligenti per farlo, e ci sono alcuni problemi di interoperabilità con Firefox (ad es. Che nessun'altra istanza è in esecuzione) ma dovrebbe farti andare.


1
Solo una piccola nota. Il ridimensionamento non funzionerà se la finestra è ingrandita. Quindi devi prima disattivare questa proprietà con: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b remove, maximized_horz; Successivamente sono stato in grado di ridimensionare la finestra di Firefox.
ka3ak,

3

In passato ho creato un documento HTML che avrebbe impostato la dimensione della finestra con Javascript e quindi reindirizzato alla pagina desiderata. È un trucco stupido ma, ehi, funziona.


Sembra che questo non funzioni più. Apparentemente, window.resizeTo ha effetto solo se la finestra è un popup creato tramite window.open.
hugomg

2

Non penso che ciò sia possibile solo con i comandi della shell, perché non ha nulla a che fare con il tuo gestore di finestre.
Ho sentito parlare di wmctrl e devilspie che possono fare questo. Ma dubito che ci sia un modo per ottenere ciò semplice come hai scritto nel tuo esempio.


1

Lo faccio sempre. Uso DevilsPie2, tuttavia, perché è più robusto. Utilizza il linguaggio di scripting LUA, che non è molto difficile.

Ecco il mio script lua per Thunderbird, che voglio aprire sul monitor all'estrema sinistra (schermo del laptop) quando si apre:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

Per impostarlo, crei una directory nella tua configurazione domestica (su distribuzioni simili a Ubuntu) chiamata devilspie2, ad esempio /home/$USERNAME/.config/devilspie2

Per Thunderbird, ho creato thunderbird.lua, anche se il nome file non ha importanza. Ho un nome file diverso per ogni applicazione anche se puoi mettere tutto in un unico file di script se lo desideri. Imposta devilspie2 per l'avvio automatico quando accedi, ad es. /Home/$USERNAME/.config/autostart/devilspie2.desktop

Ecco un link a una buona pagina sulle varie opzioni disponibili per il tuo script lua: https://github.com/gusnan/devilspie2/blob/master/README

Una nota: gli script non devono essere eseguibili. I miei sono 664 e funzionano bene. Alcuni degli altri programmi che controllo sono openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload e yad. Uso pin_window su di loro in modo che appaiano su tutti i desktop, oltre ad altri comandi a seconda dell'applicazione.


Non sembra funzionare con LXDE. Assolutamente nessun evento finestra riconosciuto (nulla viene stampato durante l'esecuzione devilspie2 --debug)
John Smith Opzionale

0

Questo non risolve il problema della posizione, ma almeno puoi impostare le dimensioni:

firefox -width 200 -height 500
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.