Wie werden Fenstergröße und Position einer Anwendung auf dem Bildschirm über die Befehlszeile festgelegt?

33

Ich möchte, dass das Firefox-Fenster mit einem Shell-Befehl in einer bestimmten Größe und Position auf dem Bildschirm geöffnet wird. Beispiel:

firefox myfile.html size 800x600 location bottom-left

Gibt es so einen Befehl?

alwbtc
quelle
Ich habe dies geschafft (mithilfe dieses Forums). Wenn Sie jedoch eine andere Lösung finden, teilen Sie mir dies bitte mit, da diese wahrscheinlich robuster sein wird: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Antworten:

20

Hier ist eine Community-Version der Antwort von Yokai , die Beispiele von Rudolf Olah enthält .


Mit dem aufgerufenen Tool können Sie die xdotoolFenstergröße und -position steuern. Nicht nur , dass jedes Skript Sie schreiben in bash, mit xdotool, Setup zu arbeiten mit einem vollständig maximierten Fenster sein kann , und es kann scripted werden , um die Fenstergröße einzustellen und x: y - Koordinaten durch die Manipulation mousemoveund clickBefehle.

  1. Finden Sie die Fenster-ID:

    xdotool search --onlyvisible --name firefox
  2. Stellen Sie die Fenstergröße ein

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Bewege das Fenster

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Wenn die Fenster-ID für Firefox beispielsweise 123 lautet, würden Sie Folgendes tun:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Die Positionierung unten links muss anhand Ihrer Bildschirmauflösung ermittelt werden.

roaima
quelle
1
Es ist ein Fehler mit xdotool, wmctrletc .. und Ubuntu, XFCE (dass ich): Wenn das Fenster bereits im Vollbildmodus gestartet wurde, können Sie es sich nicht mehr bewegen: bugs.launchpad.net/ubuntu/+source/unity/ + Bug / 971147
ThePhi
19

Soweit ich weiß, ist dies nicht möglich, da Firefox keine Befehle zur Steuerung des Fensters akzeptiert. Das liegt auch (meistens) in der Verantwortung des Fenstermanagers, daher bezweifle ich, dass es jemals Parameter dafür geben wird. Sie können das Fenster jedoch mit wmctrl steuern , aber das wird ein bisschen schwierig:

#!/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

Es gibt vielleicht klügere Möglichkeiten, dies zu tun, und es gibt einige Interoperabilitätsprobleme mit Firefox (z. B. dass keine andere Instanz ausgeführt wird), aber es sollte Sie zum Laufen bringen.

Bobby
quelle
1
Nur eine kleine Notiz. Die Größenänderung funktioniert nicht, wenn das Fenster maximiert ist. Sie müssen diese Eigenschaft also zuerst deaktivieren mit: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b remove, maximized_horz; Danach konnte ich die Größe des Firefox-Fensters ändern.
Ka3ak
3

In der Vergangenheit habe ich ein HTML-Dokument erstellt, in dem die Fenstergröße mit Javascript festgelegt und dann auf die gewünschte Seite umgeleitet wurde. Es ist ein dummer Hack, aber hey, es funktioniert.

Bahamat
quelle
Sieht so aus, als würde das nicht mehr funktionieren. Anscheinend wirkt sich window.resizeTo nur aus, wenn das Fenster ein Popup ist, das über window.open erstellt wurde.
hugomg
2

Ich glaube nicht, dass dies nur mit Shell-Befehlen möglich ist, da es nichts mit Ihrem Windowmanager zu tun hat.
Ich habe von wmctrl und devilspie gehört, die dies bewirken können. Aber ich bezweifle, dass es einen Weg gibt, dies so einfach zu erreichen, wie Sie es in Ihrem Beispiel beschrieben haben.

32bitfloat
quelle
1

Ich mache das die ganze Zeit. Ich benutze jedoch DevilsPie2, weil es robuster ist. Es verwendet die LUA-Skriptsprache, die nicht sehr schwierig ist.

Hier ist mein Lua-Skript für Thunderbird, das ich beim Öffnen auf dem linken Bildschirm (Laptop-Bildschirm) öffnen möchte:

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

Um dies einzurichten, erstellen Sie in Ihrer Home-Konfiguration (auf Ubuntu-ähnlichen Distributionen) ein Verzeichnis mit dem Namen devilspie2, z. B. /home/$USERNAME/.config/devilspie2

Für Thunderbird habe ich thunderbird.lua erstellt, obwohl der Dateiname keine Rolle spielt. Ich habe einen anderen Dateinamen für jede Anwendung, obwohl Sie alles in eine Skriptdatei setzen können, wenn Sie wünschen. Stellen Sie devilspie2 so ein, dass es beim Anmelden automatisch startet, z. B. /home/$USERNAME/.config/autostart/devilspie2.desktop

Hier ist ein Link zu einer guten Seite mit verschiedenen Optionen für Ihr Lua-Skript: https://github.com/gusnan/devilspie2/blob/master/README

Ein Hinweis: Die Skripte müssen nicht ausführbar sein. Meins sind 664 und funktionieren gut. Einige der anderen Programme, die ich steuere, sind openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload und yad. Ich benutze pin_window für sie, damit sie auf allen Desktops und je nach Anwendung auch auf anderen Befehlen erscheinen.

Karl Pearson
quelle
Scheint nicht mit LXDE zu funktionieren. Es wird absolut kein Fensterereignis erkannt (beim Ausführen wird nichts gedruckt devilspie2 --debug)
John Smith Optional
0

Dies löst das Problem der Position nicht, aber Sie können zumindest die Abmessungen festlegen:

firefox -width 200 -height 500
sebpiq
quelle