Как получить разные Unity Launcher с разными значками на каждом рабочем пространстве?

Я прочитал различные ответы на наличие отдельных папок на рабочем столе в каждом рабочем пространстве, используя Screenlets, devilspie или CCSM ... но это не ответ на мой вопрос. Я установил 14.04 LTS несколько дней назад и добился большого успеха, запустив большинство своих приложений и несколько новых. Я хотел бы иметь 4 отдельных рабочих пространства, каждое из которых имеет несколько разных значков для сред, которые я запускаю. Например,

  • Рабочая область 1 - для научных и математических приложений
  • Рабочая область 2 - для музыкальных инструментов
  • Рабочая область 3 - для электронных схем и симуляторов
  • Рабочая область 4 - для просмотра веб-страниц и общих вычислений

Подумайте о планшете Android, где каждый экран может содержать отдельные значки.

Должно быть очевидно, как это сделать, но я не могу найти ответ. Мне 4 дня на Ubuntu, поэтому, пожалуйста, не думайте, что я знаю, что делаю!

20
задан 12 April 2015 в 14:30

1 ответ

Установка другого Средства запуска Единицы на рабочую область:


1.enter image description here 2.enter image description here 3.enter image description here 4. enter image description here

Решение ниже делает легко возможным иметь другой набор значков средства запуска на рабочую область, неважно, сколько рабочих областей Вы имеете.

Установка включает две части:

  1. (Одна) комбинация сочетания клавиш, чтобы "помнить" набор значков средства запуска для текущей рабочей области.

  2. Сценарий для выполнения в фоновом режиме, отслеживание того, что является текущей рабочей областью и установкой соответствующего Средства запуска Единицы. Это действует каждый раз, когда пользователь переключает рабочую область.

Как это работает

Включены два маленьких сценария:

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

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

Именно.

Как настроить

  1. Потребности сценария wmctrl быть установленным:

    sudo apt-get install wmctrl
    
  2. Создайте каталог, в котором будут сохранены оба сценария. Это - importants, что оба сценария держатся вместе в одном каталоге, так как они совместно используют функциональность, и каждый импортирует из другого. По той же причине важно, чтобы Вы назвали их точно, как обозначено ниже.

  3. Скопируйте каждый из сценариев ниже в (различный) пустой файл, сохраните их в каталог (созданный в 2.), точно названный как:

    set_workspace.py

    #!/usr/bin/env python3
    import subprocess    
    import os
    
    workspace_data = os.environ["HOME"]+"/.launcher_data_"
    key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
    
    def get_res():
        # get resolution
        xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
        pos = xr.index("current")
        return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
    
    def current():
        # get the current viewport
        res = get_res()
        vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
        dt = [int(n) for n in vp_data[3].split("x")]
        cols = int(dt[0]/res[0])
        curr_vpdata = [int(n) for n in vp_data[5].split(",")]
        curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
        return str(curr_col+curr_row*cols)
    
    def remember_current():  
        currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
        f = workspace_data+current()
        open(f, "w").write(currlauncher)
    
    if __name__ == "__main__":
        remember_current()
    

    launcher_perworkspace.py

    #!/usr/bin/env python3
    import subprocess
    import set_workspace
    import time
    
    workspace_data = set_workspace.workspace_data
    key = set_workspace.key
    
    def check_datafile(desktop):
        f = workspace_data+str(desktop)
        try:
            new_launcher = open(f).read()
            command = key[1]+key[2]+' "'+str(new_launcher)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
        except FileNotFoundError:
            pass
    
    curr_dt1 = set_workspace.current()
    check_datafile(curr_dt1)
    
    while True:
        time.sleep(1)
        curr_dt2 = set_workspace.current()
        if curr_dt2 != curr_dt1:
            check_datafile(curr_dt2)
        curr_dt1 = curr_dt2
    
  4. Добавьте первый сценарий (set_workspace.py) к комбинации сочетания клавиш по Вашему выбору: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

    python3 /path/to/set_workspace.py
    
  5. Выполните сочетание клавиш и посмотрите если файл, как: .launcher_data_3 создается в Вашем корневом каталоге. Необходимо будет, вероятно, нажать Ctrl+H для создания файла видимым (файлы, начиная с a . невидимы по умолчанию).

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

  6. Вы практически сделаны теперь. Тестовый прогон фоновый сценарий с командой (из окна терминала, поддерживайте его в рабочем состоянии):

    python3 /path/to/launcher_perworkspace.py
    

    Если все хорошо работает, и Ваши переключатели средства запуска на рабочую область, добавьте следующую команду к своим приложениям Запуска: Тире> Приложения Запуска> Добавляет:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
    

Примечания

  1. Если Вы хотите изменить набор значков средства запуска для определенной рабочей области, просто перейти к рабочей области, добавьте/удалите значки, как Вы любите и нажимаете свою клавишу combinbation (никакая потребность перезапустить фоновый сценарий).
  2. Из комментария (комментариев) я получаю чувство, что существует некоторое недоразумение на ярлыке для запоминания текущего Средства запуска за текущую рабочую область. Вам только нужно одно сочетание клавиш для "сохранения" текущего средства запуска для текущей рабочей области. Это будет работать точно то же, какая рабочая область Вы идете. Сам сценарий определит то, что является текущей рабочей областью.

Править

Из Вашего комментария я понимаю, что Вы не уверены для запущения скрипта, и Вы боитесь, что испортите свое текущее средство запуска.

Я вполне уверен, который является слишком много (или слишком мало :)) уважение к тому, что делает сценарий. Однако можно просто резервировать yor текущее Средство запуска Единицы с командой:

printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output

Это создаст файл ~/launcher_output, содержа полную команду для восстановления Средства запуска Единицы к начальной ситуации. В случае крайней необходимости просто скопируйте содержание файла и вставьте его в терминале.

Но снова, действительно маловероятно, что Вы испортите свое средство запуска, если Вы не измените сценарий вручную.


ВАЖНОЕ РЕДАКТИРОВАНИЕ (2)

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

Я попробовал это в "версии 1" сценария, но всегда "встраивание" этих двух проверок средства запуска между двумя проверками рабочей области оказалось приемом для предотвращения нежелательного поведения (сохраняющий неправильные данные) при перемещении быстро через рабочие области.

Как использовать

  1. Как первая версия, этот сценарий использование wmctrl:

    склонные sudo - получают установку wmctrl

  2. Скопируйте сценарий в пустой файл, сохраните его как launcher_toworkspace.py

  3. Выполните его с командой:

    python3 /path/to/launcher_toworkspace.py
    
  4. Если это работает как ожидалось, добавьте следующую команду к своим Приложениям Запуска:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
    

Сценарий

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"

key = [
    "gsettings get ",
    "gsettings set ",
    "com.canonical.Unity.Launcher favorites",
    ]

def get_launcher():
    return subprocess.check_output(
        ["/bin/bash", "-c", key[0]+key[2]]
        ).decode("utf-8").strip()

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

curr_ws1 = current()
currlauncher1 = get_launcher()

while True:
    time.sleep(1)
    currlauncher2 = get_launcher()
    curr_ws2 = current()
    datafile = workspace_data+curr_ws2
    if curr_ws2 == curr_ws1:
        if currlauncher2 != currlauncher1:
            open(datafile, "wt").write(currlauncher2)
    else:
        if not os.path.exists(datafile):
            open(datafile, "wt").write(currlauncher2)
        else:
            curr_set = open(datafile).read()
            command = key[1]+key[2]+' "'+str(curr_set)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
    curr_ws1 = curr_ws2
    currlauncher1 = get_launcher()

Примечание:

Если Вы настраиваете свои рабочие области с предыдущей версией сценария, они должны также работать на эту версию.

PPA

Согласно 23.04.2015, деликатный вопрос Dennis J и поддержка Parto, имеют вывод к созданию a ppa для сценария, покрытого на webupd8, включая GUI для управления им.

ppa:vlijm/lswitcher

Для установки его работайте:

sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher

enter image description here

С тех пор теперь, это упаковывается для Trusty & Utopic. Я добавлю других после тестирования. Я также добавлю a .deb установщик, но я предложил бы использовать ppa, так как обычно такого рода вещи обновляются время от времени.

Так как местоположение данных области просмотра изменилось от ~/ кому: ~/.config/lswitcher, необходимо будет настроить Средство запуска Единицы снова при использовании предыдущего сценария.

24
ответ дан 12 April 2015 в 14:30

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

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