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


35

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

我在带有Unity的Ubuntu 12.04上安装了六个桌面。在启动时,每天早晨,我都会执行打开相同的五六个程序的例程。我在特定的工作区上打开每个。我想让它自动化。有没有办法编写脚本或进行配置?

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


1
您可能会发现这很有帮助。它指向wmctrl,但我没有使用过它:movingtofreedom.org/2010/08/10/…– RobotHumans 2012
8:51

这可能会有所帮助。askubuntu.com/questions/87002/...
Suhaib

1
从一个非常简单的角度来看,离开时是否有任何原因不能使计算机处于挂起模式?我想这将是您的快速解决方案,同时您可以找到更永久的解决方案...
Adeyfk

当您说桌面时,您是指工作区吗?
p0llard

KDE活动可能能够做到这一点。
机械蜗牛

Answers:


20

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的手册页。您可能会发现其更多功能有用。


1
显然,使用wmctrl选择工作空间在后Lynx发行版中不起作用。“ -s”选项只能设置为“ 0”,否则将引发错误,或者什么也不做。来源:movingtofreedom.org/2010/08/10/...
p0llard

我将12.04与unity2d结合使用(无视觉效果),它对我有用。似乎在启用视觉效果的情况下无法使用。
S Prasanth

wmctrl在这里工作正常(LXDE和XFCE,通过启用
xcompgr

与肉桂一起在Mint 14中为我工作,谢谢!
2013年

在Ubuntu 14.04中,用于wmctrl -o X,Y移动到特定视口。如果您有多台监视器,则可以使用将应用程序移至另一台监视器wmctrl -r "App name" -e G,X,Y,W,H。具有统一的视觉效果,效果很好。
Nate 2014年

10

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

  1. 创建自定义X会话

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

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

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

    1. 安装compizconfig-settings-manager(您可以使用软件中心,也可以sudo apt-get install compizconfig-settings-manager在终端中运行)。
    2. 从仪表板打开CompizConfig设置。
    3. 打开“放置Windows”插件(位于“窗口管理”部分)。
    4. 在“具有固定视口的Windows”部分中,单击“新建”。
    5. 点击“加号”图标。
    6. 将“类型”设置为“窗口标题”,然后在“值”框中输入其中一个程序的窗口标题。确保将“关系”设置为“与”,然后单击“添加”。
    7. 通过在“ X”和“ Y”框中输入数字来设置工作区。当您有4个“ X”的工作区时,“ 1”位于左侧,“ 2”位于右侧,而对于“ Y”,则“ 1”位于顶部,“ 2”位于底部。视您有6个工作区而定,具体取决于如何设置,将'Y'设置为'3'将选择最底行,而将'X'设置为'3'将选择第3列。
    8. 对要向其分配工作区的其余程序重复步骤4-7。
    9. 关闭CompizConfig设置。
  3. 在登录

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

    1. 重启。
    2. 进入登录屏幕时,如果查看可用的会话(单击用户名旁边的小Ubuntu标志),则应该看到一个称为“多会话”的会话。如果使用它登录,则您在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

1

在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个显示器。


嗨,杰里尔!欢迎来到Ask Ubuntu!您的解决方案对我不起作用。如果运行wmctrl -d,则只有一个“桌面”。您是否在Ubuntu 12.10中的Unity上进行了测试?
Flimm 2013年

您好Flimm,我正在使用wmctrl -r,我有4个工作区。我的Ubuntu版本是12.04
jkuruvila 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.