Как переместить приложения из рабочей области 1 в 2 с помощью команды

Можно ли как-нибудь переключить приложение, работающее в одной рабочей области, в другую в командной строке? Я использую Ubuntu 10.04

Update1
Согласно предложениям ниже

 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

теперь, когда я печатаю

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

Так как правильно его использовать, в чем ошибка выше?

UPDATE2
Я старался

wmctrl -r 0x05000072 -t 2

но окна не имели никакого эффекта, и они остались в том же рабочем пространстве.

7 ответов

Если вы используете совместимый оконный менеджер, такой как Metacity (Unity 2-d), вы можете использовать wmctrl для переключения окна на другой рабочий стол. Синтаксис wmctrl -r :ACTIVE: -t <DESKTOP>, Вы также можете изменить свой текущий рабочий стол, используя wmctrl -s <DESKTOP>, Номера рабочего стола начинаются с 0. На одной строке это будет:

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

Если вы хотите переключить окно, отличное от активного, на другой рабочий стол, используйте текст из заголовка в качестве аргумента -r. Например:

wmctrl -r "Chromium" -t 1

В качестве альтернативы вы можете использовать wmctrl -l вывести список доступных окон и передать идентификационный номер -r вместо специальной строки :ACTIVE:, При передаче идентификатора вам также необходимо добавить -i. Например:

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

(wmctrl может быть установлен на Ubuntu с sudo apt-get install wmctrlК сожалению, в настоящее время это не работает со стандартным Unity.

Это можно сделать с xdotool, но если вы используете compiz Это решение может быть неприменимо, поэтому имейте это в виду.

Чтобы переключить конкретное окно (активное окно) на другое рабочее пространство, вы можете использовать

xdotool getactivewindow set_desktop_for_window 1

Или для сценария вы можете захотеть переключить окна конкретной программы на заданную рабочую область с помощью:

xdotool search --class firefox set_desktop_for_window %@ 1

Эта команда ищет и находит firefox окна и передает их в рабочую область 1, где они будут отображаться свернутыми. Возвращать firefox на рабочий стол по умолчанию, просто замените 1 на 0 в конце команды. Чтобы отправить другое окно в другое рабочее пространство, просто замените firefox с другим именем программы.

Это важно, что вы используете %@ представлять окна, переданные из --search Параметр, как будто у вас нет окна будут переданы.

Для получения дополнительной информации см. man xdotool и страницы Ubuntu онлайн.

Вот мой скрипт, который реализует то, что вы просите: https://github.com/norswap/wmov/blob/master/wmov.sh

В текущей форме он может отправлять окна (выбранные путем сопоставления строки без учета регистра с заголовком подстроки, как для wmctrl-r опция) на другие рабочие столы, либо выбрав явный номер рабочего стола, либо указав направление рабочего стола от текущего рабочего стола.

Например:

./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)

Это действительно работает, как описано в посте Десгуа. Это также возможности отправки окон в другие рабочие пространства.

Если вы используете compiz, посмотрите здесь на compiz wiki. Там вы найдете несколько примеров. Посмотрите на "поставить" плагин.

пример

./compiz-dbus-send.py put put_viewport_right_key

Во-первых, толстая кишка является частью :ACTIVE: магический токен для обозначения активного окна. Вы не хотите это нормально. Во-вторых, вам нужно заключать строки в кавычки.

Вы также можете получить идентификатор окна (0x... в начале каждой строки) и используйте это вместо того, чтобы заставить заголовок работать.

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

Немного изменив сценарий, который приведен в качестве решения этого вопроса, следующий "переводит" данное окно в текущее рабочее пространство (в 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

Если необходимо произвольное рабочее пространство, то это вопрос добавления / вычитания соответствующего $SCREEN_W/$SCREEN_Hстолько раз, сколько рабочих пространств окно находится от целевого.

Пытаться:

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

позвольте мне объяснить: с помощью 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 Можно перечислить все рабочие пространства, на моем компьютере теперь отображается следующее:

0 - DG: 1600x900 VP: N / A WA: 0,0 1600x868 код
1  * DG: 1600x900  VP: 0,0  WA: 0,0 1600x868 воспроизведения 
2  - DG: 1600x900  VP: N/A  WA: 0,01600x868 исследования

* означает текущее рабочее пространство

КСТАТИ, wmctrl -l это перечислить все окна (которые вы уже знаете), в моем компьютере теперь они:

0x05400008 1 пользовательский терминал LinuxMint
0x03a0008e 0 пользователь-LinuxMint Mozilla Firefox


так как "DESK" должен быть номером, я использую grep “workspace name” | cut -d" " -f1 чтобы получить это.

Например, если я хочу переместить Firefox в "код" рабочей области, я могу использовать:

wmctrl -r "firefox" -t 0 

или же

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

но

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

Просто работай со мной один раз, и я не знаю почему!

Другие вопросы по тегам