Bluetoothctl设置密码

时间:2016-01-10 19:03:21

标签: linux bluetooth raspberry-pi

我有一个Raspberry Pi 2运行Raspbian内核4.1.15和Bluez版本5.23。

我希望能够将设备(如Android手机)连接到rapsberry,rapsberry应该接受连接而无需用户交互。

使用bluetoothct我可以让设备被发现,将它与另一台设备配对,但我还没有找到像蓝牙代理一样设置引脚的方法

bluetooth-agent PIN

蓝牙代理在我的系统上不再可用,有没有办法可以用bluetoothctl做到这一点?

6 个答案:

答案 0 :(得分:12)

这要归功于kaylum:

public class ColorGenerator {

    public static ColorGenerator DEFAULT;

    public static ColorGenerator MATERIAL;

    static {
        DEFAULT = create(Arrays.asList(
                //your list of default tints
        ));
        MATERIAL = create(Arrays.asList(
                //your list of material colors
        ));
    }

    private final List<Integer> mColors;
    private final Random mRandom;

    public static ColorGenerator create(List<Integer> colorList) {
        return new ColorGenerator(colorList);
    }

    private ColorGenerator(List<Integer> colorList) {
        mColors = colorList;
        mRandom = new Random(System.currentTimeMillis());
    }

    public int getRandomColor() {
        return mColors.get(mRandom.nextInt(mColors.size()));
    }

    public int getColor(Object key) {
        return mColors.get(Math.abs(key.hashCode()) % mColors.size());
    }
}

然后我将树莓与手机配对。

$bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# discoverable on
Changing discoverable on succeeded
[bluetooth]# pairable on
Changing pairable on succeeded
[bluetooth]# agent NoInputNoOutput
Agent registered
[bluetooth]# default-agent 
Default agent request successful

答案 1 :(得分:7)

我遇到了同样的问题。如果您在agent之后按两次标签,则会看到可用座席列表; KeyboardOnly在没有通知的情况下正常工作:

[bluetooth]# agent on          # accidentally used wrong agent
Agent registered
[bluetooth]# agent 
DisplayOnly      DisplayYesNo     KeyboardDisplay  KeyboardOnly     NoInputNoOutput  off              on               
[bluetooth]# agent KeyboardOnly 
Agent is already registered    # can't use two agents at one
[bluetooth]# agent off         # unregister agent
Agent unregistered
[bluetooth]# agent KeyboardOnly   # register proper agent
Agent registered
[bluetooth]# pair XX:XX:XX:04:F5:7C 
Attempting to pair with XX:XX:XX:04:F5:7C 
[CHG] Device XX:XX:XX:04:F5:7C Connected: yes
Request passkey
[agent] Enter passkey (number in 0-999999): 722504
[MoarBacon]# pair XX:XX:XX:04:F5:7C 
Attempting to pair with XX:XX:XX:04:F5:7C 
[CHG] Device XX:XX:XX:04:F5:7C Paired: yes
Pairing successful

答案 2 :(得分:2)

我已经安装了bluez-5.43。这是在树莓派上自动执行配对过程的方法。

(1)首先测试这样的一行,以确保蓝牙代理有效:

 bluez-5.43/test/simple-agent -c NoInputNoOutput

(2)要自动配对,请将此代码放入一个外壳文件(我命名为mine pairbot.sh):

if [ "$(id -un)" != "pi" ]; then
        exec sudo -u pi $0 "$@"
    fi

    export XAUTHORITY=/home/pi/.Xauthority
    export DISPLAY=:0

     lxterminal --command="/bin/bash -c '/home/pi/bluez-5.43/test/simple-agent -c NoInputNoOutput &; read'"

(3)转到crontab:

sudo cronetab -e

(4)在底部添加:

@reboot sleep 20 &&  /home/pi/pairbot.sh > /home/pi/blelog.txt 2>&1

(5)重新启动并测试它是否有效。

对于其他面临相同问题的人,我的建议是查看您的bluez文件夹(或者如果您没有安装最新版本的bluez),然后搜索对“简单代理”说“测试”的文件夹查找文件路径。从这里,您应该能够构建上面显示的命令行(1)。希望它也对您有用。

答案 3 :(得分:0)

首先,您必须针对引脚请求配置sspmode 0: hciconfig hci0 sspmode 0

并使用bt-agent复制(您也可以作为守护进程运行):

bt-agent -c NoInputNoOutput -p /root/bluethooth.cfg

编辑文件配置,您可以输入mac地址和图钉: 例如:

XX:XX:XX:XX:XX:XX 1234

或者,如果您希望将所有设备的图钉固定为相同的图钉密码,例如1234,请编辑文件,如下所示: * 1234

这对我有用!

答案 4 :(得分:0)

https://github.com/nokia/rcm-bluez/blob/master/client/bluez-5.43/test/simple-agent

https://raw.githubusercontent.com/pauloborges/bluez/master/test/bluezutils.py

@Ion Flare想法非常适合用于树莓派的设置自动配对蓝牙。我的回答中只有一点点调整:我遇到了import bluezutils的错误,因此为了绕过这个错误,我只想说下载上面的文件simple-agentbluezutils.py。放在相同的位置,对我来说是/ home / pi。并运行提到的命令@Ion Flare python simple-agent -c NoInputNoOutput

在用例中,我更改了一个简单代理文件以接受每个连接和服务,以使事情变得简单。

答案 5 :(得分:0)

这对我有用:

蓝牙控制 代理关闭 打开 可在 可配对 代理无输入无输出 默认代理 一对 退出