В данной статье собираем любые способы взаимодействия настольной Ubuntu 12.04 c любыми мобильными устройствами.

Синхронизация содержимого телефона через Bluetooth

Для мобильных устройств на базе Android, iOS или Windows 8 существует приложение dropbox для синхронизации, например отснятых фотографий с облаком, тем не менее, синхронизировать отдельные папки в нем нельзя, к тому же данный способ работает только если есть доступ в интернет. Данное руководство описывает способ синхронизации содержимого вашего мобильного устройства с большим братом, посредством Bluetooth. Создание этого скрипта меня сподвигла единственная полезная функция в приложении NokiaPCSuite1)- автоматическое сохранение отснятых фотографий при появлении устройства со включенным bluetooth в зоне видимости компьютера. Другими словами достаточно включить Bluetooth на телефоне и запускается сохранение фотографий. Данный скрипт позволяет сохранять не только фотографии, но и любые другие папки с внутренней или внешней памяти телефона.

Установка дополнительных пакетов

Для работы скрипта необходим дополнительный пакет obexfs обеспечивающий подключение файловой системы мобильного устройства к файловой системе Ubuntu и bluez-compat, обеспечивающий управление bluetooth устройством компьютера через командную строку. Устанавливаем:

sudo apt-get install obexfs bluez-compat

Настройка

Определение параметров мобильного устройства

Для того, что бы монтировать мобильное устройство к файловой системе Ubuntu нужно знать два параметра- Bluetooth адрес устройства, и канал, по которому данное устройство предоставляет FTP доступ. И то и другое можно узнать введя в терминале команду (не забудьте включить bluetooth на телефоне и компьютере)

sdptool search FTP

В ответ вы получите подобный вывод:

::~::->> sdptool search FTP
Inquiring ...
Searching for FTP on 00:25:CF:C2:B6:D5 ...
Service Name: OBEX File Transfer
Service RecHandle: 0x10070
Service Class ID List:
  "OBEX File Transfer" (0x1106)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 9
  "OBEX" (0x0008)
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "OBEX File Transfer" (0x1106)
    Version: 0x0100

Если вывода на эту команду нет, то, вероятнее всего, ваш телефон не предоставляет доступ к своему содержимому по Bluetooth, можете закрывать эту страничку. Если вывод есть, то нас интересуют две строчки (запомним их):

  • Searching for FTP on 00:25:CF:C2:B6:D5 -последняя последовательность- это Bluetooth адрес устройства(далее в тексте он будет заменен на XX:XX:XX:XX:XX:XX)
  • Channel: 9 - номер канала, по которому предоставляется доступ(далее в тексте он будет заменен на YY)

Настройка доступа к монтированию

Вообще, как я понял, obexfs жутко проблемный пакет- очень сложно заставить его монтировать устройства от имени пользователя (от root монтирует нормально, но при этом пользователю даже нельзя просматривать содержимое). Пытаясь добиться работоспособности я проделывал некоторые действия, которые могут оказаться избыточными, но, тем не менее, я их приведу здесь, что бы у вас гарантированно все заработало.

Добавляем пользователя в группу fuse
sudo usermod -aG fuse <имя_пользователя>
Разрешаем пользователям использовать опцию allow_other
sudo gedit /etc/fuse.conf

Нужно раскомментировать строчку user_allow_other

Меняем права на файл fusermount
sudo chmod 4755 /bin/fusermount

Настройка монтирования

Создание точки монтирования
  • Если вы планируете исследовать содержимое вашего телефона через nautilus (подобный сервис вообще предоставляет стандартный bluetooth-applet после сопряжения устройства с компьютером), то целесообразно создать точку монтирования в /media/, после этого она будет отображаться в Nautilus в разделе «Устройства» и при щелчке на нем мышкой будет монтироваться\отмонтироваться, как обычная флешка. Если вам это нужно, то создаем папку
    sudo mkdir /media/Nokia

  • Если же вам нужна только автоматическая синхронизация и не нужно удобство доступа к смонтированному устройству, то точку монтирования лучше создать в /mnt

    sudo mkdir /mnt/Nokia
Я создал точку монтирования в /mnt, поэтому все команды приведены для этого случая, не забудьте поправить пути, если что.

В любом из этих случаев нужно присвоить созданную папку вашему пользователю (тоже косяки fuse и obexfs)

sudo chown <имя_пользователя> /mnt/Nokia
Проверка монтирования

В принципе этого достаточно, что бы проверить схему и примонтировать мобильное устройство от root.

sudo obexfs -bXX:XX:XX:XX:XX:XX -BYY /mnt/Nokia

Проверка результата

sudo ls /mnt/Nokia

Должно отобразиться содержимое мобильного устройства, часто это два диска- его внутренняя и внешняя память. Если содержимого нет и вы не знаете что делать, попробуйте написать в этой теме.
Для отмонтирования используйте следующую команду:

sudo fusermount -u /mnt/Nokia
Создание скрипта монтирования

Так как команда монтирования довольно странная, то её в таком виде запихнуть в /etc/fstab у меня не получилось, если хотите попробовать, то строчка должна выглядеть так:

obexfs#-bXX:XX:XX:XX:XX:XX\040-BYY /mnt/Nokia fuse allow_other 0 0

Даже если после этого командой

mount /mnt/Nokia

мобильное устройство и примонтируется, то, почти наверняка, его нельзя будет отмонтировать командой

umount /mnt/Nokia

тоже из за кривости obexfs. Поэтому делаем легко и просто: создаем скрипт с командой монтирования:

sudo gedit /usr/local/bin/obexfs_mount

со следующим содержимым:

obexfs_mount
#!/bin/sh
/usr/bin/obexfs -bXX:XX:XX:XX:XX:XX -BYY $*

делаем исполняемым:

sudo chmod +x /usr/local/bin/obexfs_mount
Редактируем fstab

Наконец то можно редактировать fstab.

sudo gedit /etc/fstab

Добавляем в конец файла строчку

obexfs-mount /mnt/Nokia fuse users,noauto,allow_other,fsname=obexfs-mount 0 0

После этого можно монтировать мобильное устройство от пользователя, например командой

mount /mnt/Nokia

отмонтировать командой

umount /mnt/Nokia

Cоздание скрипта-демона

Для автоматизации сохранения файлов с мобильного устройства, естественно, понадобится процесс, запускающийся в фоне и следящий за появлением вашего устройства в зоне видимости bluetooth-адаптера компьютера. Для синхронизации будем использовать rsync.

Принцип действия:

  • Каждые 60 секунд скрипт проверяет доступность устройства с указанным адресом;
  • В случае доступность запускается копирование новых и измененных файлов из указанного пути в мобильном устройстве по указанному пути на ПК;
  • После успешной синхронизации демон «засыпает» на 12 часов (43200 секунд), это сделано, чтобы он не начинал повторную синхронизацию каждый раз, пока вы не выключите где нибудь bluetooth.
gedit ~/bin/mobile_sync.sh

Содержимое файла:

mobile_sync.sh
#!/bin/bash
address="XX:XX:XX:XX:XX:XX"
while (sleep 60)
do
str=$(hidd --connect 00:25:CF:C2:B6:D5 2>&1)
if [[ $str =~ .*Success.* ]] ; then
mount /mnt/Nokia
notify-send "Синхронизация запущена" -i bluetooth
rsync -tr /mnt/Nokia/E:/Images/Камера/ /home/<имя_пользователя>/Изображения/Фото/
umount /mnt/Nokia
notify-send "Синхронизация закончена" -i bluetooth
sleep 43200
fi
done
В данном примере выполняется сохранение всех новых фотографий с телефона Nokia N79 в папку пользователя. Для редактирования путей, просмотрите их в Nautilus, если вам необходимо добавить пути или ввести какие либо исключения, ознакомьтесь с man rsync, в крайнем случае спросите в теме на форуме.

Делаем исполняемым

chmod +x ~bin/mobile_sync.sh

Добавляем скрипт в автозагрузку пользователя.

Ссылки

1)
которая на наших Ubuntu не работает