Я могу настроить свои xfce рабочие области по-другому?

У меня в настоящее время есть четыре рабочих области ('Основной', 'Игра', 'Работа', 'Переполнение'). В идеальной установке 'Игровая' рабочая область имела бы ярлыки (или на Рабочем столе или в Панели) для Пара и отдельных игр.

Переключение на 'Работу' ничего не должно иметь связанная игра, но вместо этого иметь вещи как ссылки Google Docs и ярлыки на все мои связанные с работой файлы.

Действительно ли исключительно настроенные рабочие области возможны в xfce4?

4
задан 5 February 2015 в 12:06

2 ответа

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

1. Ряд средств запуска на рабочую область

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

рабочая область 1> рабочая область 2> рабочая область 3> рабочая область 4>

enter image description here enter image description here enter image description here enter image description here

  • Рабочая область 1: Firefox / неактивный
  • Рабочая область 2: Gcolor2 / Хромой Редактор изображений / Inkskape
  • Рабочая область 3: Abiword / Gnumeric / Почтовый Читатель
  • Рабочая область 4: шахты / судоку

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

  1. Использование сценария wmctrl:

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

    desktop_data
    

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

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

    <image5>

  3. Создайте средства запуска для всех приложений (для всех рабочих областей) на Вашем рабочем столе и скопируйте их в соответствующие папки.

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

    python3 /path/to/change_launchers.py
    

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

    Сценарий

    #!/usr/bin/env python3
    import subprocess
    import os
    import time
    import shutil
    
    home = os.environ["HOME"]
    desktop_dir = home+"/"+"Desktop"
    data_dirstr = home+"/desktop_data/desktop_"
    
    get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    
    def get_desktop():
        return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]
    
    while True:
        curr_dt1 = get_desktop()
        time.sleep(1)
        curr_dt2 = get_desktop()
        # alter the set of launchers when workspace changes
        if not curr_dt1 == curr_dt2:
            datafolder = data_dirstr+curr_dt2
            for f in [f for f in os.listdir(desktop_dir)if f.endswith(".desktop")]:
                subject = desktop_dir+"/"+f
                os.remove(subject)
            for f in os.listdir(datafolder):
                subject = datafolder+"/"+f; target = desktop_dir+"/"+f
                shutil.copyfile(subject, target)
                subprocess.call(["/bin/bash", "-c", "chmod +x "+target])
    

Примечание:

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

desktop_dir = home+"/"+"Desktop"

2. Расширяя возможности, средства запуска и ссылки

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

На одной рабочей области у нас есть a, например, ссылка на папку Documents, объединенную со средствами запуска офисных приложений:

enter image description here

На другой рабочей области у нас есть ссылка на папку Pictures, объединенную со средствами запуска Редакторов изображений:

enter image description here

Как установить

Установка является в значительной степени тем же как в опции 1, но дополнительно, в папках данных (см. опцию 1), создайте ссылки на папки (использование ln -s <source> <destination>) требуется быть доступными на соответствующей рабочей области:

enter image description here

Сценарий

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

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

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_desktop():
    return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]

while True:
    curr_dt1 = get_desktop()
    time.sleep(1)
    curr_dt2 = get_desktop()
    # alter the set of launchers & 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
            if os.path.islink(subject) or subject.endswith(".desktop") :
                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)
4
ответ дан 1 December 2019 в 09:36

Некоторые другие настольные среды (как KDE) предлагают это исходно, но это только частично поддерживается в XFCE.

, Что работы исходно в XFCE:

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

решение я принял:

  1. Создают новую панель для каждой рабочей области. Можно также создать дополнительные глобальные панели, которые будут отображены на всех рабочих областях (некоторые элементы как панель уведомления могут быть добавлены только однажды, таким образом, единственный способ иметь ее видимый на каждой рабочей области состоит в том, чтобы добавить его к глобальной панели).
  2. Настраивают и запускают скрипт ниже для распределения каждой локальной панели их собственной рабочей области.
  3. Настраивают XFCE для запущения скрипта в каждом, запускаются.
  4. Настраивают панели, как Вы будете.

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

#! /bin/sh

# First panel to move
start=2

# Number of panels to move
count=$( wmctrl -d | wc -l )

desk=0
for winid in $( wmctrl -l | grep 'dom0 xfce4-panel 
  1. Сохраняют этот сценарий, например, как local-panels.sh в Вашем корневом каталоге, и делают это, исполняемый файл (chmod u+x ~/local-panels.sh)

  2. Настраивает сценарий для удовлетворения потребностям:

    • $start: XFCE нумерует Ваши панели, это - количество панели кулака, которую Вы хотите сделать локальным. Здесь первая панель сохранена глобальной, и панель 2 и вперед сделана локальной для их собственных рабочих областей.
    • $count: количество панелей для создания локальным. По умолчанию это равно количеству рабочих областей, т.е. одной другой локальной панели на рабочую область.
    • $desk: первая рабочая область, которая будет иметь локальную панель. По умолчанию каждая рабочая область будет иметь локальную панель, но устанавливающий эту переменную на более высокое значение позволяет Вам не иметь никакой локальной панели на первых нескольких рабочих областях, если требуется.
  3. Настраивают XFCE для автоматического запуска этого сценария после открытия сессии: войдите менеджер по Настройкам XFCE > Сессия и Запуск , нажмите вкладка Application Autostart , и затем на кнопка Add для планирования выполнения сценария после каждого открытия сессии.

\ | awk "NR==$start,NR==$(( start + count - 1 )) { print \$1; }" ) do wmctrl -i -r $winid -b remove,sticky wmctrl -i -r $winid -t $desk desk=$(( desk + 1 )) done
  1. Сохраняют этот сценарий, например, как local-panels.sh в Вашем корневом каталоге, и делают это, исполняемый файл (chmod u+x ~/local-panels.sh)

  2. Настраивает сценарий для удовлетворения потребностям:

    • $start: XFCE нумерует Ваши панели, это - количество панели кулака, которую Вы хотите сделать локальным. Здесь первая панель сохранена глобальной, и панель 2 и вперед сделана локальной для их собственных рабочих областей.
    • $count: количество панелей для создания локальным. По умолчанию это равно количеству рабочих областей, т.е. одной другой локальной панели на рабочую область.
    • $desk: первая рабочая область, которая будет иметь локальную панель. По умолчанию каждая рабочая область будет иметь локальную панель, но устанавливающий эту переменную на более высокое значение позволяет Вам не иметь никакой локальной панели на первых нескольких рабочих областях, если требуется.
  3. Настраивают XFCE для автоматического запуска этого сценария после открытия сессии: войдите менеджер по Настройкам XFCE > Сессия и Запуск , нажмите вкладка Application Autostart , и затем на кнопка Add для планирования выполнения сценария после каждого открытия сессии.

1
ответ дан 1 December 2019 в 09:36

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

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