як перенести програми з робочої області 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.

Тож як правильно ним користуватися, в чому помилка вище?

UPDATE2
Я спробував

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 (у заголовку якого є "Chromium"), ви повинні мати можливість використовувати wmctrl -r "Chromium" -t 1як skyblue згадування у своїй відповіді, якщо ви використовуєте такий сумісний менеджер вікон, як 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)

Це справді працює так, як описано в дописі Десгуа. Це також можливість відправки Windows на інші робочі місця.


Мені подобається це рішення, оскільки воно може ідентифікувати вікна з частковими відповідностями імені вікна, особливо корисно, коли програми змінюють частину свого імені, залежно від контексту. Викликати вікна по імені простіше, ніж шукати їх 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 . Там ви знайдете кілька прикладів. Подивіться на плагін "put".

Приклад

./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: Не застосовується Режим "показ робочого столу" менеджера вікон: 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 play 
2 - DG: 1600x900 VP: N / A WA: 0,01600x868 дослідження

* означає поточну робочу область

BTW, 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.