Дистрибутивы Linux и Android не просто родственные операционные системы — они вообще основаны на одном ядре и на низком уровне очень схожи. В Андроид работает большая часть команд Linux, в него можно установить командную оболочку bash, делать скрипты и даже запускать серверы. Установив SSH Android-устройство, вы сможете заходить на него с компьютера и даже использовать rsync для синхронизации файлов. Сегодня мы поговорим обо всех этих трюках, о которых должен знать каждый юниксоид владелец смартфона.
ADB — управление Android с Linux
Начнем с излюбленного инструмента всех продвинутых пользователей Android — ADB. Мы уже много раз писали о нем, однако здесь просто обязаны повториться. Итак, ADB расшифровывается как Android Debug Bridge, и по сути это нечто вроде системы управления смартфоном с компа. ADB позволяет устанавливать и запускать софт, перемещать файлы с устройства и на устройство и выполнять многие другие задачи.
Чтобы правильно настроить ADB в Windows, пришлось бы устанавливать драйверы и перезагружать систему, в Linux он просто работает. Все что необходимо сделать — это активировать ADB на смартфоне. Делает это в меню (Настройки → Для разработчиков → Отладка по USB) и установить пакет с утилитой adb в систему:
1 2 3 4 |
# Ubuntu/Debian/Mint $ sudo apt-get install adb # Arch Linux $ sudo pacman -S android-tools android-udev |
После чего надо подключить телефон к компу и начать отдавать команды.
Получить список подключенных устройств:
1 |
$ adb devices |
Установить на подключенное устройство APK:
1 |
$ adb install file.apk |
Переместить файл на устройство:
1 |
$ adb push файл /sdcard/ |
Скачать файла с устройства:
1 |
$ adb pull /sdcard/DCIM/Camera/photo.jpg photo.jpg |
Создать скрин экрана и скачать его на компьютер:
1 2 3 |
$ adb shell screencap /sdcard/screenshot.png $ adb pull /sdcard/screenshot.png $ adb shell rm /sdcard/screenshot.png |
Нажать кнопку Power:
1 |
$ adb shell input keyevent 26 |
Ну и самое важное, утилиту ADB можно использовать для получения доступа к командной строке телефона:
1 |
$ adb shell |
Важно отметить, что утилита ADB может работать не только по USB, но и по Wi-Fi, но для этого необходимы права root на устройстве и приложение WiFi ADB. Запускаем приложение, включаем переключатель и конектимся к телефону с помощью adb connect и показанного приложением IP-адреса:
1 |
$ adb connect IP-адрес |
На некоторых дистрибутивах для работы ADB может потребоваться root. Это происходит из-за отсутствия специальных правил Udev в дистрибутиве. Придется либо устанавливать их как отдельный пакет ( android-udev в Arch Linux), либо самостоятельно настраивать Udev.
Adb-sync — синхронизация файлов между устройствами
ADB можно использовать и для синхронизации файлов между устройствами (для этого даже есть опция sync), однако удобнее воспользоваться скриптом adb-sync. Его достаточно скачать и запустить. Например, так можно синхронизировать музыку на устройстве и на ПК:
1 |
$ adb-sync ~/Music/ /sdcard/Music |
А так выполнить ту же синхронизацию, но с удалением файлов, которые были удалены на ПК:
1 |
$ adb-sync --delete ~/Music/ /sdcard/Music |
Простой способ скачать файлы на комп (обратная синхронизация):
1 |
$ adb-sync --reverse /sdcard/Download/ ~/Downloads |
Adbfs — получение доступа к файлам
Еще один интересный способ получить доступ к файлам на устройстве с помощью ADB — использовать adbfs, псевдоФС, которая позволяет смонтировать устройство так, будто это флешка или любой другой накопитель.
Проще всего установить adbfs в Arch Linux. Здесь она есть в AUR, поэтому достаточно выполнить одну команду:
1 |
$ yaourt -S adbfs-rootless-git |
В Ubuntu и других системах adbfs придется собирать вручную:
1 2 3 4 |
$ sudo apt-get install libfuse-dev android-tools-adb $ git clone git://github.com/spion/adbfs-rootless.git $ cd adbfs-rootless $ make |
Ну а дальше можно подключать файловую систему:
1 2 |
$ mkdir ~/Android $ adbfs ~/Android |
Для отключения:
1 |
$ fusermount -u ~/Android |
Go-mtpfs — передача данных по протоколу MTP
Еще один вариант подключения устройства как файловой системы — go-mtpfs, файловая система, позволяющая передавать данные по протоколу MTP. Именно этот протокол используется в смартфонах без карты памяти.
В Arch Linux установить go-mtpfs очень просто:
1 |
$ yaourt -S go-mtpfs |
В других дистрибутивах несколько сложнее:
1 2 3 4 5 |
$ 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:
1 2 |
$ mkdir ~/Android $ go-mtpfs ~/Android |
Для отключения:
1 |
$ fusermount -u ~/Android |
Рекомендуем: Обзор лучших графических оболочек для Linux
SSH
Идея использовать ADB для общения с устройством может показаться странной, если учитывать, что для Android существует сразу несколько различных SSH-серверов, не требующих права root. Так оно и есть, во многих случаях SSH будет удобнее и эффективнее. В качестве реализации сервера советую выбрать SimpleSSHD, простую бесплатную обертку для проверенного временем SSH-сервера DropBear для встраиваемых систем. Если у вас есть root, то рекомендую также установить BusyBox On Rails, набор утилит командной строки, наиболее близкий к дистрибутивам Linux.
Использовать SimpleSSHD очень просто. Запускаете, нажимаете START и подключаетесь к указанному IP-адресу (порт 2222):
1 |
$ ssh 192.168.31.236 -p 2222 |
В момент подключения на экране появится одноразовый пароль, который следует указать в клиенте. Это не очень удобный способ аутентификации, но вы можете настроить аутентификацию по ключам. Просто переименуйте свой открытый ключ ( ~/.ssh/id_rsa.pub) в authorized_keys и положите в каталог ssh на карте памяти смартфона.
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 и введи следующие команды, чтобы получить возможность модификации системного каталога:
1 2 |
$ su # mount -o remount,rw /system |
Далее скопируй все нужные утилиты в /system/xbin/ и установи на них бит исполнения (на примере bash):
1 2 |
# cp bash /system/xbin/ # chmod 755 /system/xbin/bash |
Затем создай файл /sdcard/ssh/.bashrc, помести в него следующие строки:
1 2 3 |
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 добавь строки:
1 2 |
export MC_DATADIR=/sdcard/mc export VIMRUNTIME=/sdcard/vim |
Rsync — синхронизация и бекап файлов
SSH-сервер дает нам возможность использовать rsync, мощную утилиту для синхронизации и бэкапа файлов. Rsync позволяет осуществлять быструю двунаправленную синхронизацию файлов между двумя машинами (или машиной и смартфоном, как в нашем случае) с выкачиванием только новых и измененных файлов и возможностью возобновления прерванной синхронизации.
Простейший пример использования rsync в связке со смартфоном:
1 |
$ rsync --update --progress -e 'ssh -p 2222' -azv 192.168.31.236:/sdcard/DCIM/Camera ~/Photos |
Эта команда скопирует все фотографии со смартфона в каталог ~/Photos, пропустив те, что уже есть в каталоге. Связка опций -azv в данном случае означает, что каталог необходимо передать как есть со всеми его подкаталогами и правами доступа (флаг -a) плюс использовать сжатие (флаг -z).
Обратная команда — копирование данных с машины на смартфон:
1 |
$ rsync --delete --progress -e 'ssh -p 2222' -azv ~/Books 192.168.31.236:/sdcard/Books |
Здесь мы использовали флаг --delete, чтобы удалить файлы, которые были удалены из локального каталога ~/Books.
По умолчанию при обрыве соединения rsync будет удалять частично переданные файлы. Чтобы этого избежать, можно использовать флаг --partial, который заставит rsync сохранять недокачанные файлы и возобновить их загрузку при следующем запуске команды.
Рекомендуем: Управление программами из консоли Linux
SSHButton — подключение от смартфона к компьютеру
Ок, к смартфону мы подключились, файлы синхронизировали, но что, если нам нужно обратное SSH-подключение от смартфона к компу? В этом случае подойдет любой из десятков SSH-клиентов для Android (тот же ConnectBot, например), если, конечно, ты готов вводить команды на сенсорной клавиатуре маленького экрана.
Если не готов, твой выбор — приложение SSH button, позволяющее запускать нужную команду на нужной машине по нажатию кнопки. Интерфейс у SSH button страшный, но приложение отлично работает. Просто запусти SSH button, далее Меню → Add… и введи нужную команду, адрес SSH-сервера, логин и пароль.
SSH button удобно использовать для выключения или усыпления компа (команды systemctl suspend и halt), запуска и остановки торрентов, контролирования музыки (например, плеер mocp, о котором я рассказывал в одной из прошлых статей, позволяет управлять собой через командную строку).
Итого
Использовать Android в связке с Linux действительно удобно. В отличие от Windows здесь не нужны дополнительные драйверы, специальные серверы и прочие странные вещи. В большинстве случаев можно обойтись стандартными для мира Linux SSH и rsync, но в Сети всегда можно найти более интересные инструменты.
Следовало начать с подключения устройства к linux. Ничего не фацает.
Хорошая статья, кладу в закладки. Спасибочки!