На заметку. Подключение телефона. Obex

On: 13 марта 2011 г.

В наше время когда мобильные телефоны могут быть подключены к компьютеру как запоминающие устройства все больше отпадает надобность в таких вещах как obex. Так ли это? А если вы хотите получить доступ к файловой системе телефона по bluetooth? Тогда методы описаные нижи могут вам пригодиться. Да и есть еще телефоны которые не умеют волшебным образом превращаться в флешку потому ознакомившись с obex-технологиями их владельци смогут получить доступ с компьютерах фс телефона так словно он и есть съемный диск. Не без косяков конечно) Для отображения содержимого телефона на компьютере (ОС Linux) с помощью технологии obex можно использовать описанные ниже пути.
Первый путь obexftp

Определить какое устройство (устройства)  подключенное к компьютеру использует протокол obexftp

$ obexftp -u

If USB doesn't work setup permissions in udev or run as superuser.
Found 2 USB OBEX interfaces

0 (Manufacturer: Nokia Product: Nokia N70 Serial: (null) Interface description: SYNCML-SYNC)
1 (Manufacturer: Nokia Product: Nokia N70 Serial: (null) Interface description: PC Suite Services)

Use '-u interface_number' to connect
Nothing to do. Use --help for help.


в моем случае это первый (1) "канал" потому как его (для тех же целей) использует PC Suite Services.

1 (Manufacturer: Nokia Product: Nokia N70 Serial: (null) Interface description: PC Suite Services)
Ключь -u означает что я веду поиск в устройствах подключенных к компьютеру через USB. Здесь можно воспользоваться ключами:



 -i, --irda                  connect using IrDA transport
 -b, --bluetooth <device>    connect to this bluetooth device
 -B, --channel <number>      use this bluetooth channel when connecting
 -d, --hci <no/address>      use source device with this address or number
 -u, --usb <interface>       connect to this usb interface number
 -t, --tty <device>          connect to this tty using a custom transport
 -n, --network <device>      connect to this network host

 -N, --nonblock              nonblocking mode

 -h, --help, --usage         this help text


Потому в дальнейшем для обращения с этим устройством я буду использовать "-u 1" так как мой телефон в примере работы с obexftp подключен через USB.

Просмотрим содержимое телефона

$ obexftp -u 1 -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 55ms
Receiving "(null)"...|<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <folder name="C:" user-perm="RW" mem-type="DEV" label="Память телефона"/>
   <folder name="E:" user-perm="RW" mem-type="MMC" label="Memory card"/>
</folder-listing>done
Disconnecting../done


Это "корневой" коталог телефона. Для его отображения я использовал ключи "-u 1 -l", где пара "-u 1" определяет устройство на которое делаеться запрос, а "-l" задает команду просмотра текушего каталога. Так как в запросе адрес каталога не указан то мы видем содержимое "корневого" каталога телефона.
Для просмотра содержимого других каталогов необходимо указывать путь к ним

$ obexftp -u 1 -c E: -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 56ms
Sending "E:"...|done
Receiving "(null)".../<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <parent-folder />
   <folder name="Images" modified="20110302T234646Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Others" modified="20110223T183254Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Sounds" modified="20110208T123902Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Text" modified="20110222T213226Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Videos" modified="20110208T123904Z" user-perm="RWD" mem-type="MMC"/>
</folder-listing>done
Disconnecting..-done


$ obexftp -u 1 -c E: Sounds -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 56ms
Sending "E:"...|done
Sending "Sounds".../done
Receiving "(null)"...-<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <parent-folder />
   <folder name="Digital" modified="20110208T123902Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Simple" modified="20110208T123902Z" user-perm="RWD" mem-type="MMC"/>
</folder-listing>done
Disconnecting..\done


Если задать не существующий каталог с ключем "-C"

$ obexftp -u 1 -C E: Sound -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 56ms
Sending "E:"...|done
Sending "Sound".../done
Receiving "(null)"...-<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <parent-folder />
</folder-listing>done
Disconnecting..\done

То он будет создан (потому что вы требуете показать его содержимое). Программа создает недостающий каталог и возвращает его содержимое.

$ obexftp -u 1 -c E: -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 49ms
Sending "E:"...|done
Receiving "(null)".../<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <parent-folder />
   <folder name="Images" modified="20110302T234646Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Others" modified="20110223T183254Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Sound" modified="20110308T102004Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Sounds" modified="20110208T123902Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Text" modified="20110222T213226Z" user-perm="RWD" mem-type="MMC"/>
   <folder name="Videos" modified="20110208T123904Z" user-perm="RWD" mem-type="MMC"/>
</folder-listing>done
Disconnecting..-done


Пути к каталогам можно описывать несколькими способами:

1. С использованием одного ключа "-c" впереди цепочки каталогов разделенных пробелом
Пример: obexftp -u 1 -c E: Sounds -l
2. С использованием ключа "-c" перед каждым каталогом в цепочке папок
Пример: obexftp -u 1 -c E: -c Sounds -l
3. Заключать путь в кавычки с использование обратного слэша и ключем "-c" перед строкой пути
Пример: obexftp -u 1 -c "E:\Sounds" -l

Последний вариант мне нравиться больше так как он приятен для чтения. Ключи "-c" и "-C" устанавливают текущую директорию. Теоретически можно указывать папку после ключа "-l". Но это более "громоздкий путь" да и в добавок я и описал как устанавливать текущую директорию и как просматривать содержимое этой директории одними и теми же примерами.

Скачивание файлов с телефона

Например у меня в папке Others лежит разный хлам:

$ obexftp -u 1 -c E: Others -l

If USB doesn't work setup permissions in udev or run as superuser.
Connecting..\done
Tried to connect for 49ms
Sending "E:"...|done
Sending "Others".../done
Receiving "(null)"...-<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
  [ <!ATTLIST folder mem-type CDATA #IMPLIED>
  <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
   <parent-folder />
   <file name="N70_AdobeReader.sis" size="1238258" modified="20101014T003346Z" user-perm="RWD"/>
   <file name="officeS60.sis" size="89592" modified="20101022T002548Z" user-perm="RWD"/>
   <file name="putty_s90_r218_20050316.sis" size="196615" modified="20050317T002310Z" user-perm="RWD"/>
   <file name="QReader6600_1.96.SIS" size="234903" modified="20061224T093944Z" user-perm="RWD"/>
</folder-listing>done
Disconnecting..\done


и мне необходимо получить файл N70_AdobeReader.sis

$ obexftp -u 1 -C E: Others -g N70_AdobeReader.sis

Мы устанавливаем текущую дерикторию и получаем файл с помощью ключа "-g". Если я использовал ключ "-G" то после успешного копирование на компьютер файл на телефоне был бы удален.

Напоминаю что я использую формат запроса с установлением с начала текущей директории это позволяет быстро изменять запросы вызывая команду из истории команд командной оболочки. Вы можете придумать свой "стиль"

Для закачки файла на телефон используйте ключ "-p" в таком же формате как и ключ "-g". После тих ключей всегда должно идти имя исходного файла (допустимо использование кавычек для описания строк с пробелом либо перед знаком пробела в названии файла ставить обратные слэши "\").

Для упращения этих команд есть возможность использования графического итерфейса:

$ obextool --obexcmd "obexftp -u 1"

Эта комманда запустит графическую программу и укажет ей с каким "каналом" необходимо работать. Без ключа "--obexcmd "obexftp -u 1"" obextool работать не будет

Второй путь obexfs
Используя fuse монтируем устройство с протоколом obexftp как файловую систему:

# obexfs -b 00:1B:33:59:C6:9F /mnt

либо так

# mount -t fuse "obexfs#-b00:1B:33:59:C6:9F" /mnt

после работы с устройством можно и от монтировать

# umount /mnt

Здесь /mnt это точка монтирования файловой системы в дерево каталогов вашего компьютера. Ключ "-b" и следующее после него выражение это MAC-адрес bluetooth устройства к которому выполняеться подключение.

Правда работа с fuse для протакола obexftp требует прав суперпользователя. Но можно поправить это дело разкомментировав строчку user_allow_other в файле /etc/fuse.conf. Что даст возможность пользоваться смонтированой файловой системой не имея прав администратора (так было описано на каком то ресурсе но если честно у меня это так и не получилось).




P.S. Ключи "-u" и "-b" и тому подобные можно использовать как и в первом так и в втором случае. Они просто определяют тип подключения телефона к компьютеру. Но для подключения по блютусу необходимо настроить последовательный порт в сервисах bluetooth на компьютере (увы у меня нет настроения это описывать). Будут вопросы пишите.

1 коммент. on "На заметку. Подключение телефона. Obex"

Анонимный комментирует...

Все просто и понятно. Но у меня на Vectore нету obexfs. obexftp поставил из репа и в xml-е отображается содержимое, но это не то. Как бы rfcomm превратить в диск...