我想在系统启动时启用蓝牙设备。
推荐的方法是什么?
命令是sudo hciconfig hci0 up
。
我应该把它放进去/etc/rc.local
吗?或者我应该使用update-rc.d
?
如果没有“正确”的方法来做到这一点,我会选择/etc/rc.local
.
谢谢。
编辑
按照@krt的回答,我添加了@reboot cronjob,但hci0
重新启动时仍然处于关闭状态。根据/var/log/syslog
作业是否运行正确。
1136 May 24 11:17:20 klein /usr/sbin/cron[2107]: (CRON) INFO (pidfile fd = 3)
1137 May 24 11:17:20 klein /usr/sbin/cron[2108]: (CRON) STARTUP (fork ok)
1138 May 24 11:17:20 klein /usr/sbin/cron[2108]: (CRON) INFO (Running @reboot jobs)
答案1
您的系统是否bluetoothd
自启动?如果是,那么您应该检查其配置:它可能会覆盖您hciconfig
在启动时所做的设置。
例如,[Policy]
my 部分/etc/bluetooth/main.conf
有一个AutoEnable
设置,默认为false
。如果将其设置为true
,则所有蓝牙接口都会自动激活bluetoothd
。
如果您想要比这更细粒度的控制,您可能必须使用bluetoothctl
或其他一些命令(取决于您的 BlueZ 版本)。
答案2
和系统单元,例如创建/usr/lib/systemd/system/bluetooth-audio.service
并添加After=bluetooth.target
,以便使单元在bluetooth.target
到达后立即启动并在失败BindsTo=bluetooth.target
时使其失败:bluetooth.target
#!/bin/sh
[Unit]
Description=Bluetooth Audio Connect
ConditionPathIsDirectory=/sys/class/bluetooth
After=bluetooth.target
BindsTo=bluetooth.target
[Service]
ExecStart=/home/scripts/bluetooth_connect.sh
Type=simple
systemctl daemon-reload
并systemctl start bluetooth-audio.service
启动设备。问题是,udev
在还没有蓝牙的情况下,运行脚本是毫无用处的。这是相应的(我的)蓝牙连接和蓝牙断开连接shell 脚本。
答案3
我使用的是 Ubuntu 20.04 LTS,并使用 systemd.service 在启动时加载我的 hciconfig 脚本。
将脚本保存在/usr/bin/下
sudo cat /usr/bin/hciconfig_bt.sh #! /bin/bash # 'Interference between Headphones and Mouse' fix # from https://wiki.archlinux.org/index.php/Bluetooth#Interference_between_Headphones_and_Mouse hciconfig hci0 lm ACCEPT,MASTER hciconfig hci0 lp HOLD,SNIFF,PARK`
创建systemd.service单元并将其移动到/etc/systemd/system/下
cat /etc/systemd/system/hciconfig_bt.service [Unit] Description=Bluetooth Mouse & Headphone Interference Fix systemd service. [Service] Type=forking ExecStart=/bin/bash /usr/bin/hciconfig_bt.sh [Install] WantedBy=multi-user.target
确保
chmod +x
对脚本和 systemd.service 单元执行此操作。运行
systemctl start 'your systemd.service unit'
以确保运行成功。最后,运行
systemctl enable 'your systemd.service unit'
以在启动时调用单元。
如果您不熟悉 systemd.service,请先查看以下文章。
https://www.linode.com/docs/quick-answers/linux/start-service-at-boot/ https://www.freedesktop.org/software/systemd/man/systemd.service.html
答案4
将以下内容放入/etc/cron.d/<yourfilename>
#enable BT
@reboot root hciconfig hci0 up