Shumaher’s_Blog@AlexZ.me

— yet another stupid personal weblog

Общие настройки для эмулятора терминала и SSH в Android

Если вам нужно сделать что-то полезное с устройством на Android, например отредактировать конфиг, насоздавать сразу много папок на SD карте, заморозить ненужные системные приложения, выполнить скрипт, смонтировать CIFS, то вам не обойтись без эмулятора терминала.
Но, если рядом есть компьютер и Wi-Fi, эти действия удобнее производить с него, а не на крошечном экране смартфона, пытаясь попасть в ещё более мелкие клавиши виртуальной клавиатуры.
А ещё удобнее, когда одни и те же алиасы и другие настройки есть и при открытии терминала на самом устройстве, и при подключении к нему по SSH.

Вы ведь для этого купили именно смартфон на Андроиде? Я лично — в том числе. :-)
Поэтому сегодня я расскажу, как создать консоль не хуже чем в десктопных линуксах.

В качестве эмулятора терминала я использую Better Terminal Emulator Pro (Google Play | market:// | 4PDA), а в качестве SSH-сервера SSHDroid (Google Play | market:// | 4PDA).


Настройка BTEP

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 без дополнительных приложений, и другое про робофон.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

2 комментариев »

  1. Интересный и подробный обзор.
    Если вам интересно узнать об аналогичных терминалах, правда большая часть под Windows, то можете посмотреть тут.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    Reply to this commentReply
  2. John Silver сказал

    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 внутри апк, кому лень устанавливать приложенние

    з.з.ы. а статья крайне полезная :)

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    Reply to this commentReply
Оставьте свой комментарий




OpenID WordPress.com Yahoo

Это не спам.