如何编写脚本以在特定工作区中打开一组程序?

我环顾了一会儿,无法找出以下问题的答案:

我在Ubuntu 12.04上使用Unity设置了六个桌面。 在开始的时候,每天早上,我都要经历相同的五六个程序。 我在特定的工作区打开每个。 我希望自动化。 有没有办法编写脚本或配置它?

附加问题 :为了使问题进一步复杂化,我在双视图模式下运行两个屏幕。 我实际上需要在特定的屏幕上启动每个程序,最好是全屏。

jdp407使用compizconfig的想法会将特定应用程序与特定工作区相关联,以便每次打开该应用程序时,它都会放在相应的工作区中。 如果不需要,您可以执行以下操作:

1)安装wmctrl

 sudo apt-get install wmctrl 

2)创建包含以下内容的文件并使其可执行

 #!/bin/bash wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0] gnome-terminal & #Say you want a terminal in the 0th workspace nautilus & #Maybe a file browser too sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2. wmctrl -s 1 #Switches to workspace 1 firefox & #You get the idea. Continue for all workspaces sleep 2 wmctrl -s 0 #You will be left at this workspace when the script finishes executing 

3)从您的主目录中的.xsessionrc调用此脚本[如果您可能必须创建此文件]以在每次登录时自动执行该过程。 或者您可以在需要时从终端呼叫它。 编辑:把它放在“启动应用程序”中,而不是.xsessionrc。 .xsessionrc甚至会在桌面环境加载完成之前执行。


您可能希望按照jdp407的建议创建自定义xsession,以便您有两个会话可供选择,一个会自动打开这些应用程序,另一个则不会。 但这似乎对我没用。


如果您觉得切换到工作区,打开适当的应用程序然后切换到下一个是耗时的,您可以一次性打开所有应用程序,然后使用wmctrl移动窗口。 例如

 wmctrl -r 'Firefox' -t 1 

将移动一个带有Firefox的窗口,其标题为工作区1.如果存在多个窗口,则将移动由wmctrl管理的窗口列表中的第一个窗口。 您需要知道将由应用程序创建的窗口的标题才能使用它。 这就是为什么我没有建议将此作为主要选择。 如果标题与大多数常用应用程序的情况一样明确,那么这就是要走的路。


全屏打开应用程序:

某些应用程序(如gnome-terminal)具有命令行参数,可以在最大化状态或全屏模式下打开窗口。 如果存在此类选项,请使用它们 否则使用wmctrl如下

 wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz 

这最大化了我(已经存在的)终端窗口。

 wmctrl -r 'prasanth@nb37' -b add,fullscreen 

这会将窗口发送到全屏模式。


浏览wmctrl的手册页。 您可能会发现它的更多function。

这里有两个“问题”:第一个涉及在您登录时打开一组特定的程序; 第二个是让它们在特定的工作空间中打开。 我将分别处理两个问题:

  1. 创建自定义X会话

    这很容易做到。 您只需创建一个X Session Script,然后告诉LightDM使用它。 您需要知道从终端启动所需程序的命令。

    1. 开放式终端。
    2. 键入touch ~/.customxsession ,然后按Enter键。
    3. 输入gedit ~/.customxsession ,然后按Enter键。
    4. 现在,您将打开一个带有空白文件的文本编辑器。
    5. 您需要在此文件中定义X会话。 我在答案的底部创建了一个“填空”文件示例。 我认为 Ubuntu使用gnome-session作为它的窗口管理器,但我可能错了。 我现在无法测试它(笔记本电脑损坏)所以如果它没有按预期工作(例如:加载Gnome而不是Unity),你可能需要做一些研究。
    6. 保存文件,然后关闭Gedit。
    7. 键入touch /usr/share/xsessions/multi.desktop ,然后按Enter键。
    8. 输入gedit /usr/share/xsessions/multi.desktop ,然后按Enter键。
    9. 现在,您将打开一个带有空白文件的文本编辑器。
    10. 将答案底部的代码(标记为“/usr/share/xsessions/multi.desktop:”)复制并粘贴到Gedit中。
    11. 保存文件,然后关闭Gedit。
    12. 重启。 当您进入登录屏幕时,如果您查看可用的会话(单击您的用户名旁边的小Ubuntu徽标),您应该会看到一个名为Multi-Session的会话。 如果您使用它登录,则您在X会话脚本中放入的程序应自动打开。
  2. 将程序分配给工作区

    这也很简单,但默认情况下它需要一些未安装在Ubuntu中的额外软件。

    1. 安装compizconfig-settings-manager(您可以使用软件中心,或者只是在终端中运行sudo apt-get install compizconfig-settings-manager )。
    2. 从Dash打开CompizConfig设置。
    3. 打开“放置Windows”插件(它位于“窗口管理”部分)。
    4. 单击“带固定视口的Windows”部分中的“新建”。
    5. 单击“加号”图标。
    6. 将“类型”设置为“窗口标题”,然后在“值”框中输入其中一个程序的窗口标题。 确保’Relation’设置为’AND’,然后单击’Add’。
    7. 通过在“X”和“Y”框中输入数字来设置工作区。 如果’X’有4个工作区,则左边’1’,右边’2’,’Y’,’1’是顶部,’2’是底部。 看到你有6个工作区,取决于设置的方式,将’Y’设置为’3’将选择底行,将’X’设置为’3’将选择第3列。
    8. 对要为其分配工作空间的其余程序重复步骤4-7。
    9. 关闭CompizConfig设置。
  3. 在登录

    当您登录时,您需要告诉Ubuntu您想要使用自定义X会话。

    1. 重启。
    2. 当您进入登录屏幕时,如果您查看可用的会话(单击您的用户名旁边的小Ubuntu徽标),您应该会看到一个名为Multi-Session的会话。 如果使用它登录,则放入X会话脚本的程序应自动打开,并分配给您选择的工作区。
  4. 问题

    如果你犯了一个小错误,或者在写这个答案时我犯了一个错误,这个问题可能会出现很多问题。 如果出现问题,请确保您已按照信中的说明进行操作,如果没有,请更正。 如果您仍有问题,请发表评论。

〜/ .customxsession:

 #!/usr/bin/env bash program-command-1 & program-command-2 & program-command-3 & program-command-4 & program-command-5 & program-command-6 & exec gnome-session 

/usr/share/xsessions/multi.desktop:

 [Desktop Entry] Name=Multi-Session Exec=/home/your-username/.customxsession 

在StarupApplications程序中添加所需的应用程序然后添加此脚本。 这是我的脚本:ManageWorkSpaces.sh

 echo "Jeril" wmctrl -r NetBeans IDE 7.1.1 -t 0 wmctrl -r /bin/bash -t 1 wmctrl -r Google Chrome -t 2 wmctrl -r jerilkuruvila - Skype™ -t 3 

//专注于终端

 wmctrl -a NetBeans IDE 7.1.1 -t 0 

但我不知道处理2显示器。