Браузер 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
скрипт нормально показал себя и при работе с именами шар, содержащими пробелы и кириллицу.