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-файлик удалось беспроблемно вставить в текст после прогона через эту форму.