Linux上一个界面程序的开机自启动设置

最近设置一个Linux下的截屏程序的开机自启动,Linux的XWindow系统为gnome。

最先想到的方式是修改/etc/inittab文件,因为Linux在开机自启动的时候会执行该文件,该文件的读取时机是在界面启动之前。我写了一个在main函数中睡眠10分钟的小程序,然后将程序添加到/etc/inittab文件中,结果开不了机了,因为需要睡眠10分钟后才能往下执行程序。幸好我用的虚拟机做的测试,并且在做测试之前备份了虚拟机。

仔细想一下在/etc/rc.d/rc.local文件中启动截屏程序肯定是不合适的,因为如果用户默认是以运行级别非5启动,则程序仍然会被调用,但是没有XWindow,谈何截屏。

接下来考虑将程序放到/etc/rc5.d目录下,这样就可以保证程序在XWindow环境下运行了。仔细一想也不合适,rc5.d仅在系统启动时运行,而Linux系统是多用户系统,允许多个用户同时登陆,多个用户登陆时截屏程序会怎样处理呢?这样显然不合适。

然后想到程序既然为截屏程序,多个用户登陆的时候应该有几个用户就跑几个程序,这样才能保证每个用户的屏幕都能截取到。因此应该放到用户登录后的启动程序列表中。类似于windows系统中的开机启动项。我用的桌面为gnome,找到了gnome-session-properties命令来启动添加程序启动的界面,然后将我的程序添加到界面中即可。

如果桌面系统为KDE,则应该也可以找到相关的设置界面。

题外:利用/etc/inittab和rc5.d目录下添加脚本的方式来启动程序的用户为root,很多程序未了避免root权限带来的安全问题,程序内部采用了su - 用户名的方式切换到一半用户执行代码。程序还可以通过chroot的方式更改根目录的路径达到保护系统的目的。