Возможно ли переместить все окна (или все не свернутые окна) из одного рабочего пространства в другое?
Я знаю, что могу переместить одно окно в другое рабочее пространство с помощью Shift+ Ctrl+ Alt+ arrow, но оно переместит только это одно сфокусированное окно.
unity
compiz
workspaces
viewports
betatester07
источник
источник
Ответы:
Unity: что такое Viewports?
Ubuntu Unity использует окна просмотра - в основном систему координат (с координатой 0,0 в верхнем левом углу), где один гигантский рабочий стол разделен на куски, которые соответствуют вашему разрешению экрана. Координаты растут в цене при перемещении вправо и вниз.
Система координат является относительной. Если мой текущий видовой экран находится в верхнем левом углу, все относительно этого видового экрана будет иметь положительные значения в приращениях ширины и высоты. Например, если мой текущий видовой экран находится в крайнем левом верхнем углу, окно firefox в верхней средней рабочей области, которое вы видите выше, расположено со значением x 1366 и значением y 0 относительно самого верхнего левого окна просмотра. Если мой активный видовой экран находится в верхнем среднем, окно терминала в верхнем левом видовом окне расположено со значением x -1327 60. Это ключевой вопрос
xdotool
, потомуxdotool
что не работает с отрицательными числами.Также обратите внимание, что верхний левый угол вашего текущего окна просмотра всегда будет приниматься xdotool в качестве координат 0 0. Это означает, что мы можем только двигать вещи вправо и вниз.
Заставить xdotool работать на Unity
Теперь мы знаем, что
xdotool
можем перемещать окна только относительно нашего верхнего левого угла (т.е. вы всегда можете перемещать окно вниз и вправо, но никогда не вверх и влево). Как мы заставляем это работать на единство. Ну, основная идея была быРешение для сценариев
Сценарий ниже выполняет в точности процедуру, описанную выше. Он может быть вызван либо с
-v
флагом, чтобы вручную указать координаты, либо вы можете использовать-g
флаг, чтобы вызвать диалог GUI.-f
флаг скажет сценарию также переключить область просмотра; если этот флаг не используется - вы останетесь в текущем окне просмотра, и только окна будут перемещатьсяПолучение сценария
С этого поста можно скопировать исходный код напрямую или через github, выполнив следующие действия:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
Файл скрипта будет
/opt/sergrep/move_viewport_windows.sh
Чтобы связать скрипт с ярлыком, обратитесь к разделу Как связать .sh файлы с комбинацией клавиш?
Обратите внимание, что
wmctrl
иxdotool
необходимы для правильной работы этого скрипта. Вы можете установить их через sudo apt-get install xdotool и wmctrlИсходный код
демонстрация
Веб-запись сценария в действии:
https://www.youtube.com/watch?v=cJMlC41CWWo
вопросы
Из-за
grid
плагина Unity, который отвечает за привязку окна, скрипт не может перемещать развернутые окна или окна с привязкой вправо / влево. Будет предпринята попытка добавить моментальный сброс и сброс этого плагина, чтобы скрипт работал со всеми окнами, но поскольку сброс и сброс имеет задержку по времени, он может быть заброшен как идея. Если вы хотите, чтобы скрипт работал со всеми окнами, установитеunity-tweak-tool
и снимите привязку окна в параметрах диспетчера окон.источник
Среды рабочего стола не на базе Compiz (XFCE, LXDE, GNOME, KDE ...)
Вы можете использовать комбинацию
wmctrl
иxdotool
для этого. Сначала убедитесь, что установлены эти две утилиты:С удовлетворенными зависимостями вы сможете использовать следующую однострочную оболочку для перемещения всех окон текущего рабочего стола в другое:
Краткое описание используемых команд:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Вывести список всех окон, отфильтровать те, которых нет в текущей рабочей области, и извлечь их идентификатор окна
wmctrl -i -t 2 -r "$i"
Переместить окно с идентификатором окна
$i
в рабочее пространство 2.все это упаковано в простой
while read ... do; done
цикл, который перебирает все окна на текущем рабочем столеСреды рабочего стола на базе Compiz (например, Unity)
Поиск решения для настольных сред, таких как Unity, затруднен тем, что Compiz (оконный менеджер Unity) не использует десктопы в традиционном смысле .
источник