Jak ustawić rozmiar okna i lokalizację aplikacji na ekranie za pomocą wiersza poleceń?

33

Chcę, aby okno Firefoksa otwierało się w określonym rozmiarze i lokalizacji na ekranie za pomocą polecenia powłoki, na przykład:

firefox myfile.html size 800x600 location bottom-left

Czy istnieje takie polecenie?

alwbtc
źródło
Udało mi się to zrobić (za pomocą tego forum), chociaż jeśli znajdziesz jakieś inne rozwiązanie, powiedz mi, ponieważ prawdopodobnie będzie ono bardziej niezawodne: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Odpowiedzi:

20

Oto społeczna wersja odpowiedzi Yokai, która zawiera przykłady oferowane przez Rudolfa Olaha .


Możesz użyć narzędzia o nazwie xdotoolkontrolującego rozmiar i lokalizację okna. Mało tego, każdy skrypt, w którym piszesz bash, używasz xdotool, może zostać skonfigurowany do pracy z w pełni zmaksymalizowanym oknem i może być skryptowany, aby ustawić rozmiar okna i współrzędne x: y poprzez manipulowanie poleceniami mousemovei click.

  1. Znajdź identyfikator okna:

    xdotool search --onlyvisible --name firefox
  2. Ustaw rozmiar okna

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Przesuń okno

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Na przykład, jeśli identyfikator okna dla firefox to 123, zrobiłbyś to:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Pozycjonowanie w lewym dolnym rogu należy ustalić na podstawie rozdzielczości ekranu.

roaima
źródło
1
Wystąpił błąd xdotool, wmctrlitp. I Ubuntu, XFCE (który mam): jeśli okno zostało już uruchomione w trybie pełnoekranowym, nie możesz go już przenieść: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi
19

O ile mi wiadomo, nie jest to możliwe, ponieważ Firefox nie akceptuje poleceń sterujących oknem. Jest to również (głównie) odpowiedzialność menedżera okien, więc wątpię, aby kiedykolwiek były do ​​tego parametry. Możesz jednak kontrolować okno za pomocą wmctrl , ale będzie to trochę trudne:

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

Mogą istnieć bardziej sprytne sposoby, aby to zrobić, i istnieją pewne problemy ze współdziałaniem z Firefoksem (np. Że żadna inna instancja nie jest uruchomiona), ale powinno to pomóc.

Konstabl
źródło
1
Tylko mała uwaga. Zmiana rozmiaru nie będzie działać, jeśli okno jest zmaksymalizowane. Musisz więc najpierw dezaktywować tę właściwość za pomocą: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b usuń, maximized_horz; Potem mogłem zmienić rozmiar okna Firefoksa.
ka3ak
3

W przeszłości tworzyłem dokument HTML, który ustawiałby rozmiar okna za pomocą Javascript, a następnie przekierowywał na żądaną stronę. To głupi hack, ale hej, to działa.

bahamat
źródło
Wygląda na to, że to już nie działa. Najwyraźniej window.resizeTo działa tylko wtedy, gdy okno jest wyskakującym oknem utworzonym przez window.open.
hugomg
2

Nie sądzę, że jest to możliwe tylko za pomocą poleceń powłoki, ponieważ nie ma to nic wspólnego z menedżerem okien.
Słyszałem o wmctrl i devilspie, które mogą mieć na to wpływ. Wątpię jednak, aby istniał sposób tak prosty, jak napisałeś w swoim przykładzie.

32bitfloat
źródło
1

Robię to cały czas. Używam jednak DevilsPie2, ponieważ jest bardziej solidny. Wykorzystuje język skryptowy LUA, co nie jest bardzo trudne.

Oto mój skrypt lua dla Thunderbirda, który chcę otworzyć na lewym lewym monitorze (ekranie laptopa), gdy się otworzy:

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

Aby to skonfigurować, należy utworzyć katalog w konfiguracji domowej (w dystrybucjach podobnych do Ubuntu) o nazwie devilspie2, np. /Home/$USERNAME/.config/devilspie2

Dla Thunderbirda stworzyłem thunderbird.lua, choć nazwa pliku nie ma znaczenia. Mam inną nazwę pliku dla każdej aplikacji, ale możesz umieścić wszystko w jednym pliku skryptu, jeśli chcesz. Ustaw devilspie2, aby uruchamiał się automatycznie po zalogowaniu, np. /Home/$USERNAME/.config/autostart/devilspie2.desktop

Oto link do dobrej strony o różnych opcjach dostępnych dla skryptu lua: https://github.com/gusnan/devilspie2/blob/master/README

Jedna uwaga: skrypty nie muszą być wykonywalne. Moje są 664 i działają dobrze. Kilka innych programów, które kontroluję, to openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload i yad. Używam na nich pin_window, aby pojawiały się na wszystkich komputerach oraz innych poleceniach w zależności od aplikacji.

Karl Pearson
źródło
Nie działa z LXDE. Absolutnie żadne okno nie jest rozpoznawane (nic nie jest drukowane podczas działania devilspie2 --debug)
John Smith Opcjonalnie
0

To nie rozwiązuje problemu pozycji, ale przynajmniej możesz ustawić wymiary:

firefox -width 200 -height 500
Sebpiq
źródło