как переносить приложения из рабочей области с 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.

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

UPDATE1 Я попробовал

wmctrl -r 0x05000072 -t 2

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

9
задан 21 March 2011 в 22:41

56 ответов

Изменив бит сценария, который он дал в качестве решения этого вопроса, следующее «приносит» данное окно в текущее рабочее пространство (в 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
ответ дан 25 July 2018 в 22:19

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

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

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2 $ wmctrl -r 0x0482a380 -t 2 # same thing
1
ответ дан 25 July 2018 в 22:19
  • 1
    Другой способ получить идентификаторы окон - запустить xwininfo, а затем щелкнуть по окну, идентификатор которого вы хотите. – geekosaur 21 March 2011 в 21:56
  • 2
    Я попробовал ваш метод, но это не повлияло на рассматриваемое окно. – Registered User 21 March 2011 в 22:37
  • 3
    @Registered User: какой оконный менеджер? ([F1]) – geekosaur 21 March 2011 в 22:50
  • 4
    извините за задержку Ответ wmctrl -m Имя: compiz Класс: N / A PID: N / A Диспетчер окон "показывает рабочий стол" Режим выключения – Registered User 23 March 2011 в 17:11
  • 5
    Хмм. Я собираюсь угадать, основываясь на предложениях использовать плагины Compiz, что Compiz на самом деле не реализует полную спецификацию EWMH, поэтому wmctrl не будет работать. (В частности, он должен прослушивать события PropertyChange в корневом окне для конкретных свойств, а затем воздействовать на содержимое этих свойств.) – geekosaur 23 March 2011 в 17:28

Попробуйте:

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 code 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N/A WA: 0,01600x868 research

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

BTW, wmctrl -l означает перечислить все окна (которые вы уже знаете), на моем компьютере теперь они: [ ! d4] 0x05400008 1 user-LinuxMint Terminal 0x03a0008e 0 user-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`

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

0
ответ дан 25 July 2018 в 22:19

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

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

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

wmctrl -r "Chromium" -t 1

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

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

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

10
ответ дан 25 July 2018 в 22:19
  • 1
    @skyblue Отличная информация. Посмотрите одну вещь, я не понимаю, как я знаю окно рабочего стола no, а также то, что я ищу, это предположить, что chrome запущен, и я хочу, чтобы chrome переключился с моего текущего рабочего стола на другой, а затем, как идти для этого. – Registered User 21 March 2011 в 20:58
  • 2
    Если вы используете браузер Chrome (в заголовке которого есть «Chromium»), вы должны использовать wmctrl -r "Chromium" -t 1 как упоминание skyblue в своем ответе, если вы используете совместимый оконный менеджер, например Unity-2d. – John S Gruber 24 May 2012 в 23:35

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

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

Например:

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

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

3
ответ дан 25 July 2018 в 22:19
  • 1
    Мне нравится это решение, потому что оно может идентифицировать окна с частичными совпадениями имени окна, особенно полезно, когда программы изменяют часть своего имени в зависимости от контекста. Вызов окон по имени проще, чем поиск их PID. Недостатком является то, что если в названии есть несколько окон с одинаковой строкой, невозможно предсказать, какой из них будет захвачен wmov.sh. – Andrew P. 2 December 2016 в 04:25

Если вы используете compiz, посмотрите на вики-страницу compiz. Там вы найдете несколько примеров. Посмотрите на плагин «put».

Пример

./compiz-dbus-send.py put put_viewport_right_key
2
ответ дан 25 July 2018 в 22:19

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

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

1
ответ дан 25 July 2018 в 22:19

Изменив бит сценария, который он дал в качестве решения этого вопроса, следующее «приносит» данное окно в текущее рабочее пространство (в 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
ответ дан 31 July 2018 в 10:59

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

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

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2 $ wmctrl -r 0x0482a380 -t 2 # same thing
1
ответ дан 31 July 2018 в 10:59
  • 1
    Другой способ получить идентификаторы окон - запустить xwininfo, а затем щелкнуть по окну, идентификатор которого вы хотите. – geekosaur 21 March 2011 в 21:56
  • 2
    Я попробовал ваш метод, но это не повлияло на рассматриваемое окно. – Registered User 21 March 2011 в 22:37
  • 3
    @Registered User: какой оконный менеджер? ([F1]) – geekosaur 21 March 2011 в 22:50
  • 4
    извините за задержку Ответ wmctrl -m Имя: compiz Класс: N / A PID: N / A Диспетчер окон "показывает рабочий стол" Режим выключения – Registered User 23 March 2011 в 17:11
  • 5
    Хмм. Я собираюсь угадать, основываясь на предложениях использовать плагины Compiz, что Compiz на самом деле не реализует полную спецификацию EWMH, поэтому wmctrl не будет работать. (В частности, он должен прослушивать события PropertyChange в корневом окне для конкретных свойств, а затем воздействовать на содержимое этих свойств.) – geekosaur 23 March 2011 в 17:28

Попробуйте:

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 code 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N/A WA: 0,01600x868 research

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

BTW, wmctrl -l означает перечислить все окна (которые вы уже знаете), на моем компьютере теперь они: [ ! d4] 0x05400008 1 user-LinuxMint Terminal 0x03a0008e 0 user-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`

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

0
ответ дан 31 July 2018 в 10:59

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

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

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

wmctrl -r "Chromium" -t 1

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

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

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

10
ответ дан 31 July 2018 в 10:59
  • 1
    @skyblue Отличная информация. Посмотрите одну вещь, я не понимаю, как я знаю окно рабочего стола no, а также то, что я ищу, это предположить, что chrome запущен, и я хочу, чтобы chrome переключился с моего текущего рабочего стола на другой, а затем, как идти для этого. – Registered User 21 March 2011 в 20:58
  • 2
    Если вы используете браузер Chrome (в заголовке которого есть «Chromium»), вы должны использовать wmctrl -r "Chromium" -t 1 как упоминание skyblue в своем ответе, если вы используете совместимый оконный менеджер, например Unity-2d. – John S Gruber 24 May 2012 в 23:35

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

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

Например:

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

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

3
ответ дан 31 July 2018 в 10:59
  • 1
    Мне нравится это решение, потому что оно может идентифицировать окна с частичными совпадениями имени окна, особенно полезно, когда программы изменяют часть своего имени в зависимости от контекста. Вызов окон по имени проще, чем поиск их PID. Недостатком является то, что если в названии есть несколько окон с одинаковой строкой, невозможно предсказать, какой из них будет захвачен wmov.sh. – Andrew P. 2 December 2016 в 04:25

Если вы используете compiz, посмотрите на вики-страницу compiz. Там вы найдете несколько примеров. Посмотрите на плагин «put».

Пример

./compiz-dbus-send.py put put_viewport_right_key
2
ответ дан 31 July 2018 в 10:59

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

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

1
ответ дан 31 July 2018 в 10:59

Изменив бит сценария, который он дал в качестве решения этого вопроса, следующее «приносит» данное окно в текущее рабочее пространство (в 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
ответ дан 2 August 2018 в 03:47

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

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

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2 $ wmctrl -r 0x0482a380 -t 2 # same thing
1
ответ дан 2 August 2018 в 03:47
  • 1
    Еще один способ получить идентификаторы окон - запустить xwininfo, а затем щелкнуть по окну, идентификатор которого вы хотите. – geekosaur 21 March 2011 в 21:56
  • 2
    Я попробовал ваш метод, но это не повлияло на рассматриваемое окно. – Registered User 21 March 2011 в 22:37
  • 3
    @Registered User: какой оконный менеджер? ([F1]) – geekosaur 21 March 2011 в 22:50
  • 4
    извините за задержку Ответ wmctrl -m Имя: compiz Класс: N / A PID: N / A Диспетчер окон "показывает рабочий стол" Режим выключения – Registered User 23 March 2011 в 17:11
  • 5
    Хмм. Я собираюсь угадать, основываясь на предложениях использовать плагины Compiz, что Compiz на самом деле не реализует полную спецификацию EWMH, поэтому wmctrl не будет работать. (В частности, он должен прослушивать события PropertyChange в корневом окне для конкретных свойств, а затем воздействовать на содержимое этих свойств.) – geekosaur 23 March 2011 в 17:28

Попробуйте:

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 code 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N/A WA: 0,01600x868 research

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

BTW, wmctrl -l означает перечислить все окна (которые вы уже знаете), на моем компьютере теперь они: [ ! d4] 0x05400008 1 user-LinuxMint Terminal 0x03a0008e 0 user-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`

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

0
ответ дан 2 August 2018 в 03:47

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

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

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

wmctrl -r "Chromium" -t 1

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

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

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

10
ответ дан 2 August 2018 в 03:47
  • 1
    @skyblue Отличная информация. Посмотрите одну вещь, я не понимаю, как я знаю окно рабочего стола no, а также то, что я ищу, это предположить, что chrome запущен, и я хочу, чтобы chrome переключился с моего текущего рабочего стола на другой, а затем, как идти для этого. – Registered User 21 March 2011 в 20:58
  • 2
    Если вы используете браузер Chrome (в заголовке которого есть «Chromium»), вы должны использовать wmctrl -r "Chromium" -t 1 как упоминание skyblue в своем ответе, если вы используете совместимый оконный менеджер, например Unity-2d. – John S Gruber 24 May 2012 в 23:35

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

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

Например:

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

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

3
ответ дан 2 August 2018 в 03:47
  • 1
    Мне нравится это решение, потому что оно может идентифицировать окна с частичными совпадениями имени окна, особенно полезно, когда программы изменяют часть своего имени в зависимости от контекста. Вызов окон по имени проще, чем поиск их PID. Недостатком является то, что если в названии есть несколько окон с одинаковой строкой, невозможно предсказать, какой из них будет захвачен wmov.sh. – Andrew P. 2 December 2016 в 04:25

Если вы используете compiz, посмотрите на вики-страницу compiz. Там вы найдете несколько примеров. Посмотрите на плагин «put».

Пример

./compiz-dbus-send.py put put_viewport_right_key
2
ответ дан 2 August 2018 в 03:47

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

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

1
ответ дан 2 August 2018 в 03:47

Изменив бит сценария, который он дал в качестве решения этого вопроса, следующее «приносит» данное окно в текущее рабочее пространство (в 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
ответ дан 4 August 2018 в 19:51

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

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

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2 $ wmctrl -r 0x0482a380 -t 2 # same thing
1
ответ дан 4 August 2018 в 19:51
  • 1
    Еще один способ получить идентификаторы окон - запустить xwininfo, а затем щелкнуть по окну, идентификатор которого вы хотите. – geekosaur 21 March 2011 в 21:56
  • 2
    Я попробовал ваш метод, но это не повлияло на рассматриваемое окно. – Registered User 21 March 2011 в 22:37
  • 3
    @Registered User: какой оконный менеджер? ([F1]) – geekosaur 21 March 2011 в 22:50
  • 4
    извините за задержку Ответ wmctrl -m Имя: compiz Класс: N / A PID: N / A Диспетчер окон "показывает рабочий стол" Режим выключения – Registered User 23 March 2011 в 17:11
  • 5
    Хмм. Я собираюсь угадать, основываясь на предложениях использовать плагины Compiz, что Compiz на самом деле не реализует полную спецификацию EWMH, поэтому wmctrl не будет работать. (В частности, он должен прослушивать события PropertyChange в корневом окне для конкретных свойств, а затем воздействовать на содержимое этих свойств.) – geekosaur 23 March 2011 в 17:28

Попробуйте:

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 code 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N/A WA: 0,01600x868 research

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

BTW, wmctrl -l означает перечислить все окна (которые вы уже знаете), на моем компьютере теперь они: [ ! d4] 0x05400008 1 user-LinuxMint Terminal 0x03a0008e 0 user-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`

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

0
ответ дан 4 August 2018 в 19:51

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

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

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

wmctrl -r "Chromium" -t 1

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

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

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

10
ответ дан 4 August 2018 в 19:51
  • 1
    @skyblue Отличная информация. Посмотрите одну вещь, я не понимаю, как я знаю окно рабочего стола no, а также то, что я ищу, это предположить, что chrome запущен, и я хочу, чтобы chrome переключился с моего текущего рабочего стола на другой, а затем, как идти для этого. – Registered User 21 March 2011 в 20:58
  • 2
    Если вы используете браузер Chrome (в заголовке которого есть «Chromium»), вы должны использовать wmctrl -r "Chromium" -t 1 как упоминание skyblue в своем ответе, если вы используете совместимый оконный менеджер, например Unity-2d. – John S Gruber 24 May 2012 в 23:35

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

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

Например:

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

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

3
ответ дан 4 August 2018 в 19:51
  • 1
    Мне нравится это решение, потому что оно может идентифицировать окна с частичными совпадениями имени окна, особенно полезно, когда программы изменяют часть своего имени в зависимости от контекста. Вызов окон по имени проще, чем поиск их PID. Недостатком является то, что если в названии есть несколько окон с одинаковой строкой, невозможно предсказать, какой из них будет захвачен wmov.sh. – Andrew P. 2 December 2016 в 04:25

Если вы используете compiz, посмотрите на вики-страницу compiz. Там вы найдете несколько примеров. Посмотрите на плагин «put».

Пример

./compiz-dbus-send.py put put_viewport_right_key
2
ответ дан 4 August 2018 в 19:51

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

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

1
ответ дан 4 August 2018 в 19:51

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

Пример

  ./ compiz-dbus-send.py put put_viewport_right_key  
2
ответ дан 6 August 2018 в 03:54

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

1
ответ дан 6 August 2018 в 03:54

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

Похожие вопросы: