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

Jah*_*ahn 34 xorg unity workspaces x11

我环顾四周,无法找出以下问题的答案:

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

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

Pra*_*h S 21

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

1) 安装 wmctrl

sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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


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


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

wmctrl -r 'Firefox' -t 1
Run Code Online (Sandbox Code Playgroud)

会将标题中带有 Firefox 的窗口移动到工作区 1。如果存在多个窗口,wmctrl则将移动所管理窗口列表中的第一个窗口。您需要知道应用程序将创建的窗口的标题才能使用它。这就是为什么我不建议将其作为主要选项的原因。如果标题是明确的,就像最常用的应用程序一样,那么这就是要走的路。


全屏打开应用程序:

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

wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz
Run Code Online (Sandbox Code Playgroud)

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

wmctrl -r 'prasanth@nb37' -b add,fullscreen
Run Code Online (Sandbox Code Playgroud)

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


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


小智 10

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

  1. 创建自定义 X 会话

    这很容易做到。您只需要创建一个 X 会话脚本,然后告诉 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. 打开“放置 Windows”插件(位于“窗口管理”部分)。
    4. 单击“具有固定视口的窗口”部分中的“新建”。
    5. 单击“加号”图标。
    6. 将“类型”设置为“窗口标题”,并在“值”框中输入其中一个程序的窗口标题。确保“关系”设置为“AND”,然后单击“添加”。
    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
Run Code Online (Sandbox Code Playgroud)

/usr/share/xsessions/multi.desktop:

[Desktop Entry]
Name=Multi-Session
Exec=/home/your-username/.customxsession
Run Code Online (Sandbox Code Playgroud)