Синхронизация android с linux

Использование Android в связке с Linux

Дистрибутивы Linux и Android не просто родственные операционные системы — они вообще основаны на одном ядре и на низком уровне очень схожи. В Андроид работает большая часть команд Linux, в него можно установить командную оболочку bash, делать скрипты и даже запускать серверы. Установив SSH Android-устройство, вы сможете заходить на него с компьютера и даже использовать rsync для синхронизации файлов. Сегодня мы поговорим обо всех этих трюках, о которых должен знать каждый юниксоид владелец смартфона.

ADB — управление Android с Linux

Начнем с излюбленного инструмента всех продвинутых пользователей Android — ADB. Мы уже много раз писали о нем, однако здесь просто обязаны повториться. Итак, ADB расшифровывается как Android Debug Bridge, и по сути это нечто вроде системы управления смартфоном с компа. ADB позволяет устанавливать и запускать софт, перемещать файлы с устройства и на устройство и выполнять многие другие задачи.

Чтобы правильно настроить ADB в Windows, пришлось бы устанавливать драйверы и перезагружать систему, в Linux он просто работает. Все что необходимо сделать — это активировать ADB на смартфоне. Делает это в меню (Настройки → Для разработчиков → Отладка по USB) и установить пакет с утилитой adb в систему:

После чего надо подключить телефон к компу и начать отдавать команды.

Получить список подключенных устройств:

Установить на подключенное устройство APK:

Переместить файл на устройство:

Скачать файла с устройства:

Создать скрин экрана и скачать его на компьютер:

Нажать кнопку Power:

Ну и самое важное, утилиту ADB можно использовать для получения доступа к командной строке телефона:

Важно отметить, что утилита ADB может работать не только по USB, но и по Wi-Fi, но для этого необходимы права root на устройстве и приложение WiFi ADB. Запускаем приложение, включаем переключатель и конектимся к телефону с помощью adb connect и показанного приложением IP-адреса:

На некоторых дистрибутивах для работы ADB может потребоваться root. Это происходит из-за отсутствия специальных правил Udev в дистрибутиве. Придется либо устанавливать их как отдельный пакет ( android — udev в Arch Linux), либо самостоятельно настраивать Udev.

Adb-sync — синхронизация файлов между устройствами

ADB можно использовать и для синхронизации файлов между устройствами (для этого даже есть опция sync ), однако удобнее воспользоваться скриптом adb-sync. Его достаточно скачать и запустить. Например, так можно синхронизировать музыку на устройстве и на ПК:

/ Music / / sdcard / Music

А так выполнить ту же синхронизацию, но с удалением файлов, которые были удалены на ПК:

/ Music / / sdcard / Music

Простой способ скачать файлы на комп (обратная синхронизация):

Adbfs — получение доступа к файлам

Еще один интересный способ получить доступ к файлам на устройстве с помощью ADB — использовать adbfs, псевдоФС, которая позволяет смонтировать устройство так, будто это флешка или любой другой накопитель.

Читайте также:  Как пользоваться клавиатурой android

Проще всего установить adbfs в Arch Linux. Здесь она есть в AUR, поэтому достаточно выполнить одну команду:

В Ubuntu и других системах adbfs придется собирать вручную:

Ну а дальше можно подключать файловую систему:

Go-mtpfs — передача данных по протоколу MTP

Еще один вариант подключения устройства как файловой системы — go-mtpfs, файловая система, позволяющая передавать данные по протоколу MTP. Именно этот протокол используется в смартфонах без карты памяти.

В Arch Linux установить go-mtpfs очень просто:

В других дистрибутивах несколько сложнее:

Дальше все так же элементарно, как с adbfs:

Идея использовать ADB для общения с устройством может показаться странной, если учитывать, что для Android существует сразу несколько различных SSH-серверов, не требующих права root. Так оно и есть, во многих случаях SSH будет удобнее и эффективнее. В качестве реализации сервера советую выбрать SimpleSSHD, простую бесплатную обертку для проверенного временем SSH-сервера DropBear для встраиваемых систем. Если у вас есть root, то рекомендую также установить BusyBox On Rails, набор утилит командной строки, наиболее близкий к дистрибутивам Linux.

Использовать SimpleSSHD очень просто. Запускаете, нажимаете START и подключаетесь к указанному IP-адресу (порт 2222):

В момент подключения на экране появится одноразовый пароль, который следует указать в клиенте. Это не очень удобный способ аутентификации, но вы можете настроить аутентификацию по ключам. Просто переименуйте свой открытый ключ (

/ . ssh / id_rsa . pub ) в authorized_keys и положите в каталог ssh на карте памяти смартфона.

Использование Android с Linux. SimpleSSHD

Bash, tmux, mc

SSH-сервер на смартфоне сам по себе открывает широкие возможности, но еще шире их можно сделать, если установить на смартфон классические инструменты, такие как bash, tmux и mc. Последний позволит в том числе с удобством ходить по карте памяти и прибраться в случае необходимости.

О том, как установить на смартфон bash, tmux, mc и nano, я уже рассказывал, но позволю себе повториться. И сразу предупрежу, что вам потребуются права root на смартфоне.

Итак, скачиваем Terminal IDE , переименовываем пакет APK в ZIP, распаковываем, находим файл assets / system — 2.0.tar.gz.mp3 , переименовываем, убирая расширение mp3, и распаковываем. Внутри будет множество каталогов и файлов, из которых нас интересуют только system / bin и system / etc / terminfo . Первый содержит нужные нам утилиты; скопируй те, что тебе пригодятся, в отдельный каталог. Второй необходим для корректного функционирования утилит.

Выбранные утилиты и каталог terminfo скинь на карту памяти смартфона. Затем подключись к нему по SSH и введи следующие команды, чтобы получить возможность модификации системного каталога:

Источник

Полноценная синхронизация фото/видео файлов между android и своим сервером в 2016 году

Решил я наконец-то сделать себе «персональное облако». На телефоне мне внезапно стало катастрофически не хватать места, т.к. из 30 ГБ половину уже стали занимать фото/видео. Поэтому подумал что надо их куда-то перенести и сохранить, лишнее на телефоне удалить.

Ок. Потратил несколько часов на сбор всех фото-видео файлов в отдельные директории и переименование по шаблону с датой создания в имени файла.

Поставил на домашний сервер seafile. Тут выясняется что android клиент у него — это не полноценный клиент, не может сам отслеживать изменения, надо вручную отсылать и забирать их. Дальше внезапно выясняется что он ещё и не отправляет дату создания/модификации файла.

Читайте также:  Яндекс деньги nfc android

Это может и не так критично для фото, т.к. есть exif, но для видео файлов важно. Т.е. если я выгружу файлы, удалю их на телефоне, и при необходимости заберу обратно, как минимум стандартная галерея мне их неправильно рассортирует. Ну и вообще, неправильно это.

Начал искать дальше. Выясняется, что та же ситуация с owncloud.

Решил глянуть что по этой проблеме с проприетарщиной. Быстрый поиск по dropbox выдал тему, где человек пишет о той же проблеме.

Кто-нибудь знает какое-то рабочее решение? Хочу синхронизацию фоток/видео на свой сервер без потери даты создания.

В owncloud (nextcloud) есть возможность автоматической загрузки фото и видео.

Кто-нибудь знает какое-то рабочее решение?

Я для себя реализовал так.

Коммуникатор синкается с домашним сервером по btsync. Ибо это сегодня самый безглючный и лёгкий клиент под Android среди подобных систем. Отслеживаются изменения в две стороны, дата сохраняется. Единственный минус — нет версионности никакой.

Вот тут вступает в игру второй эшелон. Домашний сервер синкает всю фотоколлекцию с домашним бэкап-сервером и внешним сервером через syncthing. Также, через syncthing ещё синкаются каталоги последнего года и «входящий несортированный» (DCIM) с рабочими машинами (домашней и на работе) и ноутом. Синкается с версионным бэкапом на каждой машине.

Т.е. делаю я фотку на коммуникаторе, она тут же падает на домашний сервер в Collection/Unsorted/DCIM. Потом, если нужно, на любой из машин, где сижу, привожу в порядок, изменения синхронизируются по всей моей инфраструктуре.

это не полноценный клиент, не может сам отслеживать изменения, надо вручную отсылать и забирать их. Хочу синхронизацию фоток

Так фотки/видео он как раз и умеет синхронизировать.

А дата сохраняется там? В seafile тоже есть такая опция, но меня это не устроило. Моя камера не позволяет задать шаблон имени файла, поэтому я для этого использую отдельное приложение, которое переименовывает всё как надо. И потом хотел уже делать выгрузку вручную.

Я хочу именно на свой сервер.

Ок, надо глянуть на btsync. Но у меня исходная задача была ещё и высвободить место. Т.е. я выгружаю особо тяжелые файлы и удаляю на телефоне, если нужно — загружаю обратно. Тот факт что seafile и ownlcoud (судя по всему) не являются полноценными клиентами, мог позволить мне выгрузить файл, затем удалить его без отправки удаления на сервер.

В btsync я так понимаю если удалю файл на android, он везде удалится?

UPD А, понял, т.е. у тебя на телефоне всегда только unsorted коллекция, а полный вариант лишь на сервере?

Проблема в том, что он дату не сохраняет.

Почему просто не использовать sshfs? Тот же solid explorer прекрасно справляется с этим.

Ещё не понял, зачем в такой схеме нужен syncthing, для версионности?

Копировать и удалять, да и синхронизировать с андроидом вручную же придется.

Посмотрите в сторону приложения для андроидов foldersync.

Читайте также:  Android как создать ярлык папки

Ftp, scp, облака — вариантов у программа тьма. И шедулинг есть разумеется.

В btsync я так понимаю если удалю файл на android, он везде удалится?

Да. Но останется в версионном бэкапе («корзине», если будет включена соответствующая настройка).

UPD А, понял, т.е. у тебя на телефоне всегда только unsorted коллекция, а полный вариант лишь на сервере?

И так, и эдак. В DCIM/OpenCamera — свежие несортированные фотки. Но есть и сортированные отобранные — синхронизируется тем же btsync, но с другим подкаталогом на сервере. Т.е. я часто привожу в порядок фотки на сервере, коллекция на коммуникаторе приходит в тот вид, какой задаю на сервере же.

Ещё не понял, зачем в такой схеме нужен syncthing, для версионности?

Да. Другого инструмента для синхронизации с версионностью я пока не нашёл. btsync умеет только сохранять удалённый файл.

Дата должна быть в имени файла, у меня смарт так по дефолту снимает. Тогда никаких заморочек с сортировкой. Есть скрипты, переименовывающие так по exif.

Дата в имени это же больше подсказка для человека. Тут ведь не только сортировка, но и группировка. С фотками ещё более менее всё хорошо, т.к. exif. Скажем, надо посмотреть все видео за 2016 год. Не знаю, есть ли галереи, парсящие дату из имени файла, да и если есть — это ненадёжно. Но точно есть которые могут группировать по дате создания файла.

+1 к FolderSync. Я его использую совместно с ownCloud. Потому что родной клиент — говно (по крайней мере, раньше было так).

Решение закрытое и платное, если ничто другое не устроит надо будет попробовать.

Ок, посмотрел я на syncthing, поставил, потестировал. Судя по всему — мне подходит. Сделал 3 директории: Images, Video, Unsorted Media. Unsorted Media замапил на директорию куда камера сохраняет фото/видео. Для всех директорий отключил версионность на андроиде и включил на сервере.

Для Images и Video на сервере задал опцию ignoreDelete : https://docs.syncthing.net/advanced/folder-ignoredelete.html. Теперь на андроиде я могу удалять тяжелые файлы из этих двух коллекций, но на сервер удаление не уйдёт.

Ну и весь процесс теперь получается такой, фоткаю-снимаю что нужно, оно сохраняется в Unsorted Media и уходит на сервер. Либо с телефона, либо ещё откуда выбираю что удалить или оставить, переименовываю как нужно и переношу в Images и Video, а из Unsorted Media удаляю.

Таким образом я и свободное место на андроиде могу регулировать, и нужные данные всегда целые и синхронизированные на сервере. Сейчас как раз пошёл процесс выгрузки всех данных на сервер.

Остался лишь один неудобный момент. Если я удалил тяжелый файл из Video на андроиде (а на сервере он целый) и вдруг решил снова его загрузить на телефон, как форсировать его загрузку с серверной директории Video? Я пока лишь вижу вариант с перезаписью этого файла на сервере, в этом случае клиент увидит это и перекачает его. Но тогда и дата изменения поменяется, что не очень хорошо. KRoN73 , Reedych , т.к. вы писали здесь про syncthing, не в курсе как это решить?

Источник

Оцените статью