云网牛站
所在位置:首页 > Linux教程 > 在Deepin Linux操作系统下实现开机脚本自启的三种办法

在Deepin Linux操作系统下实现开机脚本自启的三种办法

2018-11-16 12:01:32作者:linux人稿源:lolimay.cn站

要在 Deepin Linux 操作系统下实现开机脚本自启,目前有三种常用的办法,一是修改 ~/.profile 文件、二是新建 /etc/rc.local 文件、三是新建 .desktop 文件在 ~/.config/autostart 文件夹中。下面一一介绍。

 

背景

使用 deepin 也有一段时间了,但之前一直不知道如何去实现用户自定义脚本开机自启。曾在自己管理的一台的 ubuntu 服务器上实现了 frp 服务开机自启,方法是先在 /etc/init.d 目录下增加 frp 客户端脚本,再通过 update-rc.d frp defaults 95 命令将该脚本添加到系统初始化执行队列中。很遗憾,我在 deepin 下也同样测试了这种方法,但似乎是没什么效果(也有可能是自己的食用方法不对而导致脚本无法开机自启,感兴趣的同学可以自己研究下)。

如果你曾到过相关的文章应该会知道在 deepin 中实现用户自定义脚本开机自启主要是有三种方法(修改.profile文件、新建rc.local文件以及将desktop文件拖进.config/autostart文件夹下实现开机自启)。在本文章中我主要介绍的是前两种办法。

 

办法一、修改 ~/.profile 文件

第一种方法是把开机需要自动执行的命令直接写入 .profile 文件中。严格来说,这不能够算是开机自启脚本,它的原理其实是当用户登录系统后会自动执行该脚本(也就是登录后触发)。这种方法有三个较大的缺点,首先是一旦脚本有报错或输出警告信息那么用户登录系统后会出现黑屏弹框,从而严重影响开机体验;其次是我们不能在 ~/.profile 文件中用 sleep 命令,比如说当你在 .profile 文件中使用了 sleep 5,那么当你开机登录系统后会真的黑屏5s后再进入桌面;最后一个缺点是执行该脚本的用户是普通用户而不是 root 用户,这就意味着当你的命令含有 sudo 前缀时,你需要采用 hack 方式去执行该条命令,如:echo "your password" | sudo -S some command # 输出用户密码并作为下一条命令的输入

鉴于上面三个缺点,我个人并不是很建议使用第一种办法。

 

办法二、新建 /etc/rc.local 文件

实际上,我用这种方法时还是遇到了比较多的问题(因此有点东西可写)。这种方法的原理是系统开机后会自动启动 rc-local 服务,rc-local 服务启动后就会自动执行 /etc 目录下的 rc.local 脚本。该方法的优点就是不存在第一种方法的三个缺点,脚本执行失败不会出现黑屏弹窗、sleep 不会造成开机黑屏以及执行脚本的用户是 root 用户。

1]、先介绍一下利用 rc.local 文件实现脚本开机自启的主要步骤:

主要步骤:

1、新建 /etc/rc.local 文件

2、粘贴以下模板

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

exit 0

3、在 exit 0 上方插入你需要自启的命令(一行一个)后保存文件

4、给脚本加上 755 权限

sudo chmod +755 /etc/rc.local

5、调试脚本(可选)

sudo /etc/rc.local # 使用 sudo 模拟 root 用户开机自启 /etc/rc.local 文件

如果第 5 步模拟启动脚本没有报错,那我们就可以重启电脑看看是否可以成功实现脚本开机自启。重启进入系统后我们可以通过 systemctl status rc-local.service 查看 rc-local 的运行状态,如果结果显示的是 active (exited) 则说明你的脚本已经成功执行,反之如果结果显示 failed,那么你需要检查一下脚本是否哪里有问题。

2]、这里提供可能导致脚本无法正常启动的原因:

1、执行脚本的用户不一致

由于 rc.local 开机自启的时候是以 root 用户执行的,这里很多人会忽略了一个问题,很多情况下你的命令是必须要普通用户执行的。比如 conky 和虚拟机(用户A建立的VBox和VM Ware虚拟机用户B无法访问)等。

假设用户 lolimay 在终端用 VBoxHeadless -s aikuai & 后台启动了虚拟机名 aikuai,那么我们在 rc.local 文件应该用下面这种方式写:

su - lolimay -c "VBoxHeadless -s aikuai &" # 以 lolimay 用户执行该命令

2、多余的 sudo

前面已经提到 rc.local 开机时是以 root 用户启动的,所以写在 rc.local 文件中命令不需要带有 sudo 前缀(实际上就算你带有了 sudo 前缀也不会产生错误)。

3]、最佳实践

个人建议每当往 rc.local 文件中添加了一个需要自启的命令时,可以先用 sudo /etc/rc.local 命令模拟一下看看是否能够执行成功(如果执行失败也能够直观地看到出错的原因),这样能够有效减少你重启电脑来调试的次数。

 

办法三、使用 ~/.config/autostart 文件夹

第三种办法是新建一个 .desktop 文件,然后把它丢进 ~/.config/autostart 文件夹下。~/.config/autostart 文件夹其实挺类似于 Windows 下的启动文件夹,系统开机时会执行该文件夹下的每个 desktop 文件 Exec 参数指向的脚本或可执行文件(desktop你可以简单地理解为 Windows 系统中的快捷方式)。一个最简单的 desktop 文件模板如下:

[Desktop Entry]

Name=<应用程序名>

Type=Application

Exec=<应用程序或脚本完整路径>

Icon=<应用程序图标的完整路径>

效果示例:

在Deepin Linux操作系统下实现开机脚本自启的三种办法

在Deepin Linux操作系统下实现开机脚本自启的三种办法

最后,需要注意的一点是这种方法的执行脚本的用户也是普通用户,所以当脚本中出现 sudo 命令是,需要用类似于 echo "your password" | sudo -S some command 的 hack 方法去实现开机自启需要管理员权限的命令。

 

相关主题

从Ubuntu 16.04升级Ubuntu 18.04系统后设置开机自启的总结

精选文章
热门文章