Shumaher’s_Blog@AlexZ.me

— yet another stupid personal weblog

Как монтировать сетевые диски Windows в Android без консоли (часть 2)

В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.


CifsManager

CifsManagerAndroid Market | market:// | 4PDA

Описание есть на форуме 4PDA, поэтому подробно останавливаться на этом приложении я не буду.
Стоит только отметить правильный порядок модулей в опции Path to cifs.ko (видно на скриншоте).
А так же при создании шары не забудьте в опциях вбить iocharset=utf8,file_mode=0777,dir_mode=0777
Прямо из приложения можно открыть установленным файловым менеджером подключенный ресурс, что плюс.
А минус — нет бэкапа опций на SD, потому что их достаточно много. Так что при, например, перепрошивке, всё нужно будет вбивать заново (если не пользоваться прогами для бэкапа).
Но главное — оно работает, и позволяет монтировать в 2 тапа пальцем по экрану: запуск приложения + тап по нужной шаре.


GScript

GScript - Edit scriptGScript - cifs.sh

Lite: Android Market | market://
Full: Android Market | market:// | 4PDA

Это приложение предназначено не именно для монтирования, а для запуска вообще любых скриптов. Также поддерживает создание ярлыков, что и позволяет монтировать шары в один тап.
Имеются функции и сохранения/загрузки скриптов с SD-карты.
Полезные скрипты можно найти в теме на XDA.

Ну а теперь к монтированию.
Можно было бы, конечно, просто вбить все команды из предыдущего поста: insmod, mount и unount. Но это всё равно долго и нудно (особенно если подключаемых ресурсов несколько), поэтому я для себя решил наговнокодить скрипт, чтобы все нужные команды были в одном обычном sh-файле, который можно будет запускать не только из GScript, но и при необходимости из терминала.

cifs.sh:

старый вариант скрипта, новый смотрите ниже

#!/system/bin/sh

export PATH=/data/data/berserker.android.apps.sshdroid/home/bin:$PATH

case $1 in

"m")
if mount | grep -Fq 'unc=\192.168.1.1\share,username=USER'
then
echo "UnMounting //server/share ..."
umount -f -l /mnt/sdcard/cifs/share
echo "//server/share unmounted for USER!"
echo
echo
echo
echo
echo
echo
else
echo "Mounting //server/share ..."
mount -t cifs -o ro,iocharset=utf8,username=USER,password=PASS,file_mode=0777,dir_mode=0777 //192.168.1.1/share /mnt/sdcard/cifs/share && \
echo "//server/share mounted for USER!"
echo
echo
echo
echo
echo
echo
fi
;;

"l")
lsmod && \
echo
echo
echo
echo
echo
echo
;;

"r")
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \

modprobe -r nls_utf8 && \
modprobe -r cifs && \
modprobe -r slow-work && \
echo "*.ko unloaded!"
echo
echo
echo
echo
echo
echo
;;

*)
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \

modprobe slow-work.ko && \
modprobe nls_utf8.ko && \
modprobe cifs.ko && \
echo "*.ko loaded!"
echo
echo
echo
echo
echo
echo
;;

esac



На первом скриншоте видно, что перед скриптом стоит команда sh, что позволяет запускать его с SD-карты в FAT32, где невозможно сделать chmod +x.
Зачем при этом у меня такой длинный путь к файлу, я напишу как-нибудь потом...

Теперь пара слов о самом скрипте.
Результат работы показан на втором скриншоте, после того как скрипт отработал окно автоматически закрывается.
Несколько пустых echo добавлено чтобы появляющийся поп-ап не закрывал вывод.

При запуске без параметров происходит загрузка всех модулей, l — список модулей, r — выгрузка, m — список смонтированных шар (только в cifs.sh v2.0).
m c — монтирование/размонтирование; если шара смонтирована, происходит размонтирование, и наоборт.

ВАЖНО:
Скрипт использует grep, поэтому должен быть установлен BusyBox.
Исправьте переменную PATH, указав правильный путь до grep!
Также (хотя это и не будет влиять на запуск из-под GScript), исправьте/проверьте путь до интерпретатора sh в 1 строке.

Добавляя другие аргументы в case (например, m1, m2 и т.д) можно подключать несколько шар, или одну под разными юзерами. Естественно всё ограничивается лишь вашей фантазией.

Это решение мне показалось лучше в первую очередь тем, что скрипт можно легко редактировать, просто открыв в текстовом редакторе при подключении смартфона как USB-диска, или через SSH.
Как-нибудь позже я напишу об организации в Android одной среды как при запуске терминала, так и при подключении по SSH.

А пока что — с наступающим, юзернеймы! Ведь до 2012-го осталось меньше суток :-)


UPD 05.05.2012, 15:12:

Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER, PASS, SERV, SERVNAME и SHARE в строках 44-48, и добавить новый блок в case. Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).


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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/system/bin/sh
 
#######	cifs.sh v2.0 (05.05.2012) by Shumaher
#######	https://blog.alexz.me/kak-montirovat-setevye-diski-windows-v-android-bez-konsoli/
################################################################
 
SCRIPTVER='cifs.sh v2.0 (05.05.2012) by Shumaher'
 
export PATH=/data/data/berserker.android.apps.sshdroid/home/bin:$PATH
 
func ()
{
DIRBASE="/mnt/sdcard/cifs"
DIR="$DIRBASE/$SERVNAME/$SHARE"
SHAREPATH="//$SERV/$SHARE"
PATTERN="unc=\\\\$SERV\\$SHARE,username=$USER"
 
if [ $USER == "read-only-user" ]	# пользователь для монтирования в read-only
then
RW="ro"
else
RW="rw"
fi
 
if mount | grep -Fq -- "$PATTERN"
then
echo "UnMounting $SHAREPATH ..."
umount -f -l $DIR && \
echo "$SHAREPATH unmounted for $USER!"
else
echo "Mounting $SHAREPATH ..."
mount -t cifs -o $RW,iocharset=utf8,username=$USER,password=$PASS,file_mode=0777,dir_mode=0777 $SHAREPATH $DIR && \
echo "$SHAREPATH mounted for $USER!"
fi
}
 
echo $SCRIPTVER
echo
echo
 
case $1 in
 
	"c")		# данные для подключения к серверу, блок начиная с этой строки до ;; можно копировать, меняя аргумент "c"
USER="user"
PASS="password"
SERV="192.168.1.1"
SERVNAME="comp"
SHARE="share"
func			# func не удалять!
	;;		# копировать до этой строки включительно
 
	"l")
lsmod
        ;;
 
	"m")
if mount | grep -q -- "type cifs"
then 
mount | grep -- "type cifs"
else
echo "No mounted shares found!"
fi
	;;
 
	"r")
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
 
insmod -r nls_utf8 && \
insmod -r cifs && \
insmod -r slow-work && \
echo "*.ko unloaded!"
        ;;
 
	*)
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
 
insmod slow-work.ko && \
insmod cifs.ko && \
insmod nls_utf8.ko && \
echo "*.ko loaded!"
mkdir /lib
ln -s ../mnt/sdcard/cifs/modules/ /lib/ && \
echo "Link to /lib created!"
	;;
 
esac
 
echo
echo
echo
echo
echo
echo
VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)
Оставьте свой комментарий




OpenID WordPress.com Yahoo

Это не спам.