BlueZ 5.47安装方法咨询及升级后旧版本守护进程切换问题
BlueZ 5.47 安装与版本切换指南
下面我来一步步帮你搞定这两个问题:
一、如何安装BlueZ 5.47?
首先得准备好编译依赖,不同Linux发行版的命令略有不同,这里以Debian/Ubuntu系列为例:
- 先更新软件源列表:
sudo apt update - 安装编译必需的工具和库:
sudo apt install build-essential libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
接下来获取并编译BlueZ 5.47源码:
- 下载官方源码包:
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.47.tar.xz - 解压源码:
tar xvf bluez-5.47.tar.xz - 进入源码目录:
cd bluez-5.47
配置编译参数(这里推荐加上常用的启用选项,方便后续使用):
- 运行配置脚本:
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-library --enable-experimental --enable-tools - 开始编译:
make - 安装到系统:
sudo make install
二、编译安装后重启仍启动旧版本,怎么切换到5.47?
这种情况大多是系统默认的蓝牙守护进程(bluetoothd)还是旧版本的二进制,或者systemd服务没指向新安装的文件。按以下步骤操作就能解决:
先确认新旧版本的位置:
- 查看当前正在使用的
bluetoothd路径:which bluetoothd,通常会显示旧版本的位置(比如/usr/sbin/bluetoothd) - 查找新编译的
bluetoothd:sudo find /usr -name bluetoothd,如果按上面的--prefix=/usr安装,应该也是/usr/sbin/bluetoothd,但可能旧版本没被覆盖。
- 查看当前正在使用的
替换旧的二进制文件:
- 先停止当前蓝牙服务:
sudo systemctl stop bluetooth - 备份旧版本以防万一:
sudo mv /usr/sbin/bluetoothd /usr/sbin/bluetoothd.old - 重新安装确保覆盖:
sudo make install(如果还在源码目录的话,直接复制也可以:sudo cp ./src/bluetoothd /usr/sbin/)
- 先停止当前蓝牙服务:
检查并更新systemd服务配置:
- 查看蓝牙服务文件的执行路径:
cat /lib/systemd/system/bluetooth.service,重点看ExecStart行 - 如果路径不对,编辑服务文件:
sudo nano /lib/systemd/system/bluetooth.service,把ExecStart改成新的/usr/sbin/bluetoothd(通常后面还会带参数,比如--noplugin=sap,保留即可) - 重新加载systemd配置:
sudo systemctl daemon-reload
- 查看蓝牙服务文件的执行路径:
验证并设置开机启动:
- 启动蓝牙服务:
sudo systemctl start bluetooth - 设置开机自启:
sudo systemctl enable bluetooth - 检查版本:
bluetoothd --version,如果显示5.47就说明成功了!
- 启动蓝牙服务:
另外,为了防止系统更新时包管理器把版本换回旧的,可以锁定BlueZ包:sudo apt-mark hold bluez
内容的提问来源于stack exchange,提问作者Kotch
相关产品推荐
相关产品推荐

