Проверено в Ubuntu 7.10 с двумя bluetooth GPS-приёмниками: GlobalSat BT-338 и Nokia LD-3W
Установим (если не установлен) пакет bluez-utils через synaptic или:
sudo apt-get install bluez-utils
посмотрим файл /etc/default/bluetooth должна быть строка: BLUETOOTH_ENABLED=1
по умолчанию служба serial в bluetooth не работает при старте системы. исправим это:
sudo gedit /etc/bluetooth/serial.service
заменяем содержимое на следующее:
[Bluetooth Service] Identifier=serial Name=Serial service Description=Bluetooth Serial Port service Autostart=true
отредактируем файл hcid.conf :
sudo gedit /etc/bluetooth/hcid.conf
заменяем содержимое файла на следующее:
# # HCI daemon configuration file. # # HCId options options { # Automatically initialize new devices autoinit yes; # Security Manager mode # none - Security manager disabled # auto - Use local PIN for incoming connections # user - Always ask user for a PIN # security user; # Pairing mode # none - Pairing disabled # multi - Allow pairing with already paired devices # once - Pair once and deny successive attempts pairing multi; # PIN helper #pin_helper /usr/bin/bluepin; # D-Bus PIN helper #dbus_pin_helper; # Default PIN code for incoming connections passkey "1234"; } # Default settings for HCI devices device { # Local device name # %d - device id # %h - host name name "%h-%d"; # Local device class class 0x3e0100; # Default packet type #pkt_type DH1,DM1,HV1; # Inquiry and Page scan iscan enable; pscan enable; # Default link mode # none - no specific policy # accept - always accept incoming connections # master - become master on incoming connections, # deny role switch on outgoing connections lm accept; # Default link policy # none - no specific policy # rswitch - allow role switch # hold - allow hold mode # sniff - allow sniff mode # park - allow park mode lp rswitch,hold,sniff,park; # Authentication and Encryption (Security Mode 3) #auth enable; #encrypt enable; }
рестарт bluetooth:
sudo /etc/init.d/bluetooth restart
включаем наш GPS-приёмник и вводим:
hcitool scan
смотрим вывод:
Scanning ... 00:0D:B5:37:3B:A9 Nokia LD3W
Нам нужен MAC-адрес GPS-приёмника - в данном случае это 00:0D:B5:37:3B:A9 конечно это MAC конкретного устройства (уникальный) и для каждого устройства следует узнать и использовать его собственный MAC. теперь узнаем точно канал приёмника:
sdptool browse 00:0D:B5:37:3B:A9
в выводе находим строчку Channel: 1 это и есть нужный нам канал. вообще, по умолчанию он и должен быть Channel: 1 кстати приёмник Nokia LD-3W показал вывод этой команды, а BT-338 почему-то нет. и я просто использовал Channel: 1 с обоими приёмниками. далее используем полученные MAC и канал:
sudo gedit /etc/bluetooth/rfcomm.conf
добавляем:
rfcomm0 { bind yes; device 00:0D:B5:37:3B:A9; channel 1; comment "Serial Port"; }
в моём примере стоит rfcomm0, так как других serial connect у меня не было. соответственно для каждого последующего устройства число возрастает на 1 (rfcomm1, rfcomm2 etc) запускаем:
sudo rfcomm release 0
продолжаем (коннектим приёмник):
rfcomm connect 0 GPS в Ubuntu работает через демон gpsd,
устанавливаем всё, что нам минимально необходимо:
sudo apt-get install gpsd sudo apt-get install gpsd-clients
запускаем gpsd:
gpsd /dev/rfcomm0
теперь можно посмотреть что там со спутниками:
xgps
на программу XGPS можно будет создать ярлык в меню или на рабочий стол, чтобы не запускать каждый раз в терминале. и запуск сервиса GPS достаточно прост: включаем приёмник и запускаем gpsd (gpsd /dev/rfcomm0). в общем всё. можно пользоваться GPS в любой программе, поддерживающей работу с GPS-приёмником, например GPSDRIVE
PS лирическое послесловие: с приёмником GlobalSat BT-338 пробовал непрерывно использовать GPS в течении более трёх суток (приёмник и ноутбук были подключены к сети) - недостижимое время непрерывной работы для одной малоизвестной ОС с северо-запада США в ней что-нибудь, да у падёт за это время точно...
Дополнение от пользователя ur7icj:
Пытался несколько раз по этой инструкции завести свой HOLUX, не получалось, после этих манипуляций все завелось:
$ sudo gedit /etc/bluetooth/rfcomm.conf $ sudo rfcomm bind rfcomm0 $ rfcomm rfcomm0: 00:0B:0D:00:04:CE channel 1 clean $ gpsd /dev/rfcomm0 $ xgps
|