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

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

Ubuntu 14.04 x64

2
задан 10 April 2018 в 17:50

2 ответа

Этот ответ является отредактированной версией этого ответа, но с различием, что этот для Единицы (вместо XFCE) и должен управлять рядом (ссылки на) папки на рабочую область вместо средств запуска приложения. Однако путем некомментария строки (см. далее ниже), можно также установить другой набор средств запуска приложения на рабочую область одновременно.

То, что это для Единицы, делает сценарий немного более сложным, но в принципе, это работает в значительной степени точно то же.

Пример:

рабочая область 1:

enter image description here

рабочая область 2 (3, 4):

enter image description here

Как сделать папки доступными в рабочей области - особенный метод

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

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

  1. Использование сценария wmctrl получить информацию о текущей рабочей области:

    sudo apt-get install wmctrl
    
  2. В Вашем корневом каталоге (не в подкаталоге, а на "первом" уровне), создают каталог (точно) названный:

    desktop_data
    

    в этом каталоге создайте для каждого из Вашего (в этом примере четыре) рабочие столы, папка, названная (точно):

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

    enter image description here

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

    ln -s ~/Documents ~/desktop_data/desktop_1/Documents
    

    и так далее для всех папок Вы хотите появиться на целенаправленном рабочем столе (столах):

    enter image description here

    NB, Если Вы также хотите ряд средств запуска на рабочий стол, добавляют средства запуска к папке и делают их исполняемым файлом (!).

  4. Скопируйте сценарий ниже в пустой файл, сохраните его как change_desktop.py. Тестовый прогон это путем выполнения в окне терминала команды:

    python3 /path/to/change_desktop.py
    

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

    NB, если Вы также хотите ряд средств запуска, характерных для различных рабочих областей, не комментируют строку:

    if os.path.islink(subject) or subject.endswith(".desktop"):
    

    но удостоверьтесь строка:

    # if os.path.islink(subject):
    

    комментируется (поместите a # перед строкой)

В примере выше, папки Documents, Netwerkmap и screen_notes появитесь на рабочей области 1, но не на рабочей области 2 (3,4)

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

Сценарий

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

home = os.environ["HOME"]
desktop_dir = home+"/"+"Bureaublad"
data_dirstr = home+"/desktop_data/desktop_"

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")

# get resolution
xr = get("xrandr").split()
plus = 2 if xr[xr.index("connected")+1] == "primary" else 1
res = [int(n) for n in xr[xr.index("connected")+plus].split("+")[0].split("x")]

def get_dt():
    # get the current viewport
    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_dt1 = get_dt()

while True:
    time.sleep(1)
    curr_dt2 = get_dt()
    # alter the set of links when workspace changes
    if not curr_dt1 == curr_dt2:
        datafolder = data_dirstr+curr_dt2
        for f in os.listdir(desktop_dir):
            subject = desktop_dir+"/"+f
            # uncomment one of the two lines below
            if os.path.islink(subject):                                       # uncomment for only folders (links to) per workspace
            # if os.path.islink(subject) or subject.endswith(".desktop") :    # uncomment for folders and .desktop files per workspace
            #
                os.remove(subject)
        for f in os.listdir(datafolder):
            subject = datafolder+"/"+f; target = desktop_dir+"/"+f
            if os.path.islink(subject):
                os.symlink(os.readlink(subject), target)
            else:
                shutil.copy(subject,target)
    curr_dt1 = curr_dt2

Краткое объяснение

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

Важное примечание

В Вашей локализованной версии Ubuntu, Desktop мог бы быть назван по-другому ("Bureaublad" на нидерландском языке, например). Если так, измените в сценарии строку:

desktop_dir = home+"/"+"Desktop" 

отразить Ваше локализованное имя Desktop папка.

2
ответ дан 2 December 2019 в 03:56

Я сожалею, но эта функциональность в настоящее время не поддерживается. Вы могли попробовать игру сторонним программным обеспечением как screenlets, но я сильно не рекомендую его.

0
ответ дан 2 December 2019 в 03:56

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

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