我应该在哪里放置`hciconfig hci0 up`来启动

我应该在哪里放置`hciconfig hci0 up`来启动

我想在系统启动时启用蓝牙设备。

推荐的方法是什么?

命令是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-reloadsystemctl start bluetooth-audio.service启动设备。问题是,udev在还没有蓝牙的情况下,运行脚本是毫无用处的。这是相应的(我的)蓝牙连接蓝牙断开连接shell 脚本。

答案3

我使用的是 Ubuntu 20.04 LTS,并使用 systemd.service 在启动时加载我的 hciconfig 脚本。

  1. 将脚本保存在/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`
    
  2. 创建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
  1. 确保chmod +x对脚本和 systemd.service 单元执行此操作。

  2. 运行systemctl start 'your systemd.service unit'以确保运行成功。

  3. 最后,运行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

相关内容