Bluez 4.x

Jan. 4th, 2011 11:03 am
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Подарил тут жене на новый год новый нетбук, поставил на него sqeeze.
Пришлось разбираться с поддержкой bluetooth в этом дистрибутиве.

Мне и раньше пару раз сообщали что моя программка btpasskey не работает с Bluez 4.x.
Я отмахивался, говоря, что вот появится у меня где-нибудь машина с Bluez 4.x, тогда и займусь.

Ну вот этот момент настал.

Обнаружилось что в очердном major release они опять сделали до основания а затем. Вместо кучи мелких pand hcid sdpd, появился один огромный bluetoothd. И все что раньше делалось запуском этих мелких демонов с параметрами предполагается делать через dbus api этого bluetoothd. Правда, серверную часть DUN и PAN они, естественно, забыли. Поэтому в Debian остался пакет bluez-compat, содержащий dund и pand.

Зато клиентская часть PAN реализуется легко. Никаких sudo не надо. Просто дернул метод Connect и все работает. Секьюрити на уровне Windows95. Правда, скрипт, прописанный в /etc/bluetooth/network.conf не вызывается. Но это и не страшно. Если в /etc/network/interfaces написано allow-hotplug bnep0 - само поднимется.

Но вот за идею что при завершении процесса, позвавшего функцию Connect (вернее при отключении его от системной шины dbus) сетевое соединение прерывается, хочется дизайнерам этого API оторвать яйца.

Из положительных черт - стали класть в examples набор питоновских скриптов, куда более осмысленных чем то, что там лежало в предыдущих версиях. В частности есть скрипт test-network которым PAN-соединения можно поднимать, и он почти достаточен для моих целей, если бы не идиотская система что ему нужно висеть запущенным все время, пока пользователь пользуется сетью,
и скрипт simple-agent который почти реализует ту функциональность ради которой я писал btpasskey.

Почти - потому что его писал человек, не имеющий ни малейшего представления о правилах хорошего тона при написании юниксовых утилит. Чуть-чуть поправить на предмет буферизации stdout и кодов завершения, и можно пользоваться.

С переписыванием test-network будет сложнее. Там нужно аккуратно разбираться с демонизацией и взаимодействием демонизации с dbus. Видимо проще всего коннектиться к dbus уже после fork, а общение между forground-ным процессом и демоном, необходимое до момента, когда соединение установлено, реализовывать каким-то другим способом.
(deleted comment)
(deleted comment)
(deleted comment)
(deleted comment)
(deleted comment)
(deleted comment)

Date: 2011-01-04 12:38 pm (UTC)
From: [personal profile] ramendik
Погуглил. Там предполагается некоторое количество танцев с бубном, но, вероятно, это лучше, чем пытаться собирать команду по спасению утопающего icewm.

Правда, я сейчас посмотрел на sourceforge и обнаружил, что captnmark оживился. Может быть, я зря списываю icewm.

Date: 2011-01-04 10:43 am (UTC)
From: [identity profile] taris_marh.livejournal.com
Видимо, надо делать "протез" на C/C++ (чтоб меньше памяти ел), который будет поднимать сеть, освобождать все ресурсы, какие возможно и зависать в памяти, пока не убьют. Это если не пропихивать патч, чтобы вылечить API от такой странной болезни. Или писать довески к какому-нибудь Wicd, NM и тому подобным сетевым мнеджерам, которые и так висят в памяти постоянно. Потому что если какой-то программулине нужна сеть, она её подняла, пользуется. Тут какая-то другая программа, которой тоже нужна сеть, стартует, видит, что сеть есть и начинает пользоваться. А тут первая закончила работу и выключилась. Внимание вопрос: что будет со второй программой, которая даже не думала даже, как эта сеть появилась, потому как сеть эта на момент старта уже была?

Date: 2011-01-04 11:31 am (UTC)
From: [identity profile] taris_marh.livejournal.com
Ну да, нужно мне почту проверять не реже раза в час, так скрипт пинает эту поднималку, проверяет почту, а тут другая программка, которая тоже должна по расписанию что-то делать и тоже должна сеть поднимать (ибо я ей так сказа, что должна), запускается. А запускаются они независимо. В общем, работать это должно на той же логике, что и всякие ifup/ifdown: сказали включить сеть - включили, сказали выключить - выключили. А я уж сам как-нибудь решу, откуда мне сеть включать, а откуда выключать.

Date: 2011-01-04 12:56 pm (UTC)
From: [identity profile] taris_marh.livejournal.com
Так и я о том же, в общем-то. Единственно что, при использовании счётчика есть, возможно, смысл делать некоторую задержку на отключение соединения, чтобы если вдруг кому-то оно прямо сейчас понадобилось, то чтобы не приходилось подолгу запускать его. Но это для медленно поднимающихся соединений типа акустического модема. Насколько быстро подключается соединение по BT, не знаю - так и не обзавёлся таким интерфейсом, хоть и порываюсь купить свистульку синезубую.

Date: 2011-01-04 01:08 pm (UTC)
From: [identity profile] crazy-daemon.livejournal.com
Свисток может быть довольно маленьких размеров класса "воткнул в порт и забыл его там" особенно, если портов хватает.

Date: 2011-01-04 02:02 pm (UTC)
From: [identity profile] alexandr0.livejournal.com
Долгоживущие программы, говорящие явно disconnect, могут забыть его сказать, если их автор напортачит.

Date: 2011-01-04 11:42 am (UTC)
From: [personal profile] ramendik
Честно сказать, я не понял, зачем для этой задачи демонизация. Описание "сеть дорогая, используется только с явного согласия пользователя" вроде бы однозначно ведёт к "юзер завершил сессию, значит сеть можно выключить" (поскольку некому давать явное согласие).


Date: 2011-01-06 04:24 pm (UTC)
From: [identity profile] edo-rus.livejournal.com
Ну вроде систему виртуальной памяти у нас еще не сломали, так что без разницы на чем писать. Отсвопится и будет в свопе лежать. btpasskey был написан на C вовсе не из соображений "чтобы меньше памяти жрал" а из соображений "чтобы меньше библиотек за собой тянул". Потому что тогда появляется реальная возможность запихнуть его в openwrt или там олеговскую прошивку для роутеров

к слову - на роутере вполне может оказаться, что свопиться некуда.

Date: 2011-01-07 11:34 am (UTC)
From: [identity profile] anton.martchukov.com (from livejournal.com)
Возможность коннекта к PAN точки доступа в GNOME таки есть посредством NetworkManager в связки с блютуз аплётом. Я так в интернет с ноутбука хожу через SonyEricsson K790i в котором эта самая PAN AP имеется для раздачи GPRSа.

Date: 2011-01-07 11:57 am (UTC)
From: [identity profile] anton.martchukov.com (from livejournal.com)
Тут вопросов нет. Сам с этим мучался пока btpasskey не нашёл.

Date: 2011-01-04 04:49 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com

По-моему, создатели bluez userspace просто юродивые. Мне надо срочно взять себя в руки, и портировать affix userspace на современный bluetooth.

Date: 2011-01-05 02:40 pm (UTC)
From: [identity profile] shadowfoto.livejournal.com
на affix, помнится, в /usr/share/doc валялся пухленький такой набор пдфок от авторов(nokia), описывавших примерно все о чем можно захотеть.

Date: 2011-01-05 03:40 pm (UTC)
From: [identity profile] shadowfoto.livejournal.com
оно, к сожалению, сдохло во времена где-то bluez 1.x-2.x, потому вкусные плюшки просто не успели/не стали делать.

Date: 2011-01-05 05:09 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Ну, a2dp там по-моему просто нет. А зачем описывать все usage scenario для rfcomm? У мну он (под блюзом, да. Патченным на предмет static pin на исходящие, да) безо всяких usage scenario работает.



Date: 2011-02-01 09:35 am (UTC)
From: [identity profile] tionkw.livejournal.com
Подписываюсь под каждым словом.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

July 2025

S M T W T F S
  12345
6789 1011 12
13141516 17 1819
20212223 242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 27th, 2025 10:49 am
Powered by Dreamwidth Studios