Показаны сообщения с ярлыком bluetooth. Показать все сообщения
Показаны сообщения с ярлыком bluetooth. Показать все сообщения

2 мая 2011 г.

Восстановление работоспособности blueman

В один из дней после обычного для Sid-а aptitude dist-upgrade поломался bluetooth-applet. Точнее, blueman-applet, заменяющий дефолтный при установке сотфины blueman - более функционального и приятного менеджера голубозубых соединений. Сегодня выдалась свободная минутка, поэтому дошли руки поглядеть внимательнее, что сломалось.
Симптоматика следующая - после запуска рабочего стола (и апплета вместе с ним) blueman не может получить доступ к BT-адаптеру, показывая пустой список подключенных устройств, хотя сам адаптер подключен и системой корректно определяется:
delayer@inspire:~$ sudo hciconfig -a
hci0:    Type: BR/EDR  Bus: USB
    BD Address: 00:15:83:35:1D:6F  ACL MTU: 510:8  SCO MTU: 48:10
    UP RUNNING PSCAN ISCAN
    RX bytes:2056 acl:0 sco:0 events:80 errors:0
    TX bytes:4694 acl:0 sco:0 commands:78 errors:0
    Features: 0xff 0xfe 0xff 0xfe 0x98 0x3f 0x79 0x83
    Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
    Link policy: RSWITCH HOLD SNIFF
    Link mode: SLAVE ACCEPT
    Name: 'ISSCEDRBTA'
    Class: 0x5a0104
    Service Classes: Networking, Capturing, Object Transfer, Telephony
    Device Class: Computer, Desktop workstation
    HCI Version: 2.1 (0x4)  Revision: 0x90e
    LMP Version: 2.1 (0x4)  Subversion: 0x316
    Manufacturer: Integrated System Solution Corp. (57)
Такой вот стоит дешевенький донгл без роду-племени (хотя, может и вру, на корпусе логотип Acorp-а есть). Запуск апплета (или любой другой софтинки вида blueman-*) консольно проходил успешно, но с тем же результататом - нужные пункты меню выбирались, но не нажимались, а в логах узрелось нечто вида: "except dbus.DBusServiceUnknownError:". Раскопки этих ваших интернетов привели к workaround-у: а) добавить пользователя в группы dbus и uucp б) запускать апплет через ck-launch-session (некая приблуда ConsoleKit-ная). То бишь проблема, оказывается, с правами доступа. Дальнейший гуглинг вывел на файл /etc/dbus-1/system.d/bluetooth.conf, 
 <!-- This configuration file specifies the required security policies
     for Bluetooth core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own="org.bluez"/>
    <allow send_destination="org.bluez"/>

    <!-- allow root to send to agents -->
    <allow send_interface="org.bluez.Agent"/>
  </policy>

  <!-- allow users at the console, see consolekit or libpam-foreground -->
  <policy at_console="true">
    <allow send_destination="org.bluez"/>
  </policy>

  <!-- allow users of bluetooth group to communicate with hcid -->
  <policy group="bluetooth">
    <allow send_destination="org.bluez"/>
  </policy>

  <policy context="default">
    <deny send_destination="org.bluez"/>
  </policy>

</busconfig>
где описываются политики для демона bluetoothd. Чтение его внутренностей показало, что доступ к демону и иже с ним имеют только а) root (отсюда работоспособность через sudo и ck-launch-session) и б) группа bluetooth.
Таким образом sudo adduser delayer bluetooth с последующим релогином проблему решает.
З.Ы.: XML-файлик удалось беспроблемно вставить в текст после прогона через эту форму.

27 мар. 2010 г.

anyremote HOWTO

Задолбавшись в очередной раз вставать с дивана, дабы прибавить звук или запустить очередную серию "Теории большого взрыва", захотелось облегчить свою тяжелую и неказистую жизнь ваянием "лентяйки". Так как из инструментария имелся, собственно, компьютер с Debian Sid и телефон с J2ME, умеющий Bluetooth, использовать будем именно их ;). Для рабочей станции был прикуплен самый дешевый голубозубый адаптер (Acorp какой-то). 
delayer@inspire:~# lsusb
Bus 002 Device 002: ID 1131:1004 Integrated System Solution Corp. Bluetooth Device
Ресерч по предмету управления через блютуз мометнально привел на страничку проекта anyremote, полностью удовлетворяющего моим запросам. Как сам anyremote, так и его фронтенды kanyremote и ganyremote (угадай, для какой DE который ;) ), наличествуют в репозиториях, ставим оттуда.
Сразу оговорюсь, что увидеть kanyremote мне так и не удалось, ибо пакет требует в качестве зависимости python-kde4, который на сегодняшний день является сломанным пакетом (для Sid точно). Если у вас KDE чуть постарее чем 4.3.4-2, то установиться должно. Я же поставил ganyremote.
Наверное, для знакомства с возможностями программы, да и для закачки J2ME-клиента в телефон (однако, можно jar/jad-файлы взять отсюда), графический фронтенд попробовать стоит. Не буду останавливаться на менюшках, опциях и прочем - интерфейс локализован, всё, на мой взгляд, интуитивно понятно. К тому же, у проекта достаточно хорошая документация.  Отмечу лишь, что у GUI-я вырисовалась одна очень неприятная особенность: хотя, судя по опциям, программа должна уметь, учуяв в зоне действия голубозуба телефон, запомненный в настройках, запускать на управление сервер, указанный в этих самых настройках, она этого не делает. Чтобы чем-то поуправлять, нужно вручную выбрать в списке нужный сервер и даблкликнуть на нем. Тогда он перейдет в состояние "Управляется", и телефон этот сервер увидит и даст подключиться. 
Избежать такой вселенской несправедливости можно, запустив anyremote напрямую, в обход фронтенда. А чтобы иметь возможность управления несколькими приложениями, можно запустить несколько копий anyremote с разными конфигурационными файлами. Для упрощения и автоматизации этого процесса я накидал вот такой вот скриптик: 
#!/bin/bash

AR=/usr/bin/anyremote
CFGDIR=/usr/share/anyremote/cfg–data/Server–mode/
CONNECT=bluetooth
CHAN=20
USER=delayer
for PROG in mplayer vlc tvtime fileManager2 amarok
do
if [ –e $CFGDIR/$PROG.cfg ]; then
$AR –s $CONNECT:$CHAN –u $USER –name $PROG –f $CFGDIR/$PROG.cfg &
let "CHAN += 1"
echo $CHAN
else
echo "Для запуска управления программой $PROG не найден конфигурационный файл $PROG.cfg!"
fi
done
Запускаются пять серверов, которые java-клиент находит в зоне действия и может подключиться к любому выбранному. Anyremote позволяет запускать, контролировать и закрывать приложения, управление которых организуется. 
Да, разработчиками предлагается конфигурация типа all-in-one, где одним сервером запускается интерфейс управления сразу несколькими программами. Но у меня подружиться с этим не вышло: на отдельных конфигах сабжевые проги управляются стабильнее и проще. Именно поэтому был избран путь запуска отдельного процесса anyremote для каждого сервера.
Have fun! $)
P.S. Если при выполнении скрипта шелл говорит, что знать не ведает, что такое let, следует набрать от имени суперпользователя dpkg-reconfigure dash, ответив отрицательно на появившееся окно. Таким образом системе явно будет указано не использовать dash (который не знает о let, ибо это встроенная команда в bash) в качестве шелла по умолчанию.