从启动脚本中删除服务的常用方法是首先将其从启动中删除(man update-rc.d)。这意味着删除指向 /lib/init 的符号链接。在这种情况下,执行应该可以完成以下工作:
update-rc.d -f bluetooth remove
但是为什么在蓝牙守护进程的情况下这不起作用?有人可以更深入地解释一下发生了什么吗?如果我强行删除链接,蓝牙芯片/硬件是否还会消耗我的电池?
事情的经过如下:
sudo update-rc.d -f bluetooth remove
Removing any system startup links for /etc/init.d/bluetooth ...
sudo ls -la /etc/init.d/ | grep bluetooth
lrwxrwxrwx 1 root root 21 Mar 21 2012 bluetooth -> /lib/init/upstart-job*
因此链接仍然存在。
似乎还有其他感到困惑的人 [1] [2] 也在尝试不同的解决方案来解决蓝牙行为问题。
[1]如何在系统启动时停用蓝牙? [2]如何在蓝牙关闭的情况下开机
答案1
update-rc.d 确实是常用的方法...来改变 sysvinit(不是 upstart,不是 systemd)的初始化优先级。
这些 sysvinit 脚本位于 /etc/init.d 中
但是 Upstart 不使用 update-rc.d 也不使用 /etc/init.d(除了旧版兼容性)。因此,对你的问题的简短回答是,蓝牙软件使用 Upstart 作业而不是 sysvinit 脚本。
永久禁用 upstart 作业的一个好方法是重命名 .conf 文件。
例子:
sudo service bluetooth stop
sudo mv /etc/init/bluetooth.conf /etc/init/bluetooth.conf.disabled
您可以通过将名称改回 bluetooth.conf 来重新启用,而无需重新启动。
sudo mv /etc/init/bluetooth.conf.disabled /etc/init/bluetooth.conf
sudo service bluetooth start
您可以通过编辑.config 文件来更改自动启动的依赖项。