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

Вопрос или проблема

В настоящее время у меня есть четыре рабочих пространства (‘Главное’, ‘Игры’, ‘Работа’, ‘Избыток’). В идеальной настройке на рабочем пространстве ‘Игры’ будут ярлыки (либо на рабочем столе, либо на панели) для Steam и отдельных игр.

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

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

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

1. Набор лаунчеров для каждого рабочего пространства

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

рабочее пространство 1 > рабочее пространство 2 > рабочее пространство 3 > рабочее пространство 4 >

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

  • Рабочее пространство 1: Firefox / Idle
  • Рабочее пространство 2: Gcolor2 / Gimp Image Editor / Inkskape
  • Рабочее пространство 3: Abiword / Gnumeric / Mail Reader
  • Рабочее пространство 4: Mines / Sudoku

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

  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+"https://askubuntu.com/"+"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()
        # измените набор лаунчеров, когда меняется рабочее пространство
        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+"https://askubuntu.com/"+f
                os.remove(subject)
            for f in os.listdir(datafolder):
                subject = datafolder+"https://askubuntu.com/"+f; target = desktop_dir+"https://askubuntu.com/"+f
                shutil.copyfile(subject, target)
                subprocess.call(["/bin/bash", "-c", "chmod +x "+target])
    

Примечание

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

desktop_dir = home+"https://askubuntu.com/"+"Desktop"

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

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

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

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

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

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

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

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

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

Скрипт

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

home = os.environ["HOME"]
desktop_dir = home+"https://askubuntu.com/"+"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()
    # измените набор лаунчеров & ссылок, когда меняется рабочее пространство
    if not curr_dt1 == curr_dt2:
        datafolder = data_dirstr+curr_dt2
        for f in os.listdir(desktop_dir):
            subject = desktop_dir+"https://askubuntu.com/"+f
            if os.path.islink(subject) or subject.endswith(".desktop") :
                os.remove(subject) 
        for f in os.listdir(datafolder):
            subject = datafolder+"https://askubuntu.com/"+f; target = desktop_dir+"https://askubuntu.com/"+f
            if os.path.islink(subject):
                os.symlink(os.readlink(subject), target)
            else:
                shutil.copy(subject,target)

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

Что работает изначально в XFCE:

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

Решение, которое я принял:

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

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

#! /bin/sh

# Первая панель, которую нужно переместить
start=2

# Количество панелей для перемещения
count=$( wmctrl -d | wc -l )

desk=0
for winid in $( wmctrl -l | grep 'dom0 xfce4-panel$' \
    | 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 Settings Manager > Session and Startup, нажмите на вкладку Application Autostart, а затем на кнопку Add, чтобы запланировать выполнение скрипта при каждом открытии сеанса.

Ответ или решение

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

1. Настройка уникальных наборов ярлыков для каждого рабочего пространства

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

Шаги по настройке:

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

    sudo apt-get install wmctrl
  2. Создайте каталог для данных рабочего стола:
    В вашем домашнем каталоге создайте папку с названием desktop_data. Затем внутри нее создайте папки для каждого рабочего пространства:

    mkdir -p ~/desktop_data/desktop_{1..4}
  3. Создайте ярлыки для всех приложений:
    Добавьте необходимые ярлыки (файлы .desktop) для приложений в соответствующие папки. Это позволит динамически менять набор доступных ярлыков в зависимости от активного рабочего пространства.

  4. Создайте и запустите скрипт change_launchers.py:
    Скопируйте следующий скрипт в пустой файл и сохраните его как change_launchers.py:

    #!/usr/bin/env python3
    import subprocess
    import os
    import time
    import shutil
    
    home = os.environ["HOME"]
    desktop_dir = f"{home}/Desktop"
    data_dirstr = f"{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()
       if curr_dt1 != curr_dt2:
           datafolder = f"{data_dirstr}{curr_dt2}"
           for f in [f for f in os.listdir(desktop_dir) if f.endswith(".desktop")]:
               os.remove(f"{desktop_dir}/{f}")
           for f in os.listdir(datafolder):
               target = f"{desktop_dir}/{f}"
               shutil.copyfile(f"{datafolder}/{f}", target)
               subprocess.call(["/bin/bash", "-c", f"chmod +x {target}"])

    Затем выполните скрипт в терминале:

    python3 /path/to/change_launchers.py

И не забудьте добавить этот скрипт в автозагрузку, чтобы он запускался при каждом входе в систему.

2. Настройка панелей для каждого рабочего пространства

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

Шаги по настройке панелей:

  1. Создайте новую панель для каждого рабочего пространства:
    Зайдите в настройки XFCE и создайте новые панели. Вы можете также создать глобальные панели, которые будут отображаться на всех рабочих столах.

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

    #! /bin/sh
    
    start=2
    count=$( wmctrl -d | wc -l )
    desk=0
    
    for winid in $( wmctrl -l | grep 'dom0 xfce4-panel$' | 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
  3. Добавьте скрипт в автозагрузку:
    Перейдите в Менеджер настроек XFCE > Сессия и запуск > Автозагрузка приложений и добавьте созданный скрипт.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...