[Решено]Как отличить mtp от ums?

Как заставить udev при размонтировании отличать mtp от обычной флэшки?

ACTION=="add"  KERNEL=="sd[b-z][0-9]" RUN+="[email protected]"
ACTION=="add"  ATTR{interface}=="MTP" RUN+="[email protected]"
ACTION=="remove" KERNEL=="sd[b-z][0-9]" RUN+="[email protected]"
ACTION=="remove"  RUN+="[email protected]"

может подскажет кто какой-нить фокус?? а то на макбук пока денег нету)))
Ошибки в тексте-неповторимый стиль автора©
"Обычная флешка" это блочное устройство с файловой системой, которую можно монтировать и отмонтировать.
Каким образом с ней вообще можно перепутать MTP, и как вы его "монтируете"?
И какое отношение имеет UDEV к отмонтированию? По какому такому событию UDEV? Отсоединённое устройство явно поздно уже отмонтировать.
ну перепутать можно всё что хотите)))
через mtpfs оно великолепно монтируется, а umount его размонтирует.

Да, поздно и неправильно)). Событие ACTION=="remove" может не совсем корректно зато работает размонтирует и удаляет каталог, что позволяет примонтировать в туже точку, а в случаи с mtp вообще примонтировать. Автомонтирование вообще зло...

вот только если при подключении можно проверить атрибуты, то после отключения их не проверишь((
и получается что при извлечении флэшки размонтируется и mtp

p.s. причём флешки при размонтировании udev различает по KERNEL==, проблема в том что в mtp KERNEL== получается идентичная.
Ошибки в тексте-неповторимый стиль автора©
indeviral
через mtpfs оно великолепно монтируется
К слову: это крупно повезло. У меня из трёх гаджетов ни один не монтируется через mtpfs. А через jmtpfs из AUR - все три без проблем.
mtpfs типа название протокола(или фс)... через него давно уже ничего не монтируется он вроде как в основном для медиаплееров... я использую simple-mtpfs))
Ошибки в тексте-неповторимый стиль автора©
indeviral
если при подключении можно проверить атрибуты, то после отключения их не проверишь
Но имя устройства-то проверить можно!
Ваши правила вообще безадресные – в них имя устройства не задаётся ни при монтировании, ни про отмонтировании.
Выходит, что ваша проблема шире – извлечение ЛЮБОГО устройства вызывает отмонтирование всех остальных, либо первого попавшегося.

Запустите
udevadm monitor -p
выдерните девайс, и получите список всего, что можно проверить при выдёргивании.
Да я так для примера написал... На самом деле я незнаю что писать, Kernel одинаковый((
Я пробовал через переменные окружения там: udevadm monitor --enviroment
ACTION=="remove", ENV{ID_MTP}=="1", RUN+=
Но такого формата правила не отрабатывают, по сути же так писать нельзя нужны доп. условия?
Ошибки в тексте-неповторимый стиль автора©
Поделиться своим комплектом автомонтирования и размонтирования? Только там всё не юниксвэйное.
поделитесь, интересно посмотреть как у других сделанно...
вот мой
Ошибки в тексте-неповторимый стиль автора©
Официальный mtpfs с моими устройствами не работал вообще. А вот jmtpfs из AUR нормально работает и с относительно старым планшетом (Андроид 4.2), и с относительно новым телефоном (4.4). В качестве точки монтирования используется /media/<имя устройства> (ID_MODEL). В принципе, оно может оказаться одинаковым для двух устройств, в этом случае будет плохо - это у меня не анализируется.
Ещё надо напомнить, что для того, чтобы со смонтированным устройством нормально мог работать юзер (-o allow_other), нужно в файле /etc/fuse.conf раскомментировать user_allow_other.
Отмонтирование с удалением точки монтирования должно происходить даже в случае "силового" отключения устройства (выдернули кабель). В последнем случае данных об имени устройства уже нет, поэтому точку монтирования для каждого автосмонтированного устройства я запоминаю в файле, имя которого строится из имени устройства, а содержимое - точка монтирования. Файлы эти размещаю в /run/removable-mount/.
Монтирование mtp
/etc/udev/rules.d/99-mtpmount.rules
# Automount mtp device
ENV{ID_MTP_DEVICE}=="1", ACTION=="add",\
    RUN+="/usr/local/bin/mtp_add mtp$env{BUSNUM}_$env{DEVNUM} $env{ID_MODEL}"
ENV{ID_MTP_DEVICE}=="1", ACTION=="remove",\
    RUN+="/usr/bin/systemctl stop [email protected]$env{BUSNUM}_$env{DEVNUM}"
/usr/local/bin/mtp_add
#!/bin/bash
# $1 - artifical device name as "mpt002_007" for "/dev/bus/usb/002/007"
# $ID_MODEL used as mountpoint
mp_dir="/run/removable-mount"
mkdir -p $mp_dir
echo /media/$ID_MODEL > $mp_dir/$1
/usr/bin/systemctl start [email protected]$1
/etc/systemd/system/[email protected]
[Service]
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes
ExecStart=/usr/local/bin/mtp_mount %I
ExecStop=/usr/local/bin/autoumount %I
/usr/local/bin/mtp_mount
# mount mtp device to the /media by device name
mp_dir="/run/removable-mount"
mountpoint=`cat $mp_dir/$1`
DEV=${1:3:3},${1:7:3}
/usr/bin/mkdir -p $mountpoint
/usr/bin/jmtpfs -o allow_other -device=$DEV $mountpoint ;
Отмонтирование

Отмонтирование с удалением точки монтирования делает следующий скрипт, параметром которого является имя файла с точкой монтирования, созданного при монтировании. Этот скрипт может вызываться как руками (типа культурно), так и из правила udev при резком пропадании устройства.
/usr/local/bin/autoumount
#!/bin/bash
# umount if mounted and remove mountpoint via mountfile $1 (see "automount")
mp_dir="/run/removable-mount"
mp_file=$mp_dir/$1
if [ -f $mp_file ]; then
  mountpoint=`cat $mp_file`
  umount $mountpoint 2> /dev/null
  rmdir $mountpoint 2> /dev/null
  rm $mp_file
fi
 
Зарегистрироваться или войдите чтобы оставить сообщение.