Czy istnieje sposób na umieszczenie okna na środku ekranu po jego otwarciu lub spowodowanie, że otworzy się ono na środku ekranu?
Należy to zrobić za pomocą wiersza polecenia.
Czy istnieje sposób na umieszczenie okna na środku ekranu po jego otwarciu lub spowodowanie, że otworzy się ono na środku ekranu?
Należy to zrobić za pomocą wiersza polecenia.
Odpowiedzi:
Narzędzie wmctrl zapewnia dostęp z wiersza poleceń do prawie wszystkich funkcji zdefiniowanych w specyfikacji EWMH (Extended Window Manager Hints) . Można go użyć na przykład do uzyskania informacji o menedżerze okien, uzyskania szczegółowej listy pulpitów i zarządzanych okien, przełączania i zmiany rozmiaru pulpitów, aby okna były pełnoekranowe , zawsze nad lub lepkie , oraz do aktywacji , zamykaj , przesuwaj , zmieniaj rozmiar , maksymalizuj i minimalizuj je.
Możesz go zainstalować przez
sudo apt-get install wmctrl
Możesz uzyskać informacje o swoich wirtualnych pulpitach (obszarach roboczych) za pomocą
wmctrl -d
one@onezero:~$ wmctrl -d
0 * DG: 2720x1536 VP: 0,0 WA: 0,24 1360x744 N/A
I otwórz listę okien za pomocą wmctrl -l
. Ta -G
opcja pokazuje geometrię okien:
one@onezero:~$ wmctrl -l
0x02000004 0 onezero Desktop
0x02e00002 0 N/A DNDCollectionWindow
0x02e00003 0 N/A launcher
0x01e00004 0 onezero cairo-dock
0x02e00004 0 N/A panel
0x04800061 0 onezero Transmission
0x02e0000a 0 N/A Dash
0x03a00044 0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006 0 onezero one@onezero: ~
0x04c000e9 0 onezero Google - Mozilla Firefox
wmctrl -lG
one@onezero:~$ wmctrl -lG
0x02000004 0 0 0 1360 768 onezero Desktop
0x02e00002 0 -1460 -868 1360 768 N/A DNDCollectionWindow
0x02e00003 0 0 24 58 744 N/A launcher
0x01e00004 0 290 653 780 115 onezero cairo-dock
0x02e00004 0 0 0 1360 24 N/A panel
0x04800061 0 408 95 732 500 onezero Transmission
0x02e0000a 0 -1402 -844 1302 744 N/A Dash
0x03a00044 0 0 24 1360 744 onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006 0 127 94 983 434 onezero one@onezero: ~
0x04c000e9 0 5 47 1349 715 onezero Google - Mozilla Firefox
Możesz określić okno, odwołując się do jego tytułu lub częściowego tytułu po -r. -e służy do przenoszenia i zmiany rozmiaru
wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>
<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.
Tak więc, aby przenieść okno do lewego górnego rogu i ustawić je na 1000 pikseli szerokości na 700 wysokości, użyłbyś 0,0,0,1000,700
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700
Aby przenieść / zmienić rozmiar. W tym celu skorzystałem z obejścia „maksymalizacji”, używając -b
opcji
wmctrl -r „Mozilla Firefox” -b dodaj, maximized_vert, maximized_horz
wmctrl -r „Mozilla Firefox” -b usuń, maximized_vert, maximized_horz
one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz
Rzeczy, które musisz zrozumieć 1.
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"
to jest rozdzielczość mojego ekranu, więc x = 1360 i y = 786
Wyrównanie okna do lewej połowy ekranu
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768
Wyrównywanie okna do prawej połowy ekranu
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768
Wyrównanie okna do center of screen
1360/4 = 340
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768
Manipuluj zgodnie z ustawieniami ekranu
który działa z aktualnie aktywnym oknem
IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')
newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))
xdotool getactivewindow windowmove "$newPosX" "$newPosY"
xdotool
akcję wywołać, aby najpierw ustawić je jako „normalne” okna windowmove
. Pomysły?
wmctrl
również dzwonienie , mile widziane lepsze rozwiązania. TL; DR: połączenie wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz
przed ostatnim xdotool getactivewindow windowmove
połączeniem.
Jeśli ktoś chce, aby to zrobić, skopiuj / wklej fragment kodu, oto:
winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
foo
Oczywiście zamień na nazwę okna, które chcesz wyśrodkować w pierwszym wierszu.
Objaśnienie (podział w formie przykładowej sesji konsoli):
Uzyskiwanie wymiarów ekranu
llama@llama:~$ xdpyinfo | grep dimensions
dimensions: 1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080
Uzyskiwanie informacji o geometrii okna
llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c 0 1113 510 722 475 llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
0 1113 510 722 475 llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
1113 510 722 475 llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505 722 475
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475
Przesuwanie okna
llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475
Większość aplikacji powinna uwzględniać parametr --geometry podczas uruchamiania (niektórzy wolą -geometry, spróbuj drugiego, jeśli pierwszy nie działa dla Ciebie):
gnome-terminal --geometry 80x25+100+100
Parametr geometrii ma następującą postać:
WIDTHxHEIGHT+XOFF+YOFF
Możesz pominąć niepotrzebne części:
gnome-terminal --geometry +20+50 #No size, just offsets
Po więcej szczegółów:
man X
następnie naciśnij „/” i wyszukaj SPECYFIKACJE GEOMETRYCZNE
lub zobacz tutaj: http://www.cotse.com/dlf/man/xwindows/geometry.htm
bash
lubzsh
uruchomić, zwykłysh
nie będzie działać.