akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
Во времена bluez4 был gvfs-obexftp и не было проблем: и точка монтирования сама создавалась, и потом сама удалялась. Но нынче с суровым bluez5 не работет ни gvfs-obexftp, ни официальный blueman. Спасибо, есть в AUR blueman-git, которым можно делать поиск и спаривание, ну а для монтирования файловой системы есть obexfs. Вот только монтирование-размонтирование приходится делать самому на коленках, о чём, собственно, и пойдёт речь (особенно об отмонтировании). Итак, хочется следующего:
В вики приводится малодушное решение, когда точка монтирования одна и статическая, а про аварийное отмонтирование вообще и речи нет. Это не наш путь. 1. Монтирование Зацепкой для монтирования может служить MAC-адрес. Для "своих" гаджетов можно заготовить меню монтирования, где MAC-адреса прописаны явно, а для гостей можно использовать blueman, который опять таки передаёт MAC-адрес. Я использую следующий скрипт obex-mount:
Этот же скрипт у меня прописан в blueman в качестве команды обзора. Реально он, естественно, выполняет только монтирование. Если хочется, чтобы автоматом вызвался файловый менеджер - соответствующую команду можно добавить в скрипт. 2. Отмонтирование Тут проблем три: как зафиксировать потерю связи, чтобы вызвать размонтирование; как зафиксировать факт размонтирования; как найти точку монтирования, чтобы её удалить. Изучение событий udev показало, что при монтировании появляется устройство (add) в подсистеме bluetooth, в каталоге которого есть файл address, содержащий MAC-адрес. А при потере связи и при размонтировании это устройство удаляется (remove). Беда в том, что при удалении правило срабатывает уже после удаления, так что MAC-адрес найти уже невозможно. Поэтому где-то в /run будем запоминать связь между путём устройства (это будет имя файла) и bleutoooth-именем (это будет содержимое файла). У меня единственный bluetooth-контроллер, так что пути разных устройств отличаются только последним элементом, его я и использую для идентификации устройства. Ну а теперь собственно решение. /etc/udev/rules.d/99-obex.rules
/usr/local/bin/obex_add
/usr/local/bin/obex_rm1
/etc/systemd/system/obex@.service
/usr/local/bin/obex_rm2
|