重新加载模块btusb后蓝牙才有效

重新加载模块btusb后蓝牙才有效

我有一台带 Wifi 和蓝牙的 ASUS PCE-AX3000,但是蓝牙部分内部连接到 USB 总线。通常当我启动/重启时,蓝牙无法工作,我只能手动运行以下命令才能使其工作:

sudo modprobe -r btusb && sudo modprobe btusb

这将删除 btusb 模块,然后再次加载。使用此方法加载后,它将一直工作,直到我可能再次重新启动或在其他时间再次启动。

每当我想使用蓝牙耳机或蓝牙控制器玩游戏时,都必须这样做,这非常烦人。对我来说这是可行的,但我想找到一种在启动时正确加载的方法。可能通过systemd,因为如果我在或类似命令中添加命令,/etc/profile它不起作用。我必须等待很短的一段时间才能运行命令。

我的系统是 Ubuntu 20.04 LTS,当前内核为:5.13.0-25-generic

答案1

您可以使用 systemd-service 执行此操作。为此,您必须在 /etc/systemd/system 中创建一个 .service 文件和一个实际执行该命令的脚本。

我不确定我的指示是否是最佳实践,但也许有人可以纠正我。

我们首先需要 .service 文件。我使用以下命令创建了它:sudo nano /etc/systemd/system/reload-bt-mod.service

在此文件中,我们需要有一个 [Unit]、一个 [Service] 和一个 [Install] 部分:

[Unit]
Description=Reload Bluetooth Kernel module
#You can enter a custom description here

[Service]
Type=oneshot
#This type is used for services that normally run only once
RemainAfterExit=no
#If set to yes, the service will be shown as run after it finished
ExecStart=/usr/local/bin/reloadbtmod
#This points to the script that we want to be executed

[Install]
WantedBy=multi-user.target
#When this service will be started

(有关此文件中参数的更多信息,请参见这里. 有关 WantedBy=multi-user.target 的更多信息这里

保存它,然后让我们创建要执行的脚本文件。我使用以下命令执行此操作:sudo nano /usr/local/bin/reloadbtmod

我们只需添加所需的内容:

#!/bin/bash
#sleep 30s #Delays the execution by 30 seconds
sudo modprobe -r btusb
sudo modprobe btusb

我们需要这个文件可执行,因此输入此命令:

sudo chmod +x /usr/local/bin/reloadbtmod

您可以通过从终端调用脚本来尝试它是否有效。

现在我们只需要启用 systemd 服务(启用后它将在系统启动时启动):

sudo systemctl enable reload-bt-mod.service

完成的!

现在您可以重新启动并尝试是否有效。执行systemctl status reload-bt-mod.service以获取有关该服务的信息。

如果它开始得太早(但是人们会知道这一点)你需要修改 WantedBy 值或#sleep 30s在脚本中取消注释。

相关内容