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


12

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

ОБНОВЛЕНИЕ1
Согласно предложениям ниже

 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.

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

ОБНОВЛЕНИЕ2
Я пытался

wmctrl -r 0x05000072 -t 2

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


Я обновил свой ответ, добавив более подробную информацию об использовании -r и -i. Аргумент -r должен быть заключен в «кавычки», если он содержит пробелы. Если аргумент -r является идентификатором окна, вам также необходимо указать -i в командной строке.

Ответы:


14

Если вы используете совместимый оконный менеджер, такой как 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, к сожалению.


@skyblue Отличная информация. Видите, одна вещь, которая мне не ясна, - откуда мне знать, что нет окна рабочего стола, а также то, что я ищу, - это предположить, что chrome запущен, и я хочу, чтобы chrome переключился с моего текущего рабочего стола на другой, и как это сделать? за это.
Зарегистрированный пользователь

Если вы используете браузер Chrome (в заголовке которого есть «Chromium»), вы должны иметь возможность использовать wmctrl -r "Chromium" -t 1его в качестве ответа, если вы используете совместимый оконный менеджер, например Unity-2d.
John S Gruber

3

Вот мой скрипт, который реализует то, что вы просите: 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)

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


Мне нравится это решение, потому что оно может идентифицировать окна с частичным совпадением имени окна, особенно полезно, когда программы изменяют часть своего имени в зависимости от контекста. Вызывать окна по имени проще, чем искать их PID. Недостаток заключается в том, что если существует несколько окон с одинаковой строкой в ​​имени, невозможно предсказать, какой файл wmov.sh будет загружен.
Эндрю П.

3

Это можно сделать с помощью 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 онлайн.


2

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

пример

./compiz-dbus-send.py put put_viewport_right_key

1

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

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

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

Другой способ получить идентификаторы окна - запустить, xwininfoа затем щелкнуть окно, идентификатор которого вы хотите.
geekosaur

Я попробовал ваш метод, но он не оказал никакого влияния на рассматриваемое окно.
Зарегистрированный пользователь

@ Зарегистрированный пользователь: Какой оконный менеджер? ( wmctrl -m)
geekosaur

извините за задержку Ответ wmctrl -m Имя: compiz Класс: N / A PID: N / A Режим "показ рабочего стола" в оконном менеджере: OFF
зарегистрированный пользователь

Хмм. На основании предложений по использованию плагинов Compiz я предполагаю, что Compiz на самом деле не реализует полную спецификацию EWMH, поэтому wmctrlне будет работать. (В частности, он должен прослушивать PropertyChangeсобытия в корневом окне для определенных свойств, а затем воздействовать на содержимое этих свойств.)
geekosaur

0

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


0

Пытаться:

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`

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.