Firefox & samba

Браузер mozilla-firefox не позволяет работать с протоколом smb напрямую.
Существует множество способов использования ресурсов, расшаренных по самбе, в линуксе. Начиная от ручного монтирования и заканчивая специальными утилитами с поддержкой этого протокола.
В этой статье пойдёт речь о способе доступа к вышеупомянутым ресурсам с помощью веб-клиента mozilla-firefox и обычного файлового менеджера.

Настройка браузера.

первым делом устанавливаем обработчик протокола smb. Это делается для того, чтобы наш браузер узнал к какой программе обращаться при попытке открытия ссылки smb://…

для этого:

1) Открываем страничку настроек параметров браузера. Она находится по адресу about:config

2) Создаём параметр network.protocol-handler.external.smb.
Для этого нужно нажать правой кнопкой мыши на страничке —> Создать —> логическое —>
—> network.protocol-handler.external.smb —> true.

3) Добавляем ещё один параметр.
Создать —> Строка —> network.protocol-handler.app.smb —> полный путь к программе-обработчику.
В качестве обработчика можно выбрать любую программу, понимающую этот протокол (например konqueror)

Установка обычного файлового менеджера в качестве обработчика

При помощи небольшого костыля мне удалось организовать доступ к самба-шарам из обычного файлового менеджера.

Как это работает
При переходе по ссылке smb://… браузер вызывает скрипт-обработчик, передавая ему ссылку как параметр.
Скрипт парсит ссылку и определяет имя сервера, название шары и запрошенный полный путь.
Затем монтирует шару в специальную директорию(Если запрошенная шара уже смонтирована, этот шаг пропускается)
И вызывает файловый менеджер, передавая ему преобразованную ссылку на примонтированный ресурс.

По-умолчанию обычным пользователям не разрешено монтирование.
Разрешаем использование команды mount следующим образом:
Устанавливаем sudo
В файл /etc/sudoers добавляем строку:
<имя пользователя> ALL= NOPASSWD:/bin/umount,/bin/mount
подробнее о синтаксисе — man sudoers

Скрипт-обработчик

$ cat /opt/smbhandler.pl #!/usr/bin/perl #use strict; #use warnings; my $PATH="/mnt/smb"; #path to mnt root dir my $APP="/usr/bin/thunar"; #file manager my $url=$ARGV[0]; #script argument - url $url=~s|%$@~*!G4;:%#`smb://(.+?)/(.+?)/(.*)$|/$1_$2/$3|; my $dir="$PATH/$1_$2"; # compose dir name for mount my $share="//$1/$2"; # compose share name $url=~s/%([0-9a-fA-F]{2})/pack('C',hex($1))/eg; # make url $url="$PATH$url"; # full path if(!-d "$dir"){ # dir doesnot exist yet mkdir "$dir"; # create it &mount($share, $dir); # mount share }else{ # dir already exist # check mounted or not my $var=`/bin/mount|/bin/grep "$share"`; if( "x" eq "x$var"){ # not mounted - do mount &mount("$share","$dir"); } } system $APP, "$url"; # run file manager sub mount($$){ # mount share function # args: 1 - $share; 2 - $mnt_dir system("/usr/bin/sudo", "/bin/mount", "-o rw,guest", "$_[0]", "$_[1]")==0 || die "mount failed: $? $!"; }

Небольшое замечание: Если ссылка имеет вид smb://host/share/, то слэш на конце обязателен.

После небольшой доработки можно научить его работать не только с сылками
вида smb://host/share/blabla но и с \\host\share\blabla
скрипт нормально показал себя и при работе с именами шар, содержащими пробелы и кириллицу.

Если у вас есть какие-то замечания, дополнения или пожелания — пишите