每个工作都有自己的发射器和文件夹

我在compiz上配置了4个工作区。 我想知道是否有办法在主桌面(1)中独占文件夹? 我想让其他人清楚地看到壁纸。

Ubuntu 14.04 x64

这个答案是这个答案的编辑版本,但不同之处在于这个版本适用于Unity(而不是XFCE),并且是为每个工作区而不是应用程序启动器管理一组(链接到) 文件夹 。 但是,通过取消注释一行(请参见下文),您还可以同时为每个工作区设置一组不同的应用程序启动器。

它适用于Unity的事实使得脚本稍微复杂一些,但原则上它的工作方式几乎完全相同。

一个例子:

工作区1:

在此处输入图像描述

工作区2(3,4):

在此处输入图像描述

如何以特定于工作区的方式使文件夹可用

在下面的解决方案中,不是实际的文件夹出现在桌面上(或只出现在其中一个工作区,或任何您选择的),而是指向(任意)文件夹的链接 。 从您的评论我明白这是一个可以接受的解决方案。
这使得有效地在一个工作空间上具有(虚拟)文件夹,而在另一个工作空间上没有。 后台脚本会根据您的设置方式跟踪当前工作区并更改桌面上的链接集。

如何设置

  1. 该脚本使用wmctrl获取有关当前工作空间的信息:

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

     desktop_data 

    在此目录中,为每个(在本例中为四个)桌面创建一个名为(完全)的文件夹:

     desktop_1 desktop_2 desktop_3 desktop_4 

    在此处输入图像描述

  3. 在这些文件夹中,创建指向要在相应桌面上显示的所有文件夹的链接。 例如,如果您希望文件夹Documents出现在视口(工作区)1上,请创建一个链接:

     ln -s ~/Documents ~/desktop_data/desktop_1/Documents 

    等等,对于要在目标桌面上显示的所有文件夹:

    在此处输入图像描述

    注意如果您还想在每个桌面上安装一组启动器,请将启动器添加到该文件夹​​并使其可执行(!)。

  4. 将下面的脚本复制到一个空文件中,将其另存为change_desktop.py 。 通过在终端窗口中运行命令来测试运行它:

     python3 /path/to/change_desktop.py 

    切换工作区就像您用来做的那样,因为脚本会切换工作区。

    注意如果您还需要一组特定于不同工作空间的启动器,请取消注释该行:

     if os.path.islink(subject) or subject.endswith(".desktop"): 

    但请确保该行:

     # if os.path.islink(subject): 

    被注释掉(把#放在前面)

在上面的示例中,文件夹DocumentsNetwerkmapscreen_notes显示在工作区1上,但不显示在工作区2(3,4)上

如果一切正常,请将其添加到启动应用程序:Dash> Startup Applications> Add

剧本

 #!/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文件夹。

很抱歉,目前不支持此function。 您可以尝试使用第三方软件,如screenlet,但我强烈不推荐它。