在 Ubuntu 9.10 中 X 启动之前在启动时运行脚本

Epc*_*lon 2 boot init.rc x-windows ubuntu

我有一个脚本,我想在启动时运行以根据位置切换 X 配置,但我似乎无法找到将它放在哪里以便在 X 启动之前运行它。这导致我必须重新启动 X 才能运行正确的配置。

目前,我的脚本位于 中/etc/init.d/whereami,符号链接位于/etc/rc[2-5].d/S25whereami. 我试图找出 X 何时启动,以防问题只是25,但我似乎无法找到答案......

任何帮助表示赞赏。

qua*_*ote 6

Ubuntu 从 GDM(对于使用标准ubuntu-desktop 的系统)或 KDM(对于使用kubuntu-desktop 的系统)启动 X-windows 。

要在 GDM/KDM 启动之前运行脚本,您可以

  1. 编写您自己的 Upstart 脚本以在 GDM 之前运行;或者
  2. 修改您的系统 GDM 脚本以运行自定义外部脚本(例如,您的/etc/init.d/whereami脚本)作为其初始任务之一。

Ubuntu 使用 Debian 风格的运行级别:运行级别 1是单用户,恢​​复模式;运行级别 2-5都相同(GUI 多用户);并且默认情况下系统引导到运行级别 2

Ubuntu 9.10 使用 Upstart,它在/etc/init 中提供服务启动脚本。/etc/init.d/etc/rc.d中更传统的 init 脚本仍然可用于尚未移植到 Upstart 样式 init 脚本的服务,但 GDM 有一个。(注意 Ubuntu 9.10 提供了/etc/init.d/gdm但没有为其创建任何/etc/rcX.d符号链接。)

GDM 启动由/etc/init/gdm 控制。脚本顶部的这些行指定何时启动和停止 GDM。请注意,没有用于启动 GDM 的运行级别规范——只有必须首先启动的服务。

start on (filesystem
          and started hal
          and tty-device-added KERNEL=tty7
          and (graphics-device-added or stopped udevtrigger))
stop on runlevel [0156]

emits starting-dm
Run Code Online (Sandbox Code Playgroud)

有关Upstart 脚本的文档,请参阅man 5 init,并检查系统的/etc/init/*.conf文件以获取一些示例。另请参阅起始事件联机帮助页:

示例
希望在其他服务运行时运行的服务,之前启动并之后停止,可以使用:

start on starting apache
stop on stopped apache
Run Code Online (Sandbox Code Playgroud)

必须在另一个任务或服务启动之前运行的任务可能会使用:

start on starting postgresql
Run Code Online (Sandbox Code Playgroud)

另请注意,GDM/KDM Upstart 脚本会发出一个信号,starting-dm,这也可能很有用。

因此,设计为在 GDM 之前运行的 Upstart 脚本应该使用以下start on子句之一:

# run only when starting GDM
start on starting gdm

# run when starting GDM or KDM
start on (starting gdm 
          or starting kdm)

# run when starting any DM
# starting-dm is a custom event emitted by the GDM/KDM/etc scripts
start on starting-dm
Run Code Online (Sandbox Code Playgroud)