linux下多个主机如何同时访问同一个不支持多连的蓝牙设备

现在我有个相对昂贵的蓝牙验证仪器用于验证特定物品真实性,主机上装有验证软件,该软件识别仪器然后配合完成验证。现在多个主机安装了软件,实际操作上他们不需要单独配置验证仪器,只需要共用一个就行,但是软件必须安装,且软件不允许破解。

我想到的办法是首先仪器通过蓝牙连接到机器X,上面装有程序Y,多个主机通过局域网连接到X,主机上装有虚拟蓝牙设备,虚拟得跟真实仪器一模一样,该虚拟设备通过网络连接到X上的程序Y,进而连接到验证仪器。我的问题是这套方案具体如何实现。我虽有丰富应用程序编程经验却没有驱动程序编程经验,更没有Linux编程经验。望高人多多指教,小弟叩拜!

该回答引用ChatGPT

你可以使用一个叫做"bluetooth-proxy"的工具来实现你的方案。bluetooth-proxy是一个Linux命令行工具,可以将本地蓝牙设备连接到远程蓝牙设备。这将允许你在一台机器上连接到蓝牙设备,并通过网络共享这个连接到其他机器上。


下面是一些基本步骤,让你可以开始配置你的系统:

  • 在机器X上安装bluetooth-proxy工具,使用以下命令:

    sudo apt-get install bluez-tools
    
  • 在机器X上启动bluetooth服务并连接到蓝牙设备:

    sudo systemctl start bluetooth
    bluetoothctl
    power on
    agent on
    default-agent
    scan on
    
  • 当你找到你的蓝牙设备时,输入以下命令来连接到它:

    pair XX:XX:XX:XX:XX:XX
    (其中XX:XX:XX:XX:XX:XX是蓝牙设备的MAC地址)
    connect XX:XX:XX:XX:XX:XX
    
  • 在机器X上设置bluetooth-proxy。在机器X上打开一个终端窗口,输入以下命令:

    sudo bluetoothctl
    agent on
    default-agent
    exit
    sudo nano /etc/systemd/system/bluetooth-proxy.service
    

    在文件中添加以下内容:

    [Unit]
    Description=Bluetooth Proxy
    Requires=bluetooth.service
    After=bluetooth.service
    [Service]
    ExecStart=/usr/bin/bluetoothctl -s /etc/bluetooth/serial.conf
    Restart=always
    User=root
    [Install]
    WantedBy=multi-user.target
    

    保存并关闭文件。

  • 在机器X上创建一个serial.conf文件来配置bluetooth-proxy,输入以下命令:
    sudo nano /etc/bluetooth/serial.conf
    
    在文件中添加以下内容:
    [General]
    Enable=Source,Sink,Socket
    [Bluetooth-Serial-Port]
    Address=XX:XX:XX:XX:XX:XX
    Channel=1
    (其中XX:XX:XX:XX:XX:XX是蓝牙设备的MAC地址)
    
    保存并关闭文件。
  • 启动bluetooth-proxy服务:
    sudo systemctl daemon-reload
    sudo systemctl start bluetooth-proxy
    sudo systemctl enable bluetooth-proxy
    
    现在,你应该能够通过网络共享连接到蓝牙设备了。你需要在每个其他机器上重复步骤1和步骤3,并将serial.conf文件中的Address字段设置为机器X的IP地址。这样,每台机器都可以通过虚拟的蓝牙设备连接到机器X上的蓝牙设备。

希望这些步骤可以帮助你实现你的方案。请记得备份你的配置文件,以免出现问题时可以恢复到原始状态。