Использование 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, псевдоФС, которая позволяет смонтировать устройство так, будто это флешка или любой другой накопитель.
Проще всего установить 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 клиент у него — это не полноценный клиент, не может сам отслеживать изменения, надо вручную отсылать и забирать их. Дальше внезапно выясняется что он ещё и не отправляет дату создания/модификации файла.
Это может и не так критично для фото, т.к. есть 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.
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, не в курсе как это решить?
Источник