我在 compiz 上配置了 4 个工作区。我想知道是否有办法让文件夹独占在主桌面 (1) 中?我想让其他工作区清晰可见,以便查看壁纸。
Ubuntu 14.04 x64
答案1
此答案是这个答案,但不同之处在于这个是用于 Unity(而不是 XFCE)并且用于管理一组(链接至)文件夹每个工作区,而不是应用程序启动器。但是,通过取消注释一行(请参阅下文),您还可以同时为每个工作区设置一组不同的应用程序启动器。
事实上,它是为 Unity 设计的,这让脚本稍微复杂一些,但从原理上讲,它的工作原理几乎完全相同。
一个例子:
工作区 1:
工作区 2 (3, 4):
如何以工作区特定的方式提供文件夹
在下面的解决方案中,实际的文件夹不会出现在您的桌面上(或仅在其中一个工作区中,或您选择的任何工作区中),但是链接到(任何)文件夹。从您的评论中我了解到这是您可以接受的解决方案。
这使得它有效地有可能一个工作区上有 (虚拟) 文件夹,而另一个工作区上没有。后台脚本会跟踪当前工作区并根据您的设置更改桌面上的链接集。
如何设置
该脚本用于
wmctrl
获取当前工作区的信息:sudo apt-get install wmctrl
在您的主目录中(不是在子目录中,而是在“第一”级),创建一个目录(确切地)名为:
desktop_data
在此目录中,为您的每个桌面(本例中为四个)创建一个名为(确切地说)的文件夹:
desktop_1 desktop_2 desktop_3 desktop_4
在这些文件夹中,创建指向您想要显示在相应桌面上的所有文件夹的链接。例如,如果您希望文件夹
Documents
显示在视口(工作区)1 上,请创建一个链接:ln -s ~/Documents ~/desktop_data/desktop_1/Documents
依此类推,对于您想要出现在目标桌面上的所有文件夹:
注意:如果您还希望每个桌面有一组启动器,请将启动器添加到文件夹并使其可执行(!)。
将以下脚本复制到一个空文件中,并将其另存为
change_desktop.py
。通过在终端窗口中运行以下命令来测试运行它:python3 /path/to/change_desktop.py
像以前一样切换工作区,因为脚本可以执行切换工作区的操作。
注意:如果您还想要一组特定于不同工作区的启动器,请取消注释该行:
if os.path.islink(subject) or subject.endswith(".desktop"):
但确保以下行:
# if os.path.islink(subject):
被注释掉(
#
在行首放置一个)
在上面的例子中,文件夹Documents
、Netwerkmap
和screen_notes
出现在工作区 1 中,但没有出现在工作区 2 中(3,4)
如果一切正常,请将其添加到启动应用程序中:Dash > 启动应用程序 > 添加
剧本
#!/usr/bin/env python3
import subprocess
import os
import time
import shutil
home = os.environ["HOME"]
desktop_dir = home+"/"+"Bureaublad"
data_dirstr = home+"/desktop_data/desktop_"
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# get resolution
xr = get("xrandr").split()
plus = 2 if xr[xr.index("connected")+1] == "primary" else 1
res = [int(n) for n in xr[xr.index("connected")+plus].split("+")[0].split("x")]
def get_dt():
# get the current viewport
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
curr_dt1 = get_dt()
while True:
time.sleep(1)
curr_dt2 = get_dt()
# alter the set of 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
# uncomment one of the two lines below
if os.path.islink(subject): # uncomment for only folders (links to) per workspace
# if os.path.islink(subject) or subject.endswith(".desktop") : # uncomment for folders and .desktop files per workspace
#
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)
curr_dt1 = curr_dt2
简要说明
如果脚本启动,它会检查屏幕的分辨率。然后每秒检查一次当前工作区,并查看是否有工作区转变。如果是,它会将您放置在相应文件夹中的链接复制~/desktop_data
到您的桌面,并删除不存在的链接。
重要的提示
在您的本地化 Ubuntu 版本中,Desktop
名称可能会有所不同(例如荷兰语中的“Bureaublad”)。如果是这样,请在脚本中更改以下行:
desktop_dir = home+"/"+"Desktop"
以反映文件夹的本地化名称Desktop
。
答案2
抱歉,目前不支持此功能。您可以尝试使用第三方软件,例如屏幕片段但我强烈不推荐它。