Czy można przenieść wszystkie okna (lub wszystkie niezminimalizowane okna) z jednego obszaru roboczego do drugiego?
Wiem, że mogę przenieść jedno okno do innego obszaru roboczego za pomocą Shift+ Ctrl+ Alt+ arrow, ale przeniesie ono tylko to jedno skoncentrowane okno.
unity
compiz
workspaces
viewports
betatester07
źródło
źródło
Odpowiedzi:
Jedność: czym są rzutnie?
Ubuntu Unity używa rzutni - w zasadzie układu współrzędnych (gdzie współrzędna 0,0 to lewy górny róg), gdzie jeden gigantyczny pulpit podzielony jest na części pasujące do rozdzielczości ekranu. Współrzędne rosną w miarę przesuwania się w prawo i w dół.
Układ współrzędnych jest względny. Jeśli moja bieżąca rzutnia znajduje się w lewym górnym rogu, wszystko względem tej rzutni będzie dodatnie w przyrostach szerokości i wysokości. Na przykład, jeśli moja bieżąca rzutnia znajduje się w lewym górnym rogu, okno firefox w górnym środkowym obszarze roboczym, które widzisz powyżej, jest ustawione na wartość x 1366 i wartość y 0 względem górnej lewej rzutni. Jeśli moja aktywna rzutnia jest w górnej środkowej, okno terminala w górnej lewej rzutni jest ustawione na wartość x -1327 60. Jest to kluczowa kwestia
xdotool
, ponieważxdotool
nie dotyczy liczb ujemnych.Zauważ też, że lewy górny róg twojej bieżącej rzutni zawsze będzie przyjmowany przez xdotool jako współrzędne 0 0. Oznacza to, że możemy przesuwać rzeczy tylko w prawo i w dół.
Sprawienie, by xdotool działał dla Unity
Teraz wiemy, że
xdotool
można przesuwać okna tylko w stosunku do naszego lewego górnego rogu (tzn. Zawsze możesz przesuwać okno w dół i w prawo, ale nigdy w górę i w lewo). Jak sprawić, by działało to dla jedności. Podstawowym pomysłem byłobyRozwiązanie do tworzenia skryptów
Poniższy skrypt wykonuje dokładnie powyższą procedurę. Można go wywołać z dowolną
-v
flagą, aby ręcznie określić współrzędne, lub można użyć-g
flagi, aby wyświetlić okno dialogowe GUI.-f
Flaga nakazuje skryptowi również przełączyć rzutnię; jeśli ta flaga nie jest używana - pozostaniesz w bieżącej rzutni i tylko okna będą się poruszaćUzyskiwanie skryptu
Można skopiować kod źródłowy z tego postu bezpośrednio lub przez github, wykonując następujące czynności:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
Plik skryptu będzie
/opt/sergrep/move_viewport_windows.sh
Aby powiązać skrypt ze skrótem, zobacz temat Jak powiązać pliki .sh z kombinacją klawiatury?
Pamiętaj, że
wmctrl
ixdotool
są wymagane do poprawnego działania tego skryptu. Możesz je zainstalować za pomocą sudo apt-get install xdotool i wmctrlKod źródłowy
Próbny
Webm nagrywanie skryptu w akcji:
https://www.youtube.com/watch?v=cJMlC41CWo
Problemy
Ze względu na
grid
wtyczkę Unity, która jest odpowiedzialna za przyciąganie okien, skrypt nie może przenosić zmaksymalizowanych lub przyciągniętych w prawo / w lewo okien. Zostanie podjęta próba dodania chwilowego rozbrojenia i resetu tej wtyczki, aby skrypt działał ze wszystkimi oknami, ale ponieważ rozbrojenie i resetowanie ma opóźnienie czasowe, może zostać porzucone jako pomysł. Jeśli chcesz, aby skrypt działał ze wszystkimi oknami, zainstalujunity-tweak-tool
i usuń przyciąganie okien w opcjach Menedżera okien.źródło
Środowiska pulpitu inne niż Compiz (XFCE, LXDE, GNOME, KDE ...)
Można użyć kombinacji
wmctrl
ixdotool
do tego. Najpierw upewnij się, że te dwa narzędzia są zainstalowane:Po spełnieniu zależności, powinieneś być w stanie użyć następującego linijki, aby przenieść wszystkie okna na bieżącym pulpicie na inny:
Szybki podział używanych poleceń:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Wyświetl listę wszystkich okien, odfiltruj te, których nie ma w bieżącym obszarze roboczym, i wyodrębnij ich identyfikator okna
wmctrl -i -t 2 -r "$i"
Przenieś okno z identyfikatorem okna
$i
do obszaru roboczego 2.wszystko to jest zapakowane w prostą
while read ... do; done
pętlę, która iteruje wszystkie okna na bieżącym pulpicieŚrodowiska komputerowe oparte na Compizie (np. Unity)
Znalezienie rozwiązania dla środowisk pulpitu takich jak Unity jest utrudnione przez fakt, że Compiz (menedżer okien Unity) nie używa komputerów stacjonarnych w tradycyjnym znaczeniu .
źródło