Часть 2. Используя консольные команды.
Заодно устраняем проблемы с кодировками и занимаемся некоторыми улучшательствами и малой автоматизацией по просьбам товарищей.
В
первой части я использовал графический samba-клиент, который, кроме всего прочего умеет генерировать скрипт монтирования сетевой папки (меню Options->Generate mountscript), вот его-то и надо подправить. Для ускорения процесса я выложу уже подправленный и поясню что к чему.
#! /bin/sh
# SMB mount script
# created by LinNeighborhood
smbmount //TESTCOMP/shared /mnt/winshared/ -o guest,iocharset=utf8,codepage=cp866,fmask=644,dmask=755
где
smbmount - собственно команда, монтирующая сетевую папку
//TESTCOMP/shared - адрес нашей сетевой папки
/mnt/winshared/ - точка монтирования, где у нас после выполнения команды отобразится содержимое сетевой папки. Должна быть создана заранее. Это просто любая пустая директория, создающаяся где вам удобно (но лучше все-таки в /mnt) из графической оболочки или с помощью команды mkdir <путь_к_папке> (напр. mkdir /mnt/winshared/)
-o - после этого параметра (и пробела) следуют опции монтирования (они перечисляются через запятую без пробелов):
guest - произвести подключение без указания имени пользователя и пароля. В некоторых случаях имя пользователя и пароль требуются (см. настройки на компьютере с Windows),в таком случае необходимо заменить guest на user=имя_пользователя,pass=пароль Аналогично опции guest сработают опции user=guest,pass= или user=guest%
iocharset - кодировка, используемая Linux'ом (в нашем случае utf8)
codepage - кодировка, в которой удаленный компьютер передает имена файлов в сетевой папке (в нашем случае это кодовая страница 866). Внимание! Перед номером кодовой страницы необходимо не забыть написать cp (cp866 а не просто 866).
fmask и dmask - права доступа соответственно к файлам и директориям. Тут простор для решений (можно и вообще убрать эти параметры), но я поставил такие, ибо если оставить по умолчанию, у всех файлов будет атрибут выполнения, что не есть хорошо.
Этот скрипт нужно сохранить в текстовом файле под удобным названием в удобной вам папке и установить ему права на исполнение.
Проблема с кодировками устранена
Скрипт размонтирования сетевой папки
#! /bin/sh
umount /mnt/winshared
Улучшаем скрипт. Автоматическое создание точки монтирования.
Можно автоматически создавать точку монтирования перед собственно монтированием сетевой папки, для этого надо дополнить наш скрипт, вставив следующий код перед smbmount
if ! [ -d /mnt/winshared ]; then
mkdir /mnt/winshared
fi
Про оператор if можно подробнее прочесть
тутЯ дам лишь краткое пояснение:
-d имя_директории - проверка, существует ли такая директория
! - аналог логического оператора НЕ
Т.е. данный код работает таким образом - в случае, если не существует директории /mnt/winshared то выполняются команды внутри конструкции then fi, а там как раз создание директории, которая в дальнейшем будет использована в качестве точки монтирования.
Улучшаем скрипт. Монтирование сетевой папки при страте X-server'а и выдача окна с сообщением об ошибке, в случае если она произошла.
Удобно монтировать сетевые папки автоматически, например, при старте X-server'а, для этого достаточно скопировать скрипт в директорию Startup того пользователя, под которым вы работаете. Но есть небольшая проблема - скрипт запустится без всяческих сообщений, в т.ч. и в случае ошибки (например, если компьютера с расшаренной папкой нет в сети). Исправляем этот недочет:
#!/bin/bash
if ! [ -d /mnt/winshared ]; then
mkdir /mnt/winshared
fi
smbmount //TESTCOMP/shared /mnt/winshared/ -o guest,iocharset=utf8,codepage=cp866,fmask=644,dmask=755 >/tmp/sharemess
if [ $? -ne 0 ]; then
xmessage -title error -file /tmp/sharemess
wait
rf /tmp/sharemess
exit 1
fi
exit 0
До строки if [ $? ... все осталось без изменений, кроме того, что добавилось перенаправление вывода команды smbmount во временный файл sharemess (>/tmp/sharemess), который используется позже.
Оператор if, после операции монтирования анализирует результат работы операции монтирования (т.е. ее код завершения), хранящийся в системной переменной $?, и если он не равен (операнд -ne) нолю, значит, произошла ошибка, текст которой будет выведен пользователю в диалоговом окне командой xmessage. Ее параметры:
-title заголовок - заголовок диалогового окна
-file имя_файла - файл с текстом диалогового окна. В данном случае - файл, в котором хранится вывод команды smbmount.
Другие параметры команды xmessage можно увидеть выполнив в консоли xmessage --help
После выдачи сообщения об ошибке, скрипт ждет когда команда xmessage завершится, т.е. пользователь нажмет кнопку OK (это достигается использованием команды wait), удаляет файл с сообщением об ошибке (rf /tmp/sharemess) и завершается с кодом завершения 1.
Так будет выглядеть сообщение об ошибке
Если ошибки не произошло, скрипт завершает свою работу с кодом завершения 0.
Открытие сетевой папки после монтирования
Для открытия сетевой папки в графической среде после монтирования, необходимо дополнить вышеприведенный скрипт вызовом файлового менеджера ROX (команды вставляются перед exit 0):
rox /mnt/winshared
wait
Скачать заметку (Yandex.Disk, DOC)Скачать заметку (Mega.nz, PDF)UPD
А почти устраивающий меня
ответ, как обычно, нашелся, но уже поздно. И по совсем другому запросу.
(
Comments |
Comment on this)