Итак, у меня есть 8 виртуальных рабочих столов в Unity (с Compiz), потому что у меня есть много проектов, над которыми я работаю одновременно.
Проблема в том, что каждый раз, когда мне нужно перезагрузить или случайно закрыть Chrome (который составляет большую часть окон, которые мне нужны для работы), я должен вручную открыть эти окна, а затем настроить их (открыть файлы, перейти к нужному URL и т. д.).
Как бы вы написали сценарий, который сделает все это для меня? То есть: 1) Откройте окна 2) Поместите их в правильные координаты на правильных виртуальных экранах
(1) очевидно, для Google Chrome вы просто запускаете «google-chrome». Но тогда как вы положите его в нужном месте? (2)
Или есть сценарий / программное обеспечение, которое уже существует для меня?
wmctrl
, как программное обеспечение для управления окнами через скрипт или терминал. Но что касается перезапуска окна, это может быть чем-то более сложнымОтветы:
Это можно сделать очень хорошо, но вам нужно немного разбираться в Unity / viewports. Я надеюсь, что история ниже понятна, если нет, пожалуйста, оставьте комментарий.
Сценарий ниже может быть использован для открытия окна любого приложения в любом из ваших окон просмотра, в любой позиции, если вы запускаете его с правильными аргументами. Скрипт является отредактированной версией этого , но теперь он готов разместить окна на виртуальном рабочем столе .
1. Понимание области просмотра и координат окна
Рабочие пространства в Unity
В Unity, в отличие от других оконных менеджеров, у вас есть только одно рабочее пространство, которое разделено на области просмотра. В вашем случае ваше рабочее пространство разделено на восемь видов.
Как определяется положение окон
Положение окна, как вывод команды:
описывается как позиция относительно левого верхнего угла текущего окна просмотра :
Поэтому, если вы находитесь в окне просмотра
1
:окно в окне просмотра 2 может быть расположено, например, 1700 (по оси x) x 500 (по оси y)
(мой экран 1680x1050)
Однако, если вы находитесь в окне просмотра 6:
то же самое окно будет расположено на 20 (x), -550 (y)
Правильное использование этих координат важно для запуска сценария с правильными аргументами, как описано ниже:
2. Как использовать скрипт
Сценарий ниже может быть использован для размещения нового окна приложения в вашей виртуальной (охватывающей) рабочей области.
Убедитесь, что
wmctrl
установлено:Скопируйте приведенный ниже скрипт в пустой файл, сохраните его как
setwindow
(без расширения) в~/bin
. Создайте каталог, если он еще не существует. Сделайте скрипт исполняемым .~/bin
, либо выполните команду,source ~/.profile
либо выйдите из системы, чтобы сделать каталог доступным в$PATH
.Тестовый запуск команды:
например
Окно Gedit должно отображаться в текущем окне просмотра.
Ноты:
gedit
окна в моей системе, например, ок. 470 пикселей<x_position>
для размещения окон слева от текущего видового экрана (ов)<y_position>
чтобы разместить окна над текущим окном просмотраЧтобы одновременно открывать новые окна в разных окнах просмотра, вы можете просто объединять команды. Если посмотреть на настройки окна просмотра в примере «Длинная история», если я нахожусь в окне просмотра 1, я могу открыть окна gedit в окнах просмотра 1, 2, 3 и 4 с помощью команды:
Сценарий
РЕДАКТИРОВАТЬ: ленивая версия
В случае, если вы предпочитаете просто ввести координаты и размер, просто, как если бы вы открыли окно в текущем окне просмотра и задали целевой порт просмотра в качестве аргумента (без необходимости что-либо вычислять), используйте версию ниже ...
Если вы установите его как первую версию скрипта, вы можете запустить его с помощью команды:
Пример: открыть
Google-Chrome
окно, расположенное, по20, 20
размеру300x300
, в окне просмотра5
:Настройка почти такая же, как и в первой версии скрипта.
Обратите внимание, что этот скрипт также работает правильно, только если определенное окно (позиция / размер) полностью помещается в целевой области просмотра.
Сценарий:
Открытие окна приложения с аргументами
Чтобы закончить работу, полностью отвечая на ваш вопрос:
Если вы запустите скрипт как, например:
это откроет окно по умолчанию на целевом рабочем столе (ах).
Однако в последней версии скрипта вы можете добавить дополнительный аргумент для открытия окна приложения, например
url
:например:
Если (дополнительный) аргумент содержит пробелы, используйте кавычки. Приведенный выше пример откроет
google-chrome
окно в окне просмотра 3, открываяurl
http://askubuntu.com
.Вы можете объединить команды, чтобы открыть несколько окон / URL-адресов в разных рабочих пространствах в одной команде, например:
источник
Это расширяет великолепный ответ @Jacob Vlijim, приведенный выше, с немного измененным
setwindow
сценарием:Описание изменений:
python3
кpython
(просто личных предпочтений)sys.argv
чтобыargparse
для интерфейса командной строки лучшеwhile
цикл от 0,5 до 1 секундыxrandr
доверияПРИМЕЧАНИЕ. Это слегка улучшенная версия, которую я написал для личного использования в Debian Jessie LXDE. Ваши результаты могут отличаться.
источник
Для тех, кто заинтересован, я реализовал Desktopen: github.com/snitko/desktopen
Это позволяет вам написать скрипт для открытия окон в разных окнах просмотра и отображать в очень дружественной манере.
источник