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

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

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

Например:

  ./ wmov.sh mov «Google Chrome» 3 # отправляет  Chrome на рабочий стол 3 (внизу слева) ./mov.sh mov Skype справа # отправляет Skype на рабочий стол справа от # текущего рабочего стола (если есть)  

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

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

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

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

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

  wmctrl -r «Chromium» -t 1  

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

  $ wmctrl -l 0x03e00189 0 имя хоста Задайте Ubuntu - Chromium $ wmctrl -i -r 0x03e00189 -t 2  

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

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

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

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

  $ wmctrl -r 'OMG!  Ubuntu!  |  wmctrl - Chromium '-t 2 #, где бы он ни находился, переместите его на 2 $ wmctrl -r 0x0482a380 -t 2 # то же самое  
1
ответ дан 6 August 2018 в 03:54

Попробуйте:

  wmctrl -r "имя окна (или любая строка в заголовке)" -t `wmctrl -d |  grep "имя рабочего пространства" |  cut -d "" -f1`  

позвольте мне объяснить: в помощи wmctrl показано

  -r & lt; WIN & gt;  -t & lt; DESK & gt;  Переместите окно на указанный рабочий стол.  & Lt; & СТОЛ GT;  Номер рабочего стола.  Настольные компьютеры подсчитываются с нуля.  & Л; WIN & GT;  Этот аргумент указывает окно.  По умолчанию интерпретируется как строка.  Строка сопоставляется с названиями окон и используется первое совпадающее окно.  Соответствие не чувствительно к регистру, и строка может отображаться в любой позиции заголовка.  Параметр -i может использоваться для интерпретации аргумента как числового идентификатора окна, представленного как десятичное число.  Если он начинается с «0x», он будет интерпретироваться как шестнадцатеричное число.   

wmctrl -d может отображать все рабочие области, на моем компьютере теперь отображается следующее:

 0 - DG: 1600x900 VP: N  / A WA: 0,0 1600x868 код 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N / A WA: 0,01600x868 research 

* означает текущую рабочую область

BTW, wmctrl -l , чтобы перечислить все окна (которые вы уже знаете), на моем компьютере теперь они:

  0x05400008 1 пользователь-LinuxMint Terminal 0x03a0008e 0 user-LinuxMint Mozilla Firefox 

, так как «DESK» должен быть числом, я использую grep «имя рабочего пространства» | 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
ответ дан 6 August 2018 в 03:54

Изменив бит скрипта, который он дал в качестве решения этого вопроса , следующее «приносит» данное окно в текущее рабочее пространство (в compiz): ​​

  #! / bin / bash SCREEN_W = $ (xwininfo -root | sed -n 's / ^ Ширина: \ (. * \) $ / \ 1 / p') SCREEN_H = $ (xwininfo -root | sed -n  's / ^ Высота: \ (. * \) $ / \ 1 / p') NAME = "$ 1" wmctrl -xlG |  awk -v NAME = "$ NAME" '$ 7 == NAME {print $ 1}' |  при чтении WINS;  do wmctrl -ir "$ WINS" -e "0,0,0, $ SCREEN_W, $ SCREEN_H";  done exit 0  

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

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

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

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

Например:

  ./ wmov.sh mov «Google Chrome» 3 # отправляет  Chrome на рабочий стол 3 (внизу слева) ./mov.sh mov Skype справа # отправляет Skype на рабочий стол справа от # текущего рабочего стола (если есть)  

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

3
ответ дан 7 August 2018 в 21:51

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

Пример

  ./ compiz-dbus-send.py put put_viewport_right_key  
2
ответ дан 7 August 2018 в 21: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 , как будто вы не переносите никаких окон.

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

1
ответ дан 7 August 2018 в 21:51

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

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

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

  wmctrl -r «Chromium» -t 1  

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

  $ wmctrl -l 0x03e00189 0 имя хоста Задайте Ubuntu - Chromium $ wmctrl -i -r 0x03e00189 -t 2  

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

11
ответ дан 7 August 2018 в 21:51

Изменив бит скрипта, который он дал в качестве решения этого вопроса , следующее «приносит» данное окно в текущее рабочее пространство (в compiz): ​​

  #! / bin / bash SCREEN_W = $ (xwininfo -root | sed -n 's / ^ Ширина: \ (. * \) $ / \ 1 / p') SCREEN_H = $ (xwininfo -root | sed -n  's / ^ Высота: \ (. * \) $ / \ 1 / p') NAME = "$ 1" wmctrl -xlG |  awk -v NAME = "$ NAME" '$ 7 == NAME {print $ 1}' |  при чтении WINS;  do wmctrl -ir "$ WINS" -e "0,0,0, $ SCREEN_W, $ SCREEN_H";  done exit 0  

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

0
ответ дан 7 August 2018 в 21:51

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

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

  $ wmctrl -r 'OMG!  Ubuntu!  |  wmctrl - Chromium '-t 2 #, где бы он ни находился, переместите его на 2 $ wmctrl -r 0x0482a380 -t 2 # то же самое  
1
ответ дан 7 August 2018 в 21:51

Попробуйте:

  wmctrl -r "имя окна (или любая строка в заголовке)" -t `wmctrl -d |  grep "имя рабочего пространства" |  cut -d "" -f1`  

позвольте мне объяснить: в помощи wmctrl показано

  -r & lt; WIN & gt;  -t & lt; DESK & gt;  Переместите окно на указанный рабочий стол.  & Lt; & СТОЛ GT;  Номер рабочего стола.  Настольные компьютеры подсчитываются с нуля.  & Л; WIN & GT;  Этот аргумент указывает окно.  По умолчанию интерпретируется как строка.  Строка сопоставляется с названиями окон и используется первое совпадающее окно.  Соответствие не чувствительно к регистру, и строка может отображаться в любой позиции заголовка.  Параметр -i может использоваться для интерпретации аргумента как числового идентификатора окна, представленного как десятичное число.  Если он начинается с «0x», он будет интерпретироваться как шестнадцатеричное число.   

wmctrl -d может отображать все рабочие области, на моем компьютере теперь отображается следующее:

 0 - DG: 1600x900 VP: N  / A WA: 0,0 1600x868 код 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N / A WA: 0,01600x868 research 

* означает текущую рабочую область

BTW, wmctrl -l , чтобы перечислить все окна (которые вы уже знаете), на моем компьютере теперь они:

  0x05400008 1 пользователь-LinuxMint Terminal 0x03a0008e 0 user-LinuxMint Mozilla Firefox 

, так как «DESK» должен быть числом, я использую grep «имя рабочего пространства» | 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
ответ дан 7 August 2018 в 21: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 , как будто вы не переносите никаких окон.

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

1
ответ дан 10 August 2018 в 10:06

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

Пример

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

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

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

Например:

  ./ wmov.sh mov «Google Chrome» 3 # отправляет  Chrome на рабочий стол 3 (внизу слева) ./mov.sh mov Skype справа # отправляет Skype на рабочий стол справа от # текущего рабочего стола (если есть)  

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

3
ответ дан 10 August 2018 в 10:06

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

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

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

  wmctrl -r «Chromium» -t 1  

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

  $ wmctrl -l 0x03e00189 0 имя хоста Задайте Ubuntu - Chromium $ wmctrl -i -r 0x03e00189 -t 2  

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

11
ответ дан 10 August 2018 в 10:06

Попробуйте:

  wmctrl -r "имя окна (или любая строка в заголовке)" -t `wmctrl -d |  grep "имя рабочего пространства" |  cut -d "" -f1`  

позвольте мне объяснить: в помощи wmctrl показано

  -r & lt; WIN & gt;  -t & lt; DESK & gt;  Переместите окно на указанный рабочий стол.  & Lt; & СТОЛ GT;  Номер рабочего стола.  Настольные компьютеры подсчитываются с нуля.  & Л; WIN & GT;  Этот аргумент указывает окно.  По умолчанию интерпретируется как строка.  Строка сопоставляется с названиями окон и используется первое совпадающее окно.  Соответствие не чувствительно к регистру, и строка может отображаться в любой позиции заголовка.  Параметр -i может использоваться для интерпретации аргумента как числового идентификатора окна, представленного как десятичное число.  Если он начинается с «0x», он будет интерпретироваться как шестнадцатеричное число.   

wmctrl -d может отображать все рабочие области, на моем компьютере теперь отображается следующее:

 0 - DG: 1600x900 VP: N  / A WA: 0,0 1600x868 код 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N / A WA: 0,01600x868 research 

* означает текущую рабочую область

BTW, wmctrl -l , чтобы перечислить все окна (которые вы уже знаете), на моем компьютере теперь они:

  0x05400008 1 пользователь-LinuxMint Terminal 0x03a0008e 0 user-LinuxMint Mozilla Firefox 

, так как «DESK» должен быть числом, я использую grep «имя рабочего пространства» | 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
ответ дан 10 August 2018 в 10:06

Изменив бит скрипта, который он дал в качестве решения этого вопроса , следующее «приносит» данное окно в текущее рабочее пространство (в compiz): ​​

  #! / bin / bash SCREEN_W = $ (xwininfo -root | sed -n 's / ^ Ширина: \ (. * \) $ / \ 1 / p') SCREEN_H = $ (xwininfo -root | sed -n  's / ^ Высота: \ (. * \) $ / \ 1 / p') NAME = "$ 1" wmctrl -xlG |  awk -v NAME = "$ NAME" '$ 7 == NAME {print $ 1}' |  при чтении WINS;  do wmctrl -ir "$ WINS" -e "0,0,0, $ SCREEN_W, $ SCREEN_H";  done exit 0  

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

0
ответ дан 10 August 2018 в 10:06

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

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

  $ wmctrl -r 'OMG!  Ubuntu!  |  wmctrl - Chromium '-t 2 #, где бы он ни находился, переместите его на 2 $ wmctrl -r 0x0482a380 -t 2 # то же самое  
1
ответ дан 10 August 2018 в 10:06

Это можно сделать с помощью 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
ответ дан 13 August 2018 в 16:26

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

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

Например:

  ./ wmov.sh mov «Google Chrome» 3 # отправляет  Chrome на рабочий стол 3 (внизу слева) ./mov.sh mov Skype справа # отправляет Skype на рабочий стол справа от # текущего рабочего стола (если есть)  

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

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

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

Пример

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

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

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

  $ wmctrl -r 'OMG!  Ubuntu!  |  wmctrl - Chromium '-t 2 #, где бы он ни находился, переместите его на 2 $ wmctrl -r 0x0482a380 -t 2 # то же самое  
1
ответ дан 13 August 2018 в 16:26
  • 1
    Другой способ получить идентификаторы окон - запустить xwininfo , а затем щелкнуть по окну, идентификатор которого вы хотите. – geekosaur 21 March 2011 в 21:56
  • 2
    Я попробовал ваш метод, но это не повлияло на рассматриваемое окно. – Registered User 21 March 2011 в 22:37
  • 3
    @Registered User: какой оконный менеджер? ( wmctrl -m ) – 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 "имя окна (или любая строка в заголовке)" -t `wmctrl -d |  grep "имя рабочего пространства" |  cut -d "" -f1`  

позвольте мне объяснить: в помощи wmctrl показано

  -r & lt; WIN & gt;  -t & lt; DESK & gt;  Переместите окно на указанный рабочий стол.  & Lt; & СТОЛ GT;  Номер рабочего стола.  Настольные компьютеры подсчитываются с нуля.  & Л; WIN & GT;  Этот аргумент указывает окно.  По умолчанию интерпретируется как строка.  Строка сопоставляется с названиями окон и используется первое совпадающее окно.  Соответствие не чувствительно к регистру, и строка может отображаться в любой позиции заголовка.  Параметр -i может использоваться для интерпретации аргумента как числового идентификатора окна, представленного как десятичное число.  Если он начинается с «0x», он будет интерпретироваться как шестнадцатеричное число.   

wmctrl -d может отображать все рабочие области, на моем компьютере теперь отображается следующее:

 0 - DG: 1600x900 VP: N  / A WA: 0,0 1600x868 код 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 play 2 - DG: 1600x900 VP: N / A WA: 0,01600x868 research 

* означает текущую рабочую область

BTW, wmctrl -l , чтобы перечислить все окна (которые вы уже знаете), на моем компьютере теперь они:

  0x05400008 1 пользователь-LinuxMint Terminal 0x03a0008e 0 user-LinuxMint Mozilla Firefox 

, так как «DESK» должен быть числом, я использую grep «имя рабочего пространства» | 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
ответ дан 13 August 2018 в 16:26

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

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

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

  wmctrl -r «Chromium» -t 1  

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

  $ wmctrl -l 0x03e00189 0 имя хоста Задайте Ubuntu - Chromium $ wmctrl -i -r 0x03e00189 -t 2  

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

11
ответ дан 13 August 2018 в 16:26
  • 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

Изменив бит скрипта, который он дал в качестве решения этого вопроса , следующее «приносит» данное окно в текущее рабочее пространство (в compiz): ​​

  #! / bin / bash SCREEN_W = $ (xwininfo -root | sed -n 's / ^ Ширина: \ (. * \) $ / \ 1 / p') SCREEN_H = $ (xwininfo -root | sed -n  's / ^ Высота: \ (. * \) $ / \ 1 / p') NAME = "$ 1" wmctrl -xlG |  awk -v NAME = "$ NAME" '$ 7 == NAME {print $ 1}' |  при чтении WINS;  do wmctrl -ir "$ WINS" -e "0,0,0, $ SCREEN_W, $ SCREEN_H";  done exit 0  

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

0
ответ дан 13 August 2018 в 16:26

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

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