我可以以不同的方式设置我的 xfce 工作区吗?

我可以以不同的方式设置我的 xfce 工作区吗?

我目前有四个工作区(“主”、“游戏”、“工作”、“溢出”)。在完美的设置中,“游戏”工作区将有 Steam 和单个游戏的快捷方式(在桌面或面板中)。

切换到“工作”不应该有任何与游戏相关的内容,而应该有 Google Docs 链接和所有与工作相关的文件的快捷方式。

xfce4 中可以实现独特定制的工作区吗?

答案1

如果我们限制设置有一个不同的发射器每个桌面都不太复杂。我们需要的是一个脚本,在后台运行以跟踪当前工作区并自动更改启动器集。

1. 每个工作区一组启动器

假设我有四个工作区,我希望以下启动器在不同的工作区上可用:

工作区 1 > 工作区 2 > 工作区 3 > 工作区 4 >

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

  • 工作区 1:Firefox/空闲
  • 工作区 2:Gcolor2 / Gimp 图像编辑器 / Inkskape
  • 工作区 3:Abiword / Gnumeric / 邮件阅读器
  • 工作区 4:地雷/数独

如何设置

  1. 该脚本使用wmctrl

    sudo apt-get install wmctrl
    
  2. 在您的主目录中(不是在子目录中,而是在“第一”级),创建一个目录(确切地)名为:

    desktop_data
    

    在此目录中,为每个桌面创建一个名为(确切名称)的文件夹:

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

    <图片5>

  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 本地化版本中,“桌面”文件夹的名称可能有所不同(荷兰语:“Bureaublad”)。如果您的 Ubuntu 版本中的桌面文件夹名称不是“桌面”,请在以下行中将其更改:

desktop_dir = home+"/"+"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+"/"+"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)

答案2

一些其他桌面环境(如 KDE)原生提供此功能,但 XFCE 仅部分支持此功能。

XFCE 原生支持的功能:

  • 您可以在每个工作区上设置不同的壁纸,此功能完全受支持,并且可以通过工作区设置 GUI 轻松配置。
  • 您可以将面板影响到特定的工作区,但据我所知,没有 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$' \
    | 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 为您的面板编号,这是您要设为本地的第一个面板的编号。这里第一个面板保持全局,第二个及以后的面板设为其自己的工作区本地面板。
    • $count:要设为本地的面板数量。默认情况下,此数量等于工作区数量,即每个工作区一个不同的本地面板。
    • $desk:第一个具有本地面板的工作区。默认情况下,每个工作区都会有一个本地面板,但是如果您愿意,可以将此变量设置为更高的值,这样前几个工作区就不会有本地面板。
  3. 配置 XFCE 在会话打开时自动启动此脚本:进入XFCE 设置管理器>会话和启动,点击应用程序自动启动选项卡,然后在添加按钮来安排每次会话打开时执行脚本。

相关内容