Як отримати інший Unity Launcher з різними піктограмами на кожному робочому просторі?


20

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

  • Робоча область 1 - присвячена наукам та математиці
  • Робоча область 2 - присвячена музичним інструментам
  • Робоча область 3 - для електронних схем та моделювання
  • Робоча область 4 - для веб-перегляду та загальних обчислень

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

Має бути очевидним, як це зробити, але я не можу знайти відповіді. Мені 4 дні в Ubuntu, тому, будь ласка, не припускайте, що я знаю, що я роблю!


Ви маєте на увазі інший набір іконок запуску на робочу область? Yummy Мені це подобається, але я маю бігти, буду працювати над цим завтра, якщо це ти маєш на увазі. Будь ласка, дай мені знати.
Яків Влійм

Так, це Яків. Існують спеціальні засоби (наприклад, LTspice) для моделювання схем, які не мають значення для музики.
Dennis J

Можна зробити без сумніву. Напевно, завтра чи в неділю :).
Яків Влійм

Дякую, Яків. Початок дня, тому я спробую. Це звучить точно так, як я попросив !!! Я ввійду в це і звітую.
Dennis J

Якове, я ще цього не починав. Перш ніж почати, я хочу зробити резервне зображення. Я не впевнений, що резервні копії в системних налаштуваннях відновлять весь розділ. Досліджуючи Clonezilla, це виглядає як хороший інструмент для створення / відновлення зображення. Таким чином, якщо щось піде не так, я можу повернутися до того, як зіпсував це. На цьому тижні на дорозі є новий привід 1 ТБ. Мені потрібно використовувати Clonezilla для переміщення системи до неї. Сценарії виглядають так, що я можу дотримуватись їх, і я звітую про це, як тільки почну. Дякую за подальші дії, я сподіваюся, що і інші оцінять те, що ви зробили.
Dennis J

Відповіді:


24

Налаштування іншого Unity Launcher для робочої області:


1. введіть тут опис зображення 2. введіть тут опис зображення 3. введіть тут опис зображення 4. введіть тут опис зображення

Наведене нижче рішення дозволяє легко мати інший набір піктограм запуску для робочої області, незалежно від кількості робочих просторів.

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

  1. Комбінація клавіш швидкого доступу (одна) для "запам'ятовування" набору іконок запуску для поточної робочої області.

  2. Сценарій для запуску у фоновому режимі, відстежуючи те, що є поточним робочим простором, та встановлюючи відповідний запуск Unity Launcher. Він діє, коли користувач перемикає робочу область.

Як це працює

Задіяні два невеликі сценарії:

Перший скрипт робить одну просту річ: він записує вміст поточної пусковий установки в (прихований) файл у вашому домашньому каталозі, з ім'ям (номером) після поточного робочого простору.

Другий сценарій стежить за те , що поточний робочий простір. Якщо є зміна робочої області , скрипт бачить, чи існує відповідний файл даних (запускається) (створений першим сценарієм). Якщо так, то він читає файл і змінює пусковий механізм Unity, як запам'ятовується у файлі.

Це воно.

Як налаштувати

  1. Сценарій потрібно wmctrlвстановити:

    sudo apt-get install wmctrl
    
  2. Створіть каталог, в якому будуть зберігатися обидва сценарії . Важливо, що обидва сценарії зберігаються разом в одному каталозі, оскільки вони поділяють функціональність і один імпортують з іншого. З тієї ж причини важливо, щоб ви назвали їх точно так, як зазначено нижче.

  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щоб зробити файл видимим (файли, починаючи з а ., за замовчуванням невидимі).

    Перейдіть по робочих просторах і повторіть процедуру: встановіть комбінацію піктограм запуску і натисніть комбінацію клавіш, щоб "запам'ятати" набір для цієї конкретної робочої області.

  6. Ви практично зараз готові. Тестово запустіть фоновий скрипт за допомогою команди (з вікна терміналу, нехай працює):

    python3 /path/to/launcher_perworkspace.py
    

    Якщо все працює добре, і ваш пусковий механізм перемикається на робочу область, додайте таку команду до своїх програм запуску: тире> програми запуску> Додати:

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

Примітки

  1. Якщо ви хочете змінити набір піктограм запуску для певної робочої області, просто перейдіть до робочої області, додайте / видаліть значки, як вам подобається, і натисніть клавішу комбінації (не потрібно перезапускати фоновий скрипт).
  2. З коментарів (ив) я відчуваю, що в ярлику є певне непорозуміння, щоб запам'ятати поточний запуск для поточної робочої області. Вам потрібна лише одна комбінація клавіш для "збереження" поточного запуску для поточного робочого простору. Він буде працювати точно так само, незалежно від того, на якій робочій області ви знаходитесь. Сам скрипт визначить, що є поточним робочим простором.

Редагувати

З вашого коментаря я розумію, що ви не впевнені, що запускаєте сценарій (и), і боїтесь, що ви зіпсуєте свій поточний запуск.

Я впевнений, що занадто багато (або занадто мало :)) поваги до того, що робиться сценарій. Однак ви можете просто створити резервну копію поточного Unity Launcher за допомогою команди:

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, що містить повну команду відновити ваш Unity Launcher до початкової ситуації. У випадку надзвичайної ситуації просто скопіюйте вміст файлу та вставте його в термінал.

Але знову ж таки, навряд чи ви зіпсуєте пускову установку, якщо не змінити сценарій вручну.


ВАЖЛИВО ЗМІСТ (2)

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

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

Як користуватись

  1. Як і перша версія, цей сценарій використовує wmctrl:

    sudo apt-get install 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

Відповідно до 2015-04-23, приємне запитання про Деніса Дж та заохочення Парто призвели до створення ppaсценарію для веб-сайту8 , включаючи GUI для управління ним.

ppa:vlijm/lswitcher

Щоб встановити його, запустіть:

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

введіть тут опис зображення

Відтепер він упакований для Trusty & Utopic. Додам інших після тестування. Я також додам .debінсталятор, але я б запропонував використовувати ppa, оскільки зазвичай такі речі оновлюються раз у раз.

Оскільки розташування даних вікна перегляду змінилося з ~/на ~/.config/lswitcher, вам доведеться знову налаштувати свій інструмент запуску Unity, якщо ви використовували попередній скрипт.


Це можливо без використання комбінацій клавіш? Як я візуалізую це, як показано нижче: у робочому просторі один відображається лише набір піктограм; коли я перемикаюсь на робочу область дві, пусковий пристрій порожній, за винятком піктограм тире та сміття - тоді я додаю потрібні піктограми, які зберігаються автоматично. Повторіть для інших робочих просторів. Можливо, ви навіть можете створити для нього графічний інтерфейс - він дасть вам +500, якщо ви змусите його працювати. GUI необов’язковий.
Парто

1
@Parto WOW, ви знаєте, як привернути увагу когось :) Це можливо точно, але знадобиться декілька потоків, щоб він працював безперебійно (спробував це у «моно» сценарії треку). Чекайте відповіді в найближчі кілька днів :).
Яків Влійм

1
Дивовижно. Я буду чекати ... приємного питання, хоча дивуйся, як я про це не думав.
Парто

1
@Parto Треба сказати, що мене вразила ваша щедрість. Я планую працювати над цим і, можливо, створити ppa, включаючи графічний інтерфейс для запуску / зупинки, налаштування тощо. Дякую за натиск! До речі, ваш робочий стіл виглядає чудово!
Яків Влійм

1
У будь-який час. Кожен потребує поштовху час від часу. Крім того, ви мені допомагали і раніше - просто вважайте це подякою. З приводу цього "проекту", КПП було б непогано, оскільки не всі вміють.
Парто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.