我可以以不同方式设置我的xfce工作区吗?
我目前有四个工作区(’主’,’游戏’,’工作’,’溢出’)。 在完美的设置中,“游戏”工作区可以为Steam和个人游戏提供快捷方式(在桌面或面板中)。
切换到“工作”不应该与游戏相关,而是使用Google Docs链接和所有与工作相关的文件的快捷方式。
在xfce4中可以实现独特的自定义工作空间吗?
如果我们将设置限制为每台桌面有一组不同的启动器 ,那么它并不复杂。 我们需要的是一个脚本,在后台运行以跟踪当前工作空间并相应地自动更改启动器集。
1.每个工作区有一组发射器
假设我有四个工作区,我希望以下启动器可用于不同的工作区:
工作区1> 工作区2> 工作区3> 工作区4>
- 工作区1:Firefox / Idle
- 工作区2:Gcolor2 / Gimp图像编辑器/ Inkskape
- 工作区3:Abiword / Gnumeric / Mail Reader
- 工作区4:地雷/数独
如何设置
-
该脚本使用
wmctrl
:sudo apt-get install wmctrl
-
在您的主目录中(不在子目录中,但在“第一”级别),创建一个名为的目录(确切地说):
desktop_data
在这个目录中,为每个桌面创建一个名为(完全)的文件夹:
desktop_1 desktop_2 desktop_3 desktop_4
#!/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.扩展可能性,发射器和链接
如果我们向脚本添加几行,则可以使用更改指向目录的链接来扩展每个工作区的设置选项:
在一个工作区中,我们有一个指向Documents文件夹的链接,以及办公应用程序的启动器:
在另一个工作区,我们有一个指向图片文件夹的链接,以及图像编辑器的启动器:
如何设置
设置与选项1中的设置非常相似,但另外,在数据文件夹中(请参阅选项1),创建指向文件夹的链接(使用ln -s
),您希望在相应工作区:
剧本
#!/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)
其他一些桌面环境(如KDE)本身提供此function,但这仅在XFCE中得到部分支持。
什么在XFCE本地工作:
- 您可以在每个工作区上设置不同的墙纸,这是完全支持的,可以通过工作区设置GUI轻松配置。
- 您可以将面板影响到特定工作区,但AFAIK没有允许配置此选项的GUI选项,但下面的脚本将负责所有内容。
我采用的解决方案:
- 为每个工作区创建一个新面板。 您还可以创建将在所有工作空间中显示的补充全局面板(某些元素,如通知栏只能添加一次,因此在每个工作空间中显示它的唯一方法是将其添加到全局面板)。
- 配置并运行下面的脚本,将每个本地面板分发到自己的工作区。
- 配置XFCE以在每次启动时运行脚本。
- 按照您的意愿配置面板。
与其他答案相反,此脚本不会作为无限循环运行,每秒都会获取状态。 它在会话开放期间仅运行一次,以便将每个本地面板关联到它们自己的工作空间,之后所有其余的由窗口管理器本地处理。
#! /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
-
将此脚本保存为您的主目录中的
local-panels.sh
,并使其可执行(chmod u+x ~/local-panels.sh
) -
配置脚本以满足您的需求:
-
$start
:XFCE为您的面板编号,这是您想要制作本地的第一个面板的编号。 这里第一个面板保持全局,面板2及其后面是他们自己的工作区本地。 -
$count
:要制作本地的面板数量。 默认情况下,这等于工作空间的数量,即。 每个工作区一个不同的本地面板 -
$desk
:第一个拥有本地面板的工作区。 默认情况下,每个工作空间都有一个本地面板,但如果您希望将此变量设置为更高的值,则可以在前几个工作空间中没有本地面板。
-
-
配置XFCE以在会话打开时自动启动此脚本:进入XFCE设置管理器 > 会话和启动 ,单击应用程序自动启动选项卡,然后单击添加按钮以在每个会话打开时安排脚本的执行。