Если вам нужно сделать что-то полезное с устройством на Android, например отредактировать конфиг, насоздавать сразу много папок на SD карте, заморозить ненужные системные приложения, выполнить скрипт, смонтировать CIFS, то вам не обойтись без эмулятора терминала.
Но, если рядом есть компьютер и Wi-Fi, эти действия удобнее производить с него, а не на крошечном экране смартфона, пытаясь попасть в ещё более мелкие клавиши виртуальной клавиатуры.
А ещё удобнее, когда одни и те же алиасы и другие настройки есть и при открытии терминала на самом устройстве, и при подключении к нему по SSH.
Вы ведь для этого купили именно смартфон на Андроиде? Я лично — в том числе. :-)
Поэтому сегодня я расскажу, как создать консоль не хуже чем в десктопных линуксах.
В качестве эмулятора терминала я использую Better Terminal Emulator Pro (Google Play | market:// | 4PDA), а в качестве SSH-сервера SSHDroid (Google Play | market:// | 4PDA).
Настройка BTEP
После выбора Preferences — Shell — BASH (вместо Android Shell) строка Command Line изменится как на скриншоте, а после запуска создаётся файл /data/data/com.magicandroidapps.bettertermpro/home/.profile.
На его основе нужно создать на SD-карте файл /mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile — это будет основной конфиг как для терминала, так и для SSH.
Путь может быть любым, но он должен быть на SD; оригинальный .profile использовать нельзя, т.к. он будет перезаписан при обновлении приложения, или удалён при очистке данных стандартными средствами.
/mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | export SHELL=$_ export BTEP=/data/data/com.magicandroidapps.bettertermpro export HOME=$BTEP/home echo "/data/data/berserker.android.apps.sshdroid/dropbear/busybox" export PATH=/data/data/berserker.android.apps.sshdroid/home/bin:$BTEP/bin:/mnt/sdcard/data/com.magicandroidapps.bettertermpro/home:$PATH:. export HISTFILE=$BTEP/home/.history export PS1="\w \\$ " export TERMINFO=$BTEP/etc/terminfo export TERM=linux if !([ -e $HISTFILE ]) then echo "History file missing, creating..." echo "ls" > $HISTFILE chmod 666 $HISTFILE fi if [ -z $SHELL ] then export SHELL=$BTEP/bin/sh fi if [ x$SHELL=xmatch_lhs ] then export SHELL=/system/bin/sh fi cd $HOME alias sh='/system/bin/sh' alias bash='$BTEP/bin/bash --rcfile /mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile' # дальше алиасы и остальные настройки по вкусу |
Самые важные строки здесь: 1-6, 25-33.
ВАЖНО: $SHELL
это /system/bin/sh, а не $BTEP/bin/sh, иначе не запускается программа pm (которой можно заморозить системные приложения, но об этом в другой раз), возможно и какие-то другие.
Это имеет значение при запуске скриптов с SD-карты вот так: sh скрипт.sh, как упоминалось в предыдущих постах.
Далее.
Создайте файл /mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile_HOME:
1 2 3 4 | if [ -e "/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile" ] then . /sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile fi |
Его нужно скопировать уже в /data/data/com.magicandroidapps.bettertermpro/home/local_profile, а также создать ссылку на .profile:
1 2 3 4 5 | cd /data/data/com.magicandroidapps.bettertermpro/home cp /mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile_HOME local_profile chown $USERID:$USERID local_profile chmod 777 local_profile ln -s local_profile .profile |
$USERID
необходимо исправить на ID пользователя приложения (меняется при каждой установке, узнать можно например через ls -n)
Так, после обновления приложения потребуется только создать ссылку (последняя команда).
На этом настройка BTEP закончена.
Настройка SSHDroid
Тут всё аналогично: после включения опции Custom profile измените файл /data/data/berserker.android.apps.sshdroid/home/.profile так:
1 2 3 4 5 6 7 8 9 10 | PATH=/data/data/berserker.android.apps.sshdroid/home/bin:$PATH export PATH if [ -e "/data/data/com.magicandroidapps.bettertermpro/bin/bash" ]; then /data/data/com.magicandroidapps.bettertermpro/bin/bash --rcfile /sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile else echo "./bin/sh" sh fi |
Если существует bash, будет запущен он с конфигом выше, или же sh из SSHDroid.
Улучшения
После установки SSH-клиента размер данных BTEP увеличивается почти до 10 МБ, так как добавляется много дополнительных бинарников и Busybox, более свежая версия которого входит и в SSHDroid.
Поэтому я написал небольшой скрипт, который выполняет действия, описанные выше, а также удаляет всё лишнее.
btep.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #!/system/bin/sh USERID="10090" cd $HOME case $1 in "b") find ../bin/ -type l -exec rm -f {} \; && \ rm -f ../bin/busybox.exe && \ #rm -f ../bin/ether-wake && \ # файл повторяется, однако набор опций различен rm -f ../bin/dropbear* && \ rm -f ../bin/scp && \ rm -f ../bin/sftp-server && \ rm -f /data/data/berserker.android.apps.sshdroid/dropbear/ssh && \ echo "../bin/busybox.exe and links deleted!" ;; "d") if [ -d "../downloader" ] then rm -Rf ../downloader/ ln -s ../../../mnt/sdcard/data/com.magicandroidapps.bettertermpro/downloader ../downloader && \ chown $USERID:$USERID ../downloader && \ chmod 777 ../downloader && \ echo "../downloader/ deleted!" fi ;; "n") if [ ! -f "../bin/nano" ] then cp ../../../../mnt/sdcard/data/com.magicandroidapps.bettertermpro/opt/nano/nano ../bin/ && \ chown $USERID:$USERID ../bin/nano && \ chmod 777 ../bin/nano && \ echo "nano copied from SD!" else echo "../bin/nano exists!" fi ;; *) if [ ! -f "local_profile" ] then cp /mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/local_profile_HOME local_profile && \ echo "local_profile copied from SD!" fi chown $USERID:$USERID local_profile chmod 777 local_profile if [ ! -e ".profile" ] then ln -s local_profile .profile && \ echo "local_profile link to .profile created!" fi if [ ! -d ".ssh" ] then rm -Rf .ssh ln -s ../../../../mnt/sdcard/data/com.magicandroidapps.bettertermpro/home/.ssh && \ echo ".ssh link to SD created!" else echo "Directory/link .ssh exists!" fi rm -Rf Advent.z5 rm -f /data/data/berserker.android.apps.sshdroid/home/.ash_history chown -R $USERID:$USERID * chmod 777 ../ ;; esac |
О параметрах запуска скрипта:
Без параметров — копирование конфига, создание ссылки на .ssh на SD, удаление лишних файлов после загрузки BTEP SSH;
b — удаление busybox, ссылок и повторяющихся с SSHDroid программ;
d — создание ссылки на папку downloader на SD (должна быть уже скопирована), и удаление исходной папки (если просто удалить папку, повторная загрузка будет происходить при каждом запуске BTEP);
n — копирование nano, скачать можно здесь.
В скрипте могут быть ошибки, но у меня он работает :)
Недостаток всего этого решения, который для кого-то может быть существенным: кириллица и в эмуляторе терминала, и в SSH НЕ поддерживается.
Всё это естественно не нужно обычному пользователю, но если вам нужно покопаться в андроиде, станет гораздо удобнее.
В следующий раз: настройка Samba-сервера, Wake On Lan без дополнительных приложений, и другое про робофон.
Интересный и подробный обзор.
Если вам интересно узнать об аналогичных терминалах, правда большая часть под Windows, то можете посмотреть тут.
http://lib.ru/CYRILLIC/Cyrillic-HOWTO/Cyrillic-HOWTO-russian-5.html
кириллизация баша под андроидом (при условии помещения последнего в каталог /system/bin/ или /system/xbin, до btep руки не дошли проверить) :
1.перемонтируем системный раздел на запись (опционально)
2.создаём /etc/inputrc со следующим текстом
set meta-flag on
set convert-meta off
set output-meta on
3. выдаём файлу /etc/input права 777 или 755 (я выставил 777)
4. перемонтируем системный раздел на чтение (опционально)
5. ?
6. PROFIT !
з.ы. более свежий баш есть в пииложении “bash shell x”, файл assets/arm/bashARM внутри апк, кому лень устанавливать приложенние
з.з.ы. а статья крайне полезная :)