我有一个脚本,我想在启动时运行它来根据位置切换 X-configs,但我似乎找不到将它放在哪里才能让它在启动 X 之前运行。这导致我必须重新启动 X 才能让它运行正确的配置。
目前,我的脚本位于/etc/init.d/whereami
,符号链接位于/etc/rc[2-5].d/S25whereami
。我试图找出 X 何时启动,以防问题仅仅是25
,但我似乎找不到答案……
任何帮助都将受到赞赏。
答案1
Ubuntu 从 GDM 启动 X-windows(对于使用标准Ubuntu 桌面)或 KDM(对于使用kubuntu 桌面)。
要在 GDM/KDM 启动之前运行脚本,您可以
- 编写自己的 Upstart 脚本在 GDM 之前运行;或者
- 修改系统 GDM 脚本以运行自定义外部脚本(例如,/etc/init.d/whereami脚本)作为其初始任务之一。
Ubuntu 使用 Debian 风格的运行级别:运行级别 1是单用户,恢复模式;运行级别 2-5都是一样的(GUI 多用户);默认情况下系统启动到运行级别 2。
Ubuntu 9.10 使用 Upstart,它提供服务启动脚本/etc/init. 更传统的 init 脚本/etc/init.d和/etc/rc.d仍可用于尚未移植到 Upstart 样式的 init 脚本的服务,但 GDM 有一个。(注意 Ubuntu 9.10 提供/etc/init.d/gdm但没有创造任何/etc/rcX.d它的符号链接。)
GDM 启动由在 /etc/init.d/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
看人5初始化查看 Upstart 脚本的文档,并检查系统的/etc/init/*.conf文件获取一些示例。另请参阅开始事件手册页:
例子
一个服务希望在另一个服务运行时运行,启动前并停了下来后它可能会使用:start on starting apache stop on stopped apache
必须在另一项任务或服务启动之前运行的任务可能会使用:
start on starting postgresql
还要注意的是,GDM/KDM Upstart 脚本会发出一个信号,起始 dm,这也可能有用。
因此,设计为在 GDM 之前运行的 Upstart 脚本应该使用下列脚本之一开始条款:
# 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
答案2
通常,X 在运行级别 5 中启动,由于您希望脚本在 X 之前启动(以 xdm/kdm/gdm 的形式),因此您需要它具有比 Sxxxdm 条目更低的数字。因此,在我的系统上,xdm 以 S111xdm 启动,因此您需要一个符号链接/etc/rc5.d/S10whereami
。