如何在系统启动时禁用蓝牙?

如何在系统启动时禁用蓝牙?

我不认为“应该是默认配置”,人们肯定希望在电脑上使用蓝牙而无需手动开启(如果你没有蓝牙鼠标或键盘,如果它们是你的主要输入设备,你会希望从启动时就开启蓝牙)。然而,我同意提供一种选择在启动时如何开启蓝牙的方式将是有用的。 - roadmr
83正常和自然的事情是让你在蓝牙设置中选择是否在启动时打开或关闭。每次打开电脑时都要人为地开关它,这是不自然的。我们谈论的是要使Linux成为最佳的桌面系统,而不是最差的,对吗? - Robert
我们认为让人们选择是最好的选择。请参考以下链接,了解一些可能的实现方式:https://answers.launchpad.net/ubuntu/+source/bluez/+question/51440 - roadmr
告诉我们你在谈论什么类型的蓝牙设备。或者它是内置在你的笔记本电脑或上网本中的吗。 - Tony
这是对我有效的方法,在12.04上 http://askubuntu.com/a/2568 - user60504
2我正在阅读roadmr写的链接。听起来很有趣,但绝对不应该让人们随意打开和关闭蓝牙。蓝牙配置应该在启动时询问您是否要打开或关闭,或者至少应该以上次状态启动。这是一个经验法则。在我的情况下,现在是内置蓝牙。问题是,我可以通过点击系统托盘图标选择打开或关闭,但如果我进入编辑配置,它总是关闭的。所以这显然是一个误导性的错误。 - Robert
我无法在设置区域打开它,我只能点击开或关,然后在系统托盘中变亮或变暗。天哪,我从未见过一个本来运行得更好的系统上发生如此多的灾难。 - Robert
不好意思,我觉得使用 BUM 不是解决这个问题的途径。我犯了个错误。我没有蓝牙来测试。 - desgua
@Robert:你可以通过编辑问题并在所有这些评论中添加你已经澄清的所有好观点来使问题更加有力。这将增加你获得所需答案的机会。同时,它也将帮助其他与你有相同问题的人。 - stephenmyall
有一种图形用户界面的方法可以在启动时禁用服务。您可以安装Boot-Up ManagerInstall bumBoot-Up Manager 您可以从这里禁用蓝牙服务。 - ignite
问题在于Ubuntu在重新启动时不会保留上次的状态。这就是需要修复的地方。自至少12.04版本以来,它就一直没有正常工作(目前已经到了13.04)。 - Elijah Lynn
2这是错误编号1073669 - colan
25有点难以置信,在第14版中,我们仍然在“教导”Ubuntu开发者一些东西,比如“在启动时应该让普通用户选择蓝牙开启或关闭的选项,而不仅仅是那些喜欢在无尽的公共论坛中搜索的人”。 - Rodrigo
对于systemd来说,执行systemctl disable bluetooth.service应该可以完成工作。 - MinhajulAnwar
在我的情况下,这个问题是由blueman引起的。最后我彻底卸载了blueman。蓝牙不再在启动时自动开启了。 - Alexey
1@Robert 正常和自然的情况是,操作系统应该尊重用户所做的设置,并不在每次登录时重置它们。在Ubuntu 18.04-19.10上,蓝牙设置始终无法做到这一点(至少在最近款的Thinkpad上),无论用户在过去做了什么设置选择,它都会自动恢复为打开状态。最理想的操作系统不会以这种方式运作,因此提问者的问题是有价值的。 - Lexible
3@Lexible这个设置是一个"一次性"设置,如果您切换到另一个用户,它也不相关。但是有一种简单的选项(通过命令行和图形界面),如@bmaupin的答案所示 - 遗憾的是它没有标记为解决方案。 - Simon Sobisch
34个回答

对于Ubuntu 20.10

对于这个Ubuntu版本,请编辑/etc/bluetooth/main.conf文件,并找到以下行:

AutoEnable=true

并将其替换为:

AutoEnable=false

18.04+

18.04 * 没有自然存在 /etc/rc.local 的用户,您需要创建一个并使其可执行。为了让事情变得稍微容易一些,您可以将以下命令粘贴到终端中:
sudo install -b -m 755 /dev/stdin /etc/rc.local << EOF
#!/bin/sh
rfkill block bluetooth
exit 0
EOF

在运行sudoedit /etc/rc.local命令之后,在包含exit 0的行前添加以下内容。
rfkill block bluetooth

你应该仍然能够通过顶部栏小程序启用蓝牙。
对于大多数系统来说,这个方法应该有效,但是看起来在Thinkpad的内核ACPI中存在一些潜在的错误。如果你使用的是Thinkpad,请在/etc/rc.local文件中添加以下内容:
echo disable > /proc/acpi/ibm/bluetooth

或者你可以查看ibm-acpi - IBM ThinkPad ACPI Extras Driver -- 一些报告表明,ibm-acpi包括蓝牙控制(以及其他好东西)。但是我没有这个硬件,所以无法验证这些说法。祝你好运。

7对于ThinkPad(仅限ThinkPad),可以使用以下命令:echo disable > /proc/acpi/ibm/bluetooth,放置在/etc/rc.local文件中。 - Marius Gedminas
"rfkill block bluetooth" 这个选项对我的索尼Vaio电脑有效。非常感谢。 - Bakhtiyor
适用于东芝Portégé M800 - Elmatou
@MariusGedminas 你对ThinkPad的建议修复方法真是太棒了,T420s上效果非常好。 - Jan Groth
2在Thinkpad Edge 15上,'rfkill block bluetooth'这个命令起作用了。 - AlikElzin-kilaka
rfkill block bluetooth 对于LG z430有效。谢谢。 - Jonathan Simon Prates
4rfkill block bluetooth 在 Thinkpad T430u 上有效。 - bmaupin
5当我将它们一个接一个地放在/etc/rc.local中时,它们都对我没有起作用(ThinkPad x201)。rfkill block bluetooth命令确实有效,但无法在启动时运行。/etc/rc.local上设置了-x标志。我正在运行Xubuntu 13.10。 - Kyle Falconer
1在ThinkPad T430s上,rfkill block bluetooth可以用来禁用蓝牙。 - Populus
rfkill block bluetooth 在 ThinkPad L512 上可行,Ubuntu 10.04 版本。 - peipst9lker
在ThinkPad E430上,Xubuntu 14.04中,rfkill block bluetooth命令可以禁用蓝牙功能。 - Jeyekomon
4在Ubuntu 15.10上使用systemd,您需要一些额外的步骤来重新启用etc/rc.local文件的使用:http://askubuntu.com/a/696226/34298 - rubo77
对我来说,在15.10版本上,使用systemd没有任何额外的工作。 - netimen
在Thinkpad T420上,Ubuntu 14.04版本中,将"echo disable > /proc/acpi/ibm/bluetooth"命令执行成功。 - Niclas Börlin
1"rfkill block bluetooth" 可以在 elementaryOS Freya 上使用。 - Hoang Tran
都没有在Thinkpad-X250 + UbuntuStudio 16.04 LTS上工作。 - user385441
适用于戴尔XPS 13,在运行Ubuntu 16.04 LTS的情况下。 - Bib-lost
在AsusPro笔记本上,rfkill block蓝牙无法在Ubuntu 16.04上正常工作。 - MinhajulAnwar
5如果我们的rc.local文件是空文件,我们应该在哪里添加'rfkill block bluetooth'? - Sss
3我忍不住要表达我的惊讶了... 你是说我们没有一个简单的开关来解决那个问题吗? - EralpB
对我来说不起作用。戴尔XPS13。Ubuntu18.04。事实上,我不得不创建所述文件,因为它并不存在。仍然没有起作用。 - fffred
@fffred 这个脚本还需要设置为可执行,这样systemd才能识别并运行它。可以使用命令sudo chmod +x /etc/rc.local来设置权限。我在答案的顶部添加了一段代码,适用于18.04版本的用户,可以一次性创建文件并设置为可执行。 - Oli
在18.04.1版本中无法工作。其他几个涉及将bluetoothkill.sh和foo.service文件添加到/etc/systemd/system/的答案也没有成功。 - Sander Heinsalu
1这很奇怪。对我来说,它实际上有时候起作用,有时候又不起作用...我创建了一个/etc/rc.local文件,并且它确实被执行了(我确定是这样的,因为我添加了一些代码,在rfkill block bluetooth之前和之后将当前日期和时间写入文件),但是当我重新启动时蓝牙仍然是开启的...?!? 当我从命令行运行/etc/rc.local时,它确实起作用(也就是说,蓝牙被关闭了)...(我使用的是MacBook Pro (medio 2015)上的Ubuntu 18.04 LTS系统)。 - Tom
1啊,对我有帮助的是在启动应用程序中关闭Blueman-applet。要打开蓝牙,只需重新启动Blueman即可。 - Tom
@Tom 我也是。我使用的是2018年款P系列Thinkpad(在答案中使用了额外的行)。 - Lexible
我更喜欢编辑配置文件的答案,因为对我来说,这似乎是配置启动的正常方式,而不是用第二个脚本终止它。 - Martin T.
1你是说将 autoEnable=false 来禁用 蓝牙 吗?这是 默认设置 - Timo
在20.04版本上,将/etc/bluetooth/main.conf中的AutoEnable=false设置为false对我没有起作用。重启后,蓝牙仍然被启用了。 - DiDiev
@ScyDev,那个选项的用途并不是这样的,这个链接可以解决问题:https://askubuntu.com/a/817220/393264 - lasec0203
在Debian 11上作为非root用户,我不得不使用完整路径调用rfkill命令:/usr/sbin/rfkill block bluetooth - countermeasure

我在这里找到了一个带有干净的“变通方法”的操作指南(点击此处)存档链接以备将来使用)。
实际上,对我来说只需要更改/etc/bluetooth/main.conf文件就足够了。
搜索以下条目:
AutoEnable=true

将值更改为:
AutoEnable=false

对我来说已经足够了,尽管文章描述了一些可能需要或不需要的其他步骤。

Ubuntu 17.04及更早版本中,该选项被命名为InitiallyPowered


6三星笔记本电脑530u3b无法正常工作,重新启动和唤醒后蓝牙始终保持开启状态。 - Maxim Kim
4只有在我也使用Saeed Zarinfam的方法,在rc.local中加入/etc/init.d/bluetooth stop,这个才能起作用。似乎当服务启动时,它也会打开蓝牙的电源。我需要同时使用这两种方法才能使其正常工作。(ThinkPad x201,Xubuntu 13.10) - Kyle Falconer
3在我的ThinkPad T420上无法工作 - UpTheCreek
1这个应该是 InitiallyPowered = false 吗? - JellicleCat
不适用于东芝Z30-B100型号。 - Daniel
不仅在我的笔记本电脑上没有起作用,现在当我关闭蓝牙时,图标也不会像以前那样变灰。 - Rodrigo
在Ubuntu 14.04 / Dell XPS 13上无法工作。此外,似乎通过托盘图标控制状态的功能也停止工作了。 - b1r3k
5对于我们的main.conf中不包含此参数或任何指示其默认位置的注释的人来说,“搜索条目”完全没有用处。那么,我们应该将它放在哪个[Heading]下呢? - underscore_d
1找到别人的更长的main.conf-因为似乎没有实际的文档存在-建议他们放在[General]下面。 不管怎样,在Debian 8.2与KDE上对我来说都没有任何区别。 像Kyle一样,我猜这个服务是受控制的。 systemctl stop bluetooth导致BlueDevil说BT已关闭; start不会改变任何内容; 右键单击BD并选择“启用”会重新启动服务(bluetoothd),并将BD恢复为“开启”模式。 我想我会考虑在启动时屏蔽该服务。 - underscore_d
1你不再在"main.conf"中看到"InitiallyPowered"的原因是,几年前他们从bluetoothd中移除了这些设置。根据邮件列表中的描述,他们似乎希望初始电源状态现在由一个"外部组件"(如GNOME)来控制。http://marc.info/?l=linux-bluetooth&m=138695456303364&w=2 - Aaron Wells
11在我的情况下,AutoEnable=false,但无论如何,给你一个加1,因为你的解决方案很正确,来自正确的地方。 - Arman Petrosyan
在Xubuntu 17.10中,这些都不起作用。 - Adrian Keister
在Lubuntu 18.04上无法工作。 - Maris B.
对的,在18.04版本中,它是自动启用的。 - MycrofD
1对我来说不起作用。Dell XPS13,Ubuntu 18.04。 - fffred
无法在18.04.1上运行。其他一些涉及将bluetoothkill.sh和foo.service文件添加到/etc/systemd/system/的答案也没有起作用。 - Sander Heinsalu
将AutoEnable设置为false对我来说也没有起作用(Ubuntu 18.04)... :-/ - Tom
在LenovoT470s上使用Ubuntu 18.0.4.4LTS无法工作。 - Luca Camillo
在elementaryOS上对我有用。 - phrogg
适用于Thinkpad T14 gen 2的Ubuntu 22.04版本可用。 - fIwJlxSzApHEZIl

16.04+


从Ubuntu 16.04开始,systemd管理启动服务,如蓝牙...要查看当前状态,请在终端中输入以下命令。
sudo systemctl status bluetooth.service 

在启动时禁用蓝牙,请执行以下操作
sudo systemctl disable bluetooth.service

然后在下次重启时,蓝牙将不会处于活动状态...要解决蓝牙问题(然后重新启动)。
sudo systemctl enable bluetooth.service

4这对我来说是有效的,但副作用是蓝牙管理器也停止工作了。它能启动,但不会出现在指示区域,所以没有快速的方式来启用蓝牙,只能通过终端操作。 - Yuri Gor
在Xubuntu中,至少在我看来,如果你点击Blueman,它会有一个"关闭蓝牙"的选项。我认为这就是原帖作者想要自动化的功能。而你的解决方案则完全移除了Blueman,使得重新启用蓝牙变得更加困难,如果有需要的话。 - Adrian Keister
2将“sudo systemctl disable bluetooth.service && sudo systemctl stop bluetooth.service”放入禁用脚本中,并对其进行“chmod 755”操作。将“sudo systemctl enable bluetooth.service && sudo systemctl start bluetooth.service”放入启用脚本中,同样进行相应的“chmod 755”操作。 - Adrian Keister
2终于!Ubuntu 18.10,唯一对我有效的东西。其他什么都没用。 - Tyler
1是的,这是正确的解决方案。 - Jazuly
1这应该是最佳答案。对我的ThinkPad T495完美适用!感谢你分享解决方案! - user1031726

禁用蓝牙驱动程序在启动时加载:
sudo $EDITOR /etc/modprobe.d/blacklist.conf

添加:
blacklist btusb

启用它后应该只是这样的:
sudo modprobe btusb

1谢谢你的回答,看起来确实有效,但是我原本的问题是想避免使用命令行的方式。你会觉得这应该很简单,只需勾选一个框,让系统记住我不想自动启动 BT,但事实似乎比这复杂得多。考虑到 Ubuntu 对于更快启动时间和笔记本电脑以及上网本的功耗关注,我对于这个问题从未得到解决感到惊讶。 不过还是非常感谢你的帮助。 - Chris Giltnane
10以root身份运行gedit并编辑/etc/modprobe.d/blacklist.conf文件。这样可以少用命令行,方便吧? - maco
1在三星Q35上使用Ubuntu 13.10运行良好,而“rfkill block bluetooth”方法则不行。谢谢! - cubic lettuce
DELL E6410 对我来说很好用。很棒的是它可以在外出时不需要重启就能运行。 - Ruslan Gerasimov
在配置操作系统时,不要费心试图“避免使用命令行”。按下Ctrl+Alt+T并使用几个Ctrl+Shift+V(粘贴)是否太过分了? - doug65536
这种方法对Xubuntu 16.04.2来说有点过于粗暴。我无法使用普通的蓝牙管理器重新激活蓝牙 :-\ 我在考虑一种能关闭它而不是完全阻止的方法 ;) - loved.by.Jesus

第一步:打开终端,输入以下命令来编辑系统的/etc/rc.local文件:
gksudo gedit /etc/rc.local

第二步:在exit 0行之前添加以下行:
rfkill block bluetooth

1这是将蓝牙设置为软阻塞,我认为这与关闭其服务并且正常工作是一样的。 - Smile.Hunter
@Robert:$ man rfkill:“禁用与给定索引对应的设备”。尽管名称如此,但它只是禁用蓝牙;在终端上尝试执行命令rfkill block bluetooth,您应该会看到图标变为灰色。 - Daniel

注意:这些说明适用于希望在启动时默认禁用蓝牙,并且可以轻松启用的用户。
Gnome(Ubuntu 18.04+)
默认禁用蓝牙
在Gnome中,蓝牙由gnome-bluetooth管理,它应该记住您上次使用的设置。但是您可以通过以下方式强制在启动时始终禁用它:
echo "rfkill block bluetooth" >> ~/.profile

(如果您使用zsh,请将~/.profile替换为~/.zprofile)

这样可以避免编辑任何系统文件,如/etc/rc.local。

手动启用蓝牙

当您准备好打开它时,在右上角点击 > 设置 > 蓝牙 > 点击右上方附近的开关

或者使用命令行:

rfkill unblock bluetooth

Unity/Xfce(Ubuntu < 18.04,Xubuntu)

默认禁用蓝牙

如果您在顶部面板中使用蓝牙小程序(blueman-applet),它有自己的设置,即使您在其他地方禁用了蓝牙(如/etc/bluetooth/main.conf或/etc/default/tlp),它也会自动打开蓝牙。

要通过命令行防止蓝牙在启动时自动打开:

gsettings set org.blueman.plugins.powermanager auto-power-on false

或者通过 GUI:

  1. 点击蓝牙小程序 > 插件 > 电源管理器 > 配置
  2. 取消选中 自动开机

下次重启时,蓝牙小程序仍然可见,但蓝牙将处于关闭状态。

手动启用蓝牙

点击蓝牙小程序 > 打开蓝牙


3在Ubuntu 18.04中,这是我找到的唯一解决方案。即使你在/etc/bluetooth/main.conf文件底部将选项从AutoEnable=true改为AutoEnable=false,也无法关闭蓝牙。实际上,该选项用于发现新设备,而不是用于启用或关闭蓝牙。 - Alessandro D'lncal
禁用blueman/bluetooth applet的自动开机功能将阻止其在applet启动时(通常是登录时)启用蓝牙无线电如果之前已被禁用。我的蓝牙在启动后就已经启用了,所以我使用了tlp来管理计算机启动时蓝牙的状态(启用或禁用),voilà!请参考/etc/tlp.conf和/或其他答案。 - Totor
我启动一个zsh shell,我必须将rfkill block放在.zshrc文件中,参考这里 - Timo
1@Timo 我在我的回答中使用了/.profile,因为它与shell无关。然而,"当Zsh作为登录shell被调用时,它运行的是/.zprofile而不是~/.profile。原因是zsh与标准shell存在足够的不兼容性,会破坏脚本"(https://superuser.com/a/187673/93066)。我已经更新了我的回答以反映这一点。谢谢! - bmaupin

1. 在rc.local中屏蔽蓝牙

在文件/etc/rc.local的末尾,在exit 0这一行之前添加以下代码:

rfkill block bluetooth

这个方法可以解决问题,但只适用于使用旧版Ubuntu和upstart启动管理器的情况。
2. 在使用systemd作为启动管理器的Ubuntu 15.10上重新启用rc.local
在终端上执行以下命令,因为默认情况下Ubuntu 15.10不再使用/etc/rc.local文件:
sudo systemctl edit --full rc-local

打开一个编辑器。在文件末尾我添加了:

[Install]
WantedBy=multi-user.target

这些改变是由...激活的。
sudo systemctl reenable rc-local

现在文件/etc/rc.local正如您所知被使用。

3. 在启动时禁用blueman-applet

sudo sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/blueman.desktop
gnome-session-properties

现在 blueman-applet 是可见的,你可以从启动程序中禁用它

4. 重新启动以查看效果


4对于我在Ubuntu 17.04上使用blueman,gsettings set org.blueman.plugins.powermanager auto-power-on false这个命令起作用了,参考自https://wiki.archlinux.org/index.php/Blueman。尽管最后我还是选择了`sudo apt remove blueman`,然后通过系统设置来管理蓝牙,并勾选“在菜单栏中显示蓝牙状态”。问题出在Blueman的启动和蓝牙的开启上。 - Michael Allan Jackson

在终端中输入以下内容:
sudo gedit /etc/modprobe.d/blacklist.conf

在文件底部添加以下行:
blacklist bluetooth

保存文件并重新启动 - 蓝牙现在应该已经被禁用了。

这在我的电脑上行不通... - Floqqi
@Floqqi:你能再试一次吗?我已经更新了我的答案。 - Nathan Osman
2在我的Ubuntu 12 ThinkPad上尝试了大约20种方法,只有这个才起作用。 - OlivierBlanvillain

我在Ubuntu 18.04上找到了另一个使用tlp的答案,对我来说非常有效。可能首先需要安装tlp。
sudo apt install tlp

然后文件
/etc/default/tlp

包含一些关于设备(如Wi-Fi和蓝牙)的设置。这是关键。
RESTORE_DEVICE_STATE_ON_STARTUP

默认情况下设置为0。在我将其切换为1后,我的最后设置会在下次启动时记住。这意味着当我在顶部面板中禁用蓝牙时,它保持禁用状态,当我启用蓝牙时,它保持启用状态。此外还有一个关键点。
DEVICES_TO_DISABLE_ON_STARTUP

可以设置为
DEVICES_TO_DISABLE_ON_STARTUP="bluetooth"

现在每次启动都会禁用蓝牙。在更改此配置后,可以通过菜单和面板项启用和禁用蓝牙。我认为这比从内核模块中删除它要好。

在Ubuntu中,默认情况下不会安装TLP。您应该相应地更新您的帖子。 - linrunner
@linrunner 好的,我不知道那个。我在 Tuxedo 的全新 Ubuntu Budgie 上进行了测试,它可以正常工作。我已经修正了我的回答。 - Thomas Sablik
使用TLP是一个明智的选择,因为笔记本电脑用户肯定都会安装它。 - Tim Richardson
无论如何,对于ThinkPad用户来说,拥有tlp是很好的选择。 - Suzana
2TLP配置路径自v1.3版本起更改为/etc/tlp.conf - Abdul Rauf
好的开始,但你可能需要第二步以便在登录时蓝牙插件不会自动打开:点击蓝牙小程序 > 插件 > 电源管理器 > 配置。取消选中 自动开机 - Totor

你可以通过BUM来更改开机启动的服务。
安装它:sudo apt-get install bum
运行:sudo bum

enter image description here

取消勾选该框并点击“应用”。

谢谢,desgua,我一直在考虑这种工具。过去我用过一些,但它们变得过时了,新的 Ubuntu 只追求极简主义,没有任何类似的工具。这是你所知道的唯一一个还是最好的一个? - Robert
1也许它能工作,但一开始让我失望的是,它在启动时显示蓝牙未激活,为什么呢?而且当rfkill、applet和hciconfig显示它正在运行时,它却显示未运行。我尝试关闭再打开,但问题依然存在,服务仍然显示为关闭状态。我已经在启动时激活了该服务,但服务的状态仍然不正确。 - Robert
抱歉,在 elementaryOS Freya 上无法运行。 - Hoang Tran
当程序运行时,我会收到很多“使用未初始化的值”警告。抱歉,我不能相信这个。 - doug65536
现在,这个套餐不可用了。它显示“Bum是虚拟的”。 - Satya Prakash
Ubuntu已经转向systemd,因此要启用或禁用服务,我们必须使用“systemctl disable something”。 - desgua
软件应用中的BUM名称是BootUp-Manager。 - karel