我正在尝试使用bash脚本自动将ePuck机器人与Linux绑定/配对(而不是连接)。我对蓝牙CTL做了很多研究,但没有发现什么真正有用的东西。问题是ePuck使用一个固定的pin,所以每次我想绑定/配对时都必须手动键入pin(每次完成工作后我都删除/取消绑定ePuck,这就是为什么每次都必须重新输入pin的原因)。
它不应该是bashscript。我听说我也可以用蟒蛇。但我是Linux和编码的新手,所以我才这么问。
这就是我目前所拥有的(2228是ePuck的pin):

#!/bin/bash

##first tried with EOF
bluetoothctl <<EOF
power on
agnet on
scan on
pair 10:00:E8:AD:77:31
2228
EOF

##then with echo -e
echo -e 'power on\nagent on\nscan on\npair 10:00:E8:AD:77:31\n2228\n' | bluetoothctl

我不知道如何使用e of或echo-e,但我在互联网上有这个解决方案。两种方式都没有配对。看起来bluetoothctl退出得太快了。

最佳答案

bluetoothctl接口可能不适合您的用例。您可以尝试以下dbus send命令(未测试,但这应该有效)。

dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Set string:"org.bluez.Adapter1" string:"Powered" variant:boolean:true
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0 org.freedesktop.DBus.Properties.Set string:"org.bluez.Adapter1" string:"Discoverable" variant:boolean:true
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter1.StartDiscovery
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0/dev_10_00_E8_AD_77_31 org.freedesktop.DBus.Properties.Set string:"org.bluez.Device1" string:"Trusted" variant:boolean:true
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0/dev_10_00_E8_AD_77_31 org.bluez.Device1.Pair
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0/dev_10_00_E8_AD_77_31 org.bluez.Device1.Connect

如果bluetooth.service中的套接字可激活,则无需启动bluetooth守护程序服务。
要通过dbus应答密钥,您可能还需要注册默认代理或外部代理管理器来应答。
dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0 org.bluez.AgentManager1.RegisterAgent

10-02 15:11