如果我们将设置限制为每个桌面有一个不同的启动器集合,那就不是很复杂。我们需要一个在后台运行的脚本来跟踪当前工作区,并根据情况自动更改启动器集合。
1. 每个工作区一个启动器集合
假设我有四个工作区,我希望在不同的工作区上有以下启动器可用:
工作区 1 > 工作区 2 > 工作区 3 > 工作区 4 >
![enter image description here](https://istack.dev59.com/Y82fX.webp)
- 工作区 1:Firefox / 空闲
- 工作区 2:Gcolor2 / Gimp 图像编辑器 / Inkskape
- 工作区 3:Abiword / Gnumeric / 邮件阅读器
- 工作区 4:Mines / Sudoku
设置步骤
脚本使用wmctrl:
sudo apt-get install wmctrl
在您的主目录(不是子目录,而是“第一”级别)中创建一个名为desktop_data的目录(确切命名):
desktop_data
在此目录中,为每个桌面创建一个名为(确切命名)的文件夹:
desktop_1
desktop_2
desktop_3
desktop_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()
# 当工作区改变时,修改启动器集合
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”,请在下面的行中进行更改:
desktop_dir = home+"/"+"Desktop"
2. 扩展可能性,启动器和链接
如果我们在脚本中添加几行代码,可以通过一组不同的目录链接来扩展每个工作区的设置选项:
在一个工作区中,我们可以将一个指向“文档”文件夹的链接与办公应用程序的启动器结合起来。
![enter image description here](https://istack.dev59.com/XHsy0.webp)
在另一个工作区,我们有一个链接到“图片”文件夹的方式,结合了图像编辑器的启动器。
![enter image description here](https://istack.dev59.com/Uss8C.webp)
设置步骤
设置步骤与选项1基本相同,但是另外,在数据文件夹中(参见选项1),创建链接到文件夹的方式(使用ln -s <source> <destination>
),以便在相应的工作空间中可用:
![enter image description here](https://istack.dev59.com/JW94A.webp)
The script
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()
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)