为什么我们不能以常规方式删除蓝牙服务?

为什么我们不能以常规方式删除蓝牙服务?

从启动脚本中删除服务的常用方法是首先将其从启动中删除(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 文件来更改自动启动的依赖项。

相关内容