Толик Панков
hex_laden
............ .................. ................
October 2025
      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

Толик Панков [userpic]
Доступ к сетевым ресурсам (папкам) Windows из PuppyRus Linux II

Часть 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
А почти устраивающий меня ответ, как обычно, нашелся, но уже поздно. И по совсем другому запросу.