jak przenieść aplikacje z obszaru roboczego 1 do 2 za pomocą polecenia


12

Czy jest jakiś sposób na przełączenie aplikacji działającej w jednym obszarze roboczym na inny w wierszu poleceń? Używam Ubuntu 10.04

AKTUALIZACJA 1
Zgodnie z sugestiami poniżej

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

teraz kiedy piszę

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

Jak więc właściwie go używać, w czym jest powyższy błąd?

UPDATE2
Próbowałem

wmctrl -r 0x05000072 -t 2

ale okna nie działały i pozostawały w tym samym miejscu do pracy.


Zaktualizowałem swoją odpowiedź lepszymi informacjami na temat używania -r i -i. Argument -r powinien być ujęty w „cudzysłów”, jeśli zawiera spacje. Jeśli argumentem -r jest identyfikator okna, musisz także podać -i w wierszu poleceń.

Odpowiedzi:


14

Jeśli używasz zgodnego menedżera okien, takiego jak Metacity (Unity 2-d), możesz użyć wmctrl, aby przełączyć okno na inny pulpit. Składnia jest następująca wmctrl -r :ACTIVE: -t <DESKTOP>. Możesz także zmienić swój obecny pulpit za pomocą wmctrl -s <DESKTOP>. Numery na pulpicie zaczynają się od 0. W jednym wierszu byłoby to:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

Jeśli chcesz przełączyć okno inne niż aktywne na inny pulpit, użyj tekstu z tytułu jako argumentu na -r. Na przykład:

wmctrl -r "Chromium" -t 1

Alternatywnie możesz użyć, wmctrl -laby wyświetlić listę dostępnych okien i przekazać numer identyfikacyjny do -r zamiast specjalnego ciągu :ACTIVE:. Przy przekazywaniu identyfikatora musisz również dodać -i. Na przykład:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl można zainstalować na Ubuntu przy pomocy sudo apt-get install wmctrl.) Obecnie nie wydaje się, aby działało to ze standardowym Unity, niestety.


@skyblue Świetna informacja. Zobacz jedną rzecz, której nie jestem pewien, skąd mam wiedzieć, że okno pulpitu nie, a także to, czego szukam, to załóżmy, że Chrome działa i chcę, aby Chrome przełączył się z mojego obecnego pulpitu na inny, a następnie jak przejść dla tego.
Zarejestrowany użytkownik

Jeśli używasz przeglądarki Chrome (która ma w tytule „Chromium”), powinieneś być w stanie użyć jej wmctrl -r "Chromium" -t 1wzmianki w swojej odpowiedzi, o ile używasz zgodnego menedżera okien, takiego jak Unity-2d.
John S Gruber

3

Oto mój skrypt, który implementuje to, o co prosisz: https://github.com/norswap/wmov/blob/master/wmov.sh

W swojej obecnej formie może wysyłać okna (wybrane przez dopasowanie łańcucha znaków bez rozróżniania wielkości liter do tytułu podłańcuchów, tak jak w przypadku wmctrl -ropcji) na inne komputery, poprzez wybranie jawnego numeru pulpitu lub poprzez wskazanie kierunku pulpitu od bieżącego pulpit.

Na przykład:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

Działa naprawdę tak, jak opisano w poście desgua. Umożliwia także wysyłanie okien do innych obszarów roboczych.


Podoba mi się to rozwiązanie, ponieważ może identyfikować okna z częściowymi dopasowaniami nazwy okna, szczególnie przydatne, gdy programy modyfikują część ich nazwy, w zależności od kontekstu. Wywoływanie okien po imieniu jest łatwiejsze niż wyszukiwanie ich PID. Wadą jest to, że jeśli istnieje wiele okien z tym samym łańcuchem w nazwie, nie można przewidzieć, które z nich wmov.sh uchwyci.
Andrew P.,

3

Można to zrobić za pomocą xdotool, ale jeśli używasz compiztego rozwiązania, może nie mieć zastosowania, więc pamiętaj o tym.

Aby przełączyć określone okno (aktywne okno) na inny obszar roboczy, możesz użyć

xdotool getactivewindow set_desktop_for_window 1

Lub w przypadku skryptu możesz chcieć przełączyć okna określonego programu do danego obszaru roboczego za pomocą:

xdotool search --class firefox set_desktop_for_window %@ 1

To polecenie wyszukuje i znajduje firefoxokna (okna) i przenosi je do obszaru roboczego 1, gdzie wydają się zminimalizowane. Aby powrócić firefoxdo domyślnego pulpitu, po prostu zamień 1 na 0 na końcu polecenia. Aby wysłać inne okno do innego obszaru roboczego, po prostu zamień na firefoxinną nazwę programu.

Bardzo ważne jest, %@aby reprezentować okna przekazane z --searchparametru, ponieważ jeśli nie, żadne okna nie zostaną przeniesione.

Aby uzyskać więcej informacji, zobacz man xdotooli strony internetowe Ubuntu online.


2

Jeśli używasz compiz, zajrzyj tutaj na wiki compiz . Tam znajdziesz kilka przykładów. Spójrz na wtyczkę „put”.

Przykład

./compiz-dbus-send.py put put_viewport_right_key

1

Po pierwsze, dwukropek jest częścią :ACTIVE:magicznego tokena wskazującego aktywne okno. Nie chcesz tego normalnie. Po drugie, musisz zacytować łańcuchy ze spacjami.

Możesz także uzyskać identyfikator okna ( 0x...na początku każdej linii) i użyć go zamiast próbować uruchomić tytuł.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing

Innym sposobem na uzyskanie identyfikatora okna jest uruchomienie, xwininfoa następnie kliknięcie okna, którego identyfikator chcesz.
geekozaur

Wypróbowałem twoją metodę, ale nie miała ona żadnego wpływu na dane okno.
Zarejestrowany użytkownik

@ Zarejestrowany użytkownik: Jaki menedżer okien? ( wmctrl -m)
geekozaur

przepraszam za opóźnienie Odpowiedz wmctrl -m Nazwa: compiz Klasa: Nie dotyczy PID: Nie dotyczy Tryb menedżera okien „pokazywanie pulpitu”: WYŁ.
Zarejestrowany użytkownik

Hmm. Zgaduję, na podstawie sugestii użycia wtyczek Compiz, że Compiz nie implementuje pełnej specyfikacji EWMH, więc wmctrlnie zadziała. (W szczególności musi nasłuchiwać PropertyChangezdarzeń w oknie głównym dla określonych właściwości, a następnie działać na podstawie tych właściwości).
geekozaur

0

Zmieniając nieco skrypt podany jako rozwiązanie tego pytania , następujące „przenosi” dane okno do bieżącego obszaru roboczego (w compiz):

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

Jeśli pożądany jest dowolny obszar roboczy, chodzi o dodanie / odjęcie odpowiedniego $SCREEN_W/ $SCREEN_H, tyle razy, ile obszarów roboczych okno jest oddalone od docelowego.


0

Próbować:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

pozwól mi wyjaśnić: w pomocy programów wmctrl

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d mogę wyświetlić listę wszystkich obszarów roboczych, na moim komputerze teraz pokazuje się następująco:

0 - DG: 1600x900 VP: nie dotyczy WA: 0,0 kod 1600x868
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 grać 
2 - DG: 1600x900 VP: brak danych WA: 0,01600x868 badań

* oznacza bieżący obszar roboczy

BTW, wmctrl -ljest na liście wszystkich okien (które już znasz), na moim komputerze są teraz:

0x05400008 1 użytkownik LinuxMint Terminal
0x03a0008e 0 użytkownik LinuxMint Mozilla Firefox


ponieważ „DESK” musi być liczbą, używam grep “workspace name” | cut -d" " -f1go, aby go zdobyć.

Na przykład, jeśli chcę przenieść Firefox do „kodu” obszaru roboczego, mogę użyć:

wmctrl -r "firefox" -t 0 

lub

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

ale

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

Po prostu przepracuj mnie raz, a nie wiem dlaczego!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.