В наше время когда мобильные телефоны могут быть подключены к компьютеру как запоминающие устройства все больше отпадает надобность в таких вещах как 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 превратить в диск...
Отправить комментарий