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

ADB

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

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

// Ubuntu/Debian/Mint
$ sudo apt-get install adb
// Arch Linux
$ sudo pacman -S android-tools android-udev

Далее необходимо подключить смартфон к компу и начать отдавать команды.

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

$ adb devices

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

$ adb install file.apk

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

$ adb push файл /sdcard/

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

$ adb pull /sdcard/DCIM/Camera/photo.jpg photo.jpg

Сделать скриншот и скачать его на комп:

$ adb shell screencap /sdcard/screenshot.png
$ adb pull /sdcard/screenshot.png
$ adb shell rm /sdcard/screenshot.png

Нажатие кнопки Power:

$ adb shell input keyevent 26

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

$ adb shell

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

$ adb connect IP-адрес

WARNING

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

Ты уже пользовался ADB?

Загрузка ... Загрузка ...
 

Adb-sync

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

$ adb-sync ~/Music/ /sdcard/Music

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

$ adb-sync --delete ~/Music/ /sdcard/Music

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

$ adb-sync --reverse /sdcard/Download/ ~/Downloads
 

Adbfs

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

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

$ yaourt -S adbfs-rootless-git

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

$ sudo apt-get install libfuse-dev android-tools-adb
$ git clone git://github.com/spion/adbfs-rootless.git
$ cd adbfs-rootless 
$ make

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

$ mkdir ~/Android
$ adbfs ~/Android

Для отключения:

$ fusermount -u ~/Android

Зачем еще можно использовать Adb-sync?

Загрузка ... Загрузка ...
 

Go-mtpfs

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

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

$ yaourt -S go-mtpfs

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

$ sudo apt-get install golang-go libusb1-devel
$ mkdir /tmp/go
$ export GOPATH=/tmp/go
$ go get github.com/hanwen/go-mtpfs
$ go install github.com/hanwen/go-mtpfs

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

$ mkdir ~/Android
$ go-mtpfs ~/Android

Для отключения:

$ fusermount -u ~/Android
 

SSH

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

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

$ ssh 192.168.31.236 -p 2222

В момент подключения на экране появится одноразовый пароль, который следует указать в клиенте. Это не очень удобный способ аутентификации, но ты можешь настроить аутентификацию по ключам. Просто переименуй свой открытый ключ (~/.ssh/id_rsa.pub) в authorized_keys и положи в каталог ssh на карте памяти смартфона.

SimpleSSHD

SimpleSSHD

SimpleSSHD

В какой статье мы уже ставили BusyBox и для чего?

Загрузка ... Загрузка ...
 

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 и введи следующие команды, чтобы получить возможность модификации системного каталога:

$ su
# mount -o remount,rw /system

Далее скопируй все нужные утилиты в /system/xbin/ и установи на них бит исполнения (на примере bash):

# cp bash /system/xbin/
# chmod 755 /system/xbin/bash

Затем создай файл /sdcard/ssh/.bashrc, помести в него следующие строки:

export TERMINFO=/sdcard/terminfo
export TMPDIR=/data/local/tmp
export PS1="\u@\h:\w \$ "

Открой настройки SimpleSSHD на смартфоне и в опции Login Shell укажи /system/xbin/bash, останови и вновь запусти сервер. При следующем входе по SSH откроется bash и будут доступны скопированные тобой утилиты.

Чтобы добиться корректной работы Vim и mc, скопируй на карту памяти также каталоги etc/mc и etc/vim, а в файл /sdcard/ssh/.bashrc добавь строки:

export MC_DATADIR=/sdcard/mc
export VIMRUNTIME=/sdcard/vim
Midnight commander, запущенный в Android
Midnight commander, запущенный в Android
 

Rsync

SSH-сервер дает нам возможность использовать rsync, мощную утилиту для синхронизации и бэкапа файлов. Rsync позволяет осуществлять быструю двунаправленную синхронизацию файлов между двумя машинами (или машиной и смартфоном, как в нашем случае) с выкачиванием только новых и измененных файлов и возможностью возобновления прерванной синхронизации.

Простейший пример использования rsync в связке со смартфоном:

$ rsync --update --progress -e 'ssh -p 2222' -azv 192.168.31.236:/sdcard/DCIM/Camera ~/Photos

Эта команда скопирует все фотографии со смартфона в каталог ~/Photos, пропустив те, что уже есть в каталоге. Связка опций -azv в данном случае означает, что каталог необходимо передать как есть со всеми его подкаталогами и правами доступа (флаг -a) плюс использовать сжатие (флаг -z).

Обратная команда — копирование данных с машины на смартфон:

$ rsync --delete --progress -e 'ssh -p 2222' -azv ~/Books 192.168.31.236:/sdcard/Books

Здесь мы использовали флаг --delete, чтобы удалить файлы, которые были удалены из локального каталога ~/Books.

По умолчанию при обрыве соединения rsync будет удалять частично переданные файлы. Чтобы этого избежать, можно использовать флаг --partial, который заставит rsync сохранять недокачанные файлы и возобновить их загрузку при следующем запуске команды.

 

SSHButton

Ок, к смартфону мы подключились, файлы синхронизировали, но что, если нам нужно обратное SSH-подключение от смартфона к компу? В этом случае подойдет любой из десятков SSH-клиентов для Android (тот же ConnectBot, например), если, конечно, ты готов вводить команды на сенсорной клавиатуре маленького экрана.

Если не готов, твой выбор — приложение SSH button, позволяющее запускать нужную команду на нужной машине по нажатию кнопки. Интерфейс у SSH button страшный, но приложение отлично работает. Просто запусти SSH button, далее Меню → Add... и введи нужную команду, адрес SSH-сервера, логин и пароль.

SSH button удобно использовать для выключения или усыпления компа (команды systemctl suspend и halt), запуска и остановки торрентов, контролирования музыки (например, плеер mocp, о котором я рассказывал в одной из прошлых статей, позволяет управлять собой через командную строку).

SSH button

SSH button

SSH button
 

Выводы

Использовать Android в связке с Linux действительно удобно. В отличие от Windows здесь не нужны дополнительные драйверы, специальные серверы и прочие странные вещи. В большинстве случаев можно обойтись стандартными для мира Linux SSH и rsync, но в Сети всегда можно найти более интересные инструменты.

3 комментария

  1. Аватар

    CYBERPUNK12

    03.03.2018 в 19:10

    Очень годно, спасибо!

  2. Аватар

    enc

    04.03.2018 в 02:06

    спасибо, статья понравилась

  3. Аватар

    john_

    09.03.2018 в 19:18

    Годные статьи под хайдом

Оставить мнение