Как мне сценарий, чтобы открыть набор программ, каждый на определенном рабочем пространстве?

35

Я некоторое время оглядывался по сторонам и не мог найти ответ на мою следующую проблему:

У меня есть шесть рабочих столов на Ubuntu 12.04 с Unity. При запуске каждое утро я выполняю процедуру открытия одних и тех же пяти или шести программ. Я открываю каждый на определенном рабочем пространстве. Я бы хотел, чтобы это было автоматизировано. Есть ли способ, чтобы сценарий или настроить это?

Дополнительный вопрос : чтобы еще больше усложнить ситуацию, я запускаю два экрана в режиме двойного просмотра. Мне действительно нужно запускать каждую программу на определенном экране, желательно на полном экране.

Jahn
источник
1
Вы можете найти это полезным. Он указывает на wmctrl, но я им не пользовался: movingtofreedom.org/2010/08/10/…
RobotHumans
это может быть полезно. askubuntu.com/questions/87002/…
Suhaib
1
Если исходить из очень простого представления, есть ли причина, по которой вы не можете оставить свой компьютер в режиме ожидания, когда уходите? Я думаю, что это будет быстрое решение для вас, пока вы найдете более постоянное решение ...
Adeyfk
Когда вы говорите «рабочий стол», вы имеете в виду рабочее пространство?
p0llard
Действия KDE могут быть в состоянии сделать это.
Механическая улитка

Ответы:

20

Идея jdp407 об использовании compizconfig будет связывать конкретное приложение с определенной рабочей областью, чтобы КАЖДЫЙ РАЗ, когда приложение открывалось, помещалось в соответствующую рабочую область. Если это не нужно, вы можете сделать следующее:

1) Установить wmctrl

sudo apt-get install wmctrl

2) Создайте файл со следующим содержимым и сделайте его исполняемым

#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing

3) Вызовите этот скрипт из .xsessionrcвашего домашнего каталога [если вам, возможно, придется создать этот файл], чтобы автоматизировать процесс при каждом входе в систему. Или вы можете просто позвонить из терминала, когда это необходимо. РЕДАКТИРОВАТЬ: поместите его в «Startup Applications», а не .xsessionrc. .xsessionrc будет выполняться даже до завершения загрузки среды рабочего стола.


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


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

wmctrl -r 'Firefox' -t 1

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


Открытие приложений в полноэкранном режиме:

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

wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz

Это максимизирует мое (уже существующее) окно терминала.

wmctrl -r 'prasanth@nb37' -b add,fullscreen

Это отправляет окно в полноэкранный режим.


Пройдите через wmctrlсправочную страницу. Вы можете найти использование для большей его функциональности.

S Prasanth
источник
1
Очевидно, что использование wmctrl для выбора рабочей области не работает в дистрибутивах после Lynx. Опция '-s' может быть установлена ​​только на '0', иначе она выдаст ошибку или ничего не сделает. Источник: movingtofreedom.org/2010/08/10/…
p0llard
Я использую 12.04 с unity2d (без визуальных эффектов), и это работает для меня. Похоже, он не будет работать с включенными визуальными эффектами.
S Prasanth
wmctrlотлично работает здесь (LXDE и XFCE, композитинг через xcompgr включен)
Glutanimate,
Работает для меня в Mint 14 с корицей, спасибо!
k102
В Ubuntu 14.04 используйте wmctrl -o X,Yдля перехода к определенному окну просмотра. Если у вас есть несколько мониторов, вы можете перемещать приложения на другой монитор с помощью wmctrl -r "App name" -e G,X,Y,W,H. Прекрасно работает с единством визуальных эффектов.
Nate
10

Здесь есть две «проблемы»: первая заключается в открытии определенного набора программ при входе в систему; вторая включает их открытие в определенных рабочих пространствах. Я буду иметь дело с обоими по отдельности:

  1. Создание пользовательского сеанса X

    Это довольно легко сделать. Вам просто нужно создать X Session Script, а затем указать LightDM использовать его. Вам нужно будет знать команды для запуска нужных вам программ из терминала.

    1. Откройте Терминал.
    2. Введите touch ~/.customxsessionи нажмите ввод.
    3. Введите gedit ~/.customxsessionи нажмите ввод.
    4. Теперь у вас будет открытый текстовый редактор с пустым файлом.
    5. Вам нужно определить X Session в этом файле. Я создал образец файла «Заполнить пустые поля» внизу ответа. Я думаю, что Ubuntu использует gnome-session в качестве оконного менеджера, но я, возможно, ошибаюсь. Я не могу проверить это в данный момент (ноутбук сломан), поэтому, если он не работает должным образом (например, загружает Gnome вместо Unity), вам может потребоваться провести некоторое исследование.
    6. Сохраните файл и закройте Gedit.
    7. Введите touch /usr/share/xsessions/multi.desktopи нажмите ввод.
    8. Введите gedit /usr/share/xsessions/multi.desktopи нажмите ввод.
    9. Теперь у вас будет открытый текстовый редактор с пустым файлом.
    10. Скопируйте и вставьте код внизу ответа (с пометкой «/usr/share/xsessions/multi.desktop:») в Gedit.
    11. Сохраните файл и закройте Gedit.
    12. Перезагружать. Когда вы попадете на экран входа в систему, если вы посмотрите на доступные сеансы (щелкните маленький логотип Ubuntu рядом с вашим именем пользователя), вы увидите один с именем Multi-Session. Если вы войдете в него, программы, которые вы вставите в X Session Script, должны открыться автоматически.
  2. Назначение программ рабочим областям

    Это также довольно просто, но для этого требуется дополнительное программное обеспечение, не установленное в Ubuntu по умолчанию.

    1. Установите compizconfig-settings-manager (вы можете использовать Центр программного обеспечения или просто запустить sudo apt-get install compizconfig-settings-managerв Терминале).
    2. Откройте настройки CompizConfig из Dash.
    3. Откройте плагин «Поместить Windows» (он находится в разделе «Управление окнами»).
    4. Нажмите «Создать» в разделе «Windows с фиксированным окном просмотра».
    5. Нажмите значок «Плюс».
    6. Установите «Тип» в качестве «Заголовка окна» и введите заголовок окна одной из программ в поле «Значение». Убедитесь, что «Отношение» установлено на «И», и нажмите «Добавить».
    7. Установите рабочее пространство, введя числа в поля «X» и «Y». Если у вас есть 4 рабочих пространства для «X», «1» остается слева, «2» - справа, а «Y» - «1» сверху и «2» снизу. Поскольку у вас есть 6 рабочих пространств, в зависимости от того, как все настроено, установка «Y» в «3» выберет нижнюю строку, а установка «X» в «3» - 3-й столбец.
    8. Повторите шаги 4-7 для остальных программ, которым вы хотите назначить рабочее пространство.
    9. Закройте настройки CompizConfig.
  3. Вход в систему

    Когда вы входите в систему, вы должны сказать Ubuntu, что хотите использовать свой пользовательский сеанс X.

    1. Перезагружать.
    2. Когда вы попадете на экран входа в систему, если вы посмотрите на доступные сеансы (щелкните маленький логотип Ubuntu рядом с вашим именем пользователя), вы увидите один с именем Multi-Session. Если вы войдете в нее, программы, которые вы вставите в X Session Script, должны открыться автоматически и быть назначены выбранным вами рабочим областям.
  4. Проблемы

    Довольно многое могло пойти не так, если вы допустили небольшую ошибку или я допустил ошибку при написании этого ответа. Если что-то пойдет не так, убедитесь, что вы следовали инструкциям к письму, и исправьте что-нибудь, если вы этого не сделали. Если проблема не устранена, оставьте комментарий.

~ / .Customxsession:

#!/usr/bin/env bash
program-command-1 &
program-command-2 &
program-command-3 &
program-command-4 &
program-command-5 &
program-command-6 &
exec gnome-session

/usr/share/xsessions/multi.desktop:

[Desktop Entry]
Name=Multi-Session
Exec=/home/your-username/.customxsession
p0llard
источник
1

Добавьте необходимые приложения в программу StarupApplications, а затем добавьте и этот скрипт. Это мой сценарий: ManageWorkSpaces.sh

echo "Jeril"
wmctrl -r NetBeans IDE 7.1.1 -t 0
wmctrl -r /bin/bash -t 1
wmctrl -r Google Chrome -t 2
wmctrl -r jerilkuruvila - Skype™ -t 3

// сосредоточиться на терминале

wmctrl -a NetBeans IDE 7.1.1   -t 0 

Но я понятия не имею об обработке 2 дисплеев.

jkuruvila
источник
Привет, Джерил! Добро пожаловать в Спросите Ubuntu! Ваше решение не работает для меня. Если я бегу wmctrl -d, у меня только один «рабочий стол». Вы проверяли это на Unity в Ubuntu 12.10?
Flimm
Привет Flimm, я использую wmctrl -r, у меня есть 4 рабочих пространства. Моя версия Ubuntu 12.04
jkuruvila