当前位置: 首页>>技术问答>>正文


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

, , , ,

问题描述

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

我在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调用此脚本[如果您可能需要创建此文件]以在每次登录时自动执行该过程。或者您可以在需要时从终端呼叫它。编辑:把它放在”Startup Applications”,而不是.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的手册页。您可能会发现它的更多功能。

次佳解决思路

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

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

    1. 开放式终端。

    2. 键入touch ~/.customxsession,然后按Enter键。

    3. 键入gedit ~/.customxsession,然后按Enter键。

    4. 现在,您将打开一个带有空白文件的文本编辑器。

    5. 您需要在此文件中定义X Session。我在答案的底部创建了一个示例“填空”文件。我认为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. 打开’Place Windows’插件(它位于’Window Management’部分)。

    4. 单击“带固定视口的Windows”部分中的’New’。

    5. 单击’Plus’图标。

    6. 将’Type’设置为’Window Title’,并在’Value’框中输入其中一个程序的窗口标题。确保’Relation’设置为’AND’,然后单击’Add’。

    7. 通过在’X’和’Y’框中输入数字来设置工作区。当你有4个工作区的’X’,’1’是左和’2’是正确的,而对于’Y’,’1’是顶部和’2’是底部。看到你有6个工作区,这取决于事情如何设置,设置’Y’到’3’将选择最下面一行,并’X’设置’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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2951.html,未经允许,请勿转载。