Монтирование образов ISO в KDE5 Dolphin'ом

Всем лучи добра. Тема уже избитая давно, но всё же. Частенько приходится работать с образами и всё бы ничего, и даже утилиты стандартные есть, но всё не то, например, всем известная fuseiso из рук вон плохо работает с образами udf iso-13346, а точнее совсем не работает (монтировать-то монтирует, но там часто лежит файл ридми, что король-то голый! образ-то на самом деле смонтирован неверно, особенно это касается исошек с виндой). В общем, задался я целью сделать человеческое монтирование, а т.к. я кедераст, то чтобы ещё тычком монтировалось (ну или хотя бы через меню правой крысой). Кстати, iso-13346 отлично монтируется стандартной командой mount... но она должна запускаться от рута, в общем не то. Ну лень мне каждый раз пароль для монтирования/размонтирования исошки вводить!) Стал смотреть, какие ещё есть чудесные способы: в дельфине (стандартный фм в кде) есть замечательная возможность загружать действия и сервисы из кде стора прямо из его настроек действий, но всё, что я там видел были основаны на уже знаменитой fuseiso, а многие ещё кривили скриптами или не работали в 5-й плазме. И тут я понял, что придётся костылить всё самому: либо смириться и использовать fuseiso (но тогда смонтированный образ не появляется в боковой панели как устройство,а доступно как обычная папка) и монтировать iso-13346 ручками или прикостылить в меню скрипт на создание точки монтирования, затем mount и через пароль... Стойте! У нас же есть udisks! Он, оказывается тоже умеет в исо, и даже iso-13346 (ну да, ведь в итоге он всё равно юзает стандартный mount), но только сам создаёт точку монтирования, сам следит за всем этим хозяйством. Итак вот команда, которая нам нужна:
udisksctl loop-setup -r -f %f
loop-setup подготавливает блочное устройство (но не монтирует его), -r говорит только на чтение, -f говорит, что у нас ожидается файл исо, спецификатор %f задаёт имя его, когда скрипт исполняется через сервисный файл. Но опять пароль...
К счастью, udisksctl умеет в правила polkit. Я же хочу монтировать без регистрации бесплатно и без смс только исо, а остальные разделы, например, системный виндовоза (да-да,я тот самый сраный арчешкольник-дуалбутчик (пользую редко, но метко)) нужно чтобы монтировался не без палева, мало ли... Итак настраиваем правила, чтобы только исо и ни-ни! Т.к. подготовка образа и добавление его к списку системных устройств операция системная (простите за тавтологию), то нам надо разрешить монтировать iso без смс и регистрации только юзерам в группе storage. Долго и мучительно разбирался с polkit, под каким соусом его подают и с чем едят (с d-bus), а оно эвон что — на ECMA script крутится! Кто в танке: ECMA script — это такой эдакий стандарт для скриптовых языков и JavaScript пророк его. Таки да ООП там и всё такое, и D-bus там рядом. Так о чём это я? Ах да, правило. Вот оно:
/etc/polkit-1/rules.d/50-udisks-udf.rules
       // Allow users in group 'storage' to perform any operation on
       // some drives without having to authenticate
       //
       polkit.addRule(function(action, subject) {                                      // добавляем правило действия над субъектом
       //polkit.log("action=" + action);                                                       // ...in Just for lulz
       //polkit.log("subject=" + subject);                                                   // для отладки
           if (action.id.indexOf("org.freedesktop.udisks2.") == 0 &&         // проверяем, что действие исходит из недр udisks
               action.lookup("id.type") == "udf" &&                                     // проверяем что мы монтируем исошку (определяем по типу фс, для исо она udf)
               subject.isInGroup("storage")) {                                            // мы не верблюды
                  return polkit.Result.YES;                                                   // ОГА
              }
      });
После сохранения правила автоматом перечитаются и изменения немедленно вступят в силу. Теперь можно невозбранно намонтировать себе исошек аж целых семь (7) штук. Использование голого udisks некошегно, ибо придётся совершать много дополнительных действий по подготовке блочного устройства, его последующего монтирования с отслеживанием имени файла, который мы только что примонтировали для его дальнейшего корректного размонтирования (т.к. пункт меню «отключить» в дельфине сбоку в устройствах на самом деле только удалит точку монтирования, но не размонтирует само блочное устройство /dev/loop%), поэтому заюзаем обёртку над udisks — udiskie. Ага, udisks сам по себе является обёрткой над стандартным mount, только с D-Bus и танцовщицами, эдакий дом, который построил Джек, впрочем, в наш век гипервизоров над виртуалками в виртуалках, да с электроном, это норм... Так, о чём это я? А, да, т.к. монтирование в консоли для слабаков и мы не ищем лёгких путей, создадим пункт в контекстном меню, которое будет появляться при клике правой крысой и только на исошках. Для этого создаём файлик в (для кде 5) ~/.local/share/kservices5/ServiceMenus/ с любым подходящим названием и расширением .desktop со следующим содержанием:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/x-cd-image
Actions=mount;unmount;
X-KDE-Priority=TopLevel
X-KDE-StartupNotify=false
Icon=application-x-cd-image
X-KDE-Submenu=Монтирование ISO

[Desktop Action unmount]
Name=Размонтировать
Icon=edit-redo
Exec=udiskie-umount %f

[Desktop Action mount]
Name=Монтировать
Icon=circular-arrow-shape
Exec=udiskie-mount %f
Сохраняем и всё, теперь у нас есть в контекстном меню при нажатии на исошку пункт Монтирование ISO с двумя подпунктиками Монтировать/Размонтировать, которые будут появляться только на файлах образов. Монтируется/Размонтируется правым кликом на файле образа. Если отключить правым кликом на смонтированном диске слева в дельфине, то устройство просто потеряет связь с реальностью (удалится папка монтирования), но останется смонтированным и если вы просто снова кликните на этот переход, то он с радостью опять создаст папку и смонтирует туда. Для окончательного размонтирования нам понадобится снова найти тот файл *.iso который мы смонтировали и правым кликом на нём размонтировать. Устройство из дельфина никуда не денется, но, поверьте, его там больше нет).
P.S.: так, почему у меня ничего не работает!!!!11111? А, ну да, ну да, udiskie-то мы не установили:
$ sudo pacman -S udiskie
Может кому пригодится, если нет, то в /dev/null. Заранее прошу простить и понять за излишнее графоманство и многабукафф :-)
[email protected]# cat /dev/ass > /dev/head
в AUR-е есть такая штука kde-cdemu-manager, удобненько )))
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Лишний демон в системе... Хотя выглядит привлекательно, но я с таким же успехом мог заюзать Acetoneiso, но, чот, как-то влом было запускать каждый раз огромную программулину для такой простой операции, потом искать примонтированную папку, либо, если в ней открывать, то создаётся ещё одно лишнее окно дельфина, не считая самой Acetoneiso... Хотелось всё как-то по-минимуму (хотя кде и минимум не вяжется :-)), нативненько) Единственное, что не смог пока победить, это чтобы при отмонтировании places в дельфине бы обновлялся,а то висит мертвечина, пока другое окно не откроешь( но не критично) В общем, пощупаю cdemu, спасибо за наводку)
[email protected]# cat /dev/ass > /dev/head
 
Зарегистрироваться или войдите чтобы оставить сообщение.