如何编写脚本以在特定工作区中打开一组程序?
我环顾了一会儿,无法找出以下问题的答案:
我在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。
这里有两个“问题”:第一个涉及在您登录时打开一组特定的程序; 第二个是让它们在特定的工作空间中打开。 我将分别处理两个问题:
-
创建自定义X会话
这很容易做到。 您只需创建一个X Session Script,然后告诉LightDM使用它。 您需要知道从终端启动所需程序的命令。
- 开放式终端。
- 键入
touch ~/.customxsession
,然后按Enter键。 - 输入
gedit ~/.customxsession
,然后按Enter键。 - 现在,您将打开一个带有空白文件的文本编辑器。
- 您需要在此文件中定义X会话。 我在答案的底部创建了一个“填空”文件示例。 我认为 Ubuntu使用gnome-session作为它的窗口管理器,但我可能错了。 我现在无法测试它(笔记本电脑损坏)所以如果它没有按预期工作(例如:加载Gnome而不是Unity),你可能需要做一些研究。
- 保存文件,然后关闭Gedit。
- 键入
touch /usr/share/xsessions/multi.desktop
,然后按Enter键。 - 输入
gedit /usr/share/xsessions/multi.desktop
,然后按Enter键。 - 现在,您将打开一个带有空白文件的文本编辑器。
- 将答案底部的代码(标记为“/usr/share/xsessions/multi.desktop:”)复制并粘贴到Gedit中。
- 保存文件,然后关闭Gedit。
- 重启。 当您进入登录屏幕时,如果您查看可用的会话(单击您的用户名旁边的小Ubuntu徽标),您应该会看到一个名为Multi-Session的会话。 如果您使用它登录,则您在X会话脚本中放入的程序应自动打开。
-
将程序分配给工作区
这也很简单,但默认情况下它需要一些未安装在Ubuntu中的额外软件。
- 安装compizconfig-settings-manager(您可以使用软件中心,或者只是在终端中运行
sudo apt-get install compizconfig-settings-manager
)。 - 从Dash打开CompizConfig设置。
- 打开“放置Windows”插件(它位于“窗口管理”部分)。
- 单击“带固定视口的Windows”部分中的“新建”。
- 单击“加号”图标。
- 将“类型”设置为“窗口标题”,然后在“值”框中输入其中一个程序的窗口标题。 确保’Relation’设置为’AND’,然后单击’Add’。
- 通过在“X”和“Y”框中输入数字来设置工作区。 如果’X’有4个工作区,则左边’1’,右边’2’,’Y’,’1’是顶部,’2’是底部。 看到你有6个工作区,取决于设置的方式,将’Y’设置为’3’将选择底行,将’X’设置为’3’将选择第3列。
- 对要为其分配工作空间的其余程序重复步骤4-7。
- 关闭CompizConfig设置。
- 安装compizconfig-settings-manager(您可以使用软件中心,或者只是在终端中运行
-
在登录
当您登录时,您需要告诉Ubuntu您想要使用自定义X会话。
- 重启。
- 当您进入登录屏幕时,如果您查看可用的会话(单击您的用户名旁边的小Ubuntu徽标),您应该会看到一个名为Multi-Session的会话。 如果使用它登录,则放入X会话脚本的程序应自动打开,并分配给您选择的工作区。
-
问题
如果你犯了一个小错误,或者在写这个答案时我犯了一个错误,这个问题可能会出现很多问题。 如果出现问题,请确保您已按照信中的说明进行操作,如果没有,请更正。 如果您仍有问题,请发表评论。
〜/ .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显示器。