跳转到内容

Linux 指南/Linux 和蓝牙

来自维基教科书,开放世界中的开放书籍

以下只是在 Linux 环境中连接蓝牙设备(在本例中为诺基亚手机)的简单示例。

出于本文的目的,我们假设在计算机上安装了 Linux Mandrake 10.0(内核 2.6.13,X86)。

配置和连接

[编辑 | 编辑源代码]

首先,我们需要 Bluez 协议,通常在您的发行版中以 RPM 包的形式提供,然后我们需要启动蓝牙服务。

[[email protected] user]# service bluetooth start

现在需要设置 PIN 码(如果您需要)以及本地设备名称链接,为此,我们编辑(例如,使用 JOE)文件/etc/bluetooth/hcid.conf:

[[email protected] user]# joe /etc/bluetooth/hcid.conf

修改以下摘录

PIN 摘录

# PIN helper 
pin_helper /etc/bluetooth/mypin.sh;  

其中 mypin.sh 是一个临时创建的文件。

名称摘录

# Local device name
# %d - device id 
# %h - host name
name "userdomain (%d)";

注意:文件mypin.sh包含

#!/bin/bash
echo "PIN:XXX"

其中 XXXX 代表您的 PIN 码。

现在是时候搜索设备了

[[email protected] user]# hcitool scan

这应该返回类似于

12:34:56:78:90:12 user1

换句话说,bdaddr(BT 地址)和设备名称,请记下 bdaddr,现在是时候发现远程设备上的可用服务以及它们所在的通道了

[[email protected] utente]# sdptool records 12:34:56:78:90:12

根据我们分析的设备类型,请求会返回一个很长的配置文件列表,在本例中,我们对拨号配置文件感兴趣,所以让我们看看它是否在通道 1 上可用

Service Name: Dial-Up Networking
Service RecHandle: 0x10007
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x454e
  encoding: 0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100

然后

[[email protected] user]# rfcomm bind 0 12:34:56:78:90:12 1

换句话说,我绑定了一个虚拟串行端口,rfcomm0 (/dev/bluetooth/rfcomm/0),通过 rfcomm 工具与远程设备调制解调器连接,尚未连接,但已准备好进行软件请求,让我们看看

[[email protected] user]# rfcomm show 0

这将导致

rfcomm0: 12:34:56:78:90:12 channel 1 clean

BT 调制解调器已准备好在/dev/bluetooth/rfcomm/0

无需提及,在此期间,您已在远程设备上接受了连接。

或者,从 Linux 端连接,准备一个代理以正确响应 PIN 请求,然后连接

[[email protected] user]# bluetooth-agent 1234 12:34:56:78:90:12
[[email protected] user]# rfcomm connect 0 12:34:56:78:90:12

然后,在另一个终端中,您可以例如在 /dev/rfcomm0 上打开一个终端

[[email protected] user]# minicom /dev/rfcomm0


蓝牙设备作为调制解调器

[编辑 | 编辑源代码]

要将此即用型设备用作调制解调器,我建议使用 wvdial 程序作为拨号程序,为此,我们需要编辑其配置文件/etc/wvdial.conf,像这样

[Dialer Defaults]
Modem = /dev/bluetooth/rfcomm/0
Baud = 460800
Dial Attempts = 1
Init1 = ATZ
Init3 = AT+CGDCONT=1,"IP","web.omnitel.it"
Phone = *99#
Carrier Check = no
Stupid Mode = yes
Username = ""
Password = ""

注意:此示例来自诺基亚手机上 Vodafone 意大利的正常配置,对于不同的国家/运营商/品牌配置,请使用关键字 +CGDCONT 和运营商名称在 Google 上搜索,大多数情况下您只需要修改字符串

Init3 = AT+CGDCONT=1,"IP","web.omnitel.it"

根据您的运营商规格,以及

Phone = *99# 

根据您手机的品牌。

拨号并连接...

[[email protected] utente]# wvdial

祝您好运!!!

其他有用命令

[编辑 | 编辑源代码]
  • hciconfig
  • hcitool scan
  • hcitool info BT_ADDRESS

BT_ADDRESS 可能类似于 00:89:34:62:67:52

  • l2ping BT_ADDRESS
  • sdptool browse BT_ADDRESS
  • sdptool search DUN
  • hciattach -l
[编辑 | 编辑源代码]
华夏公益教科书