Монтировании MTP устройств

  • alexanderzhirovalexanderzhirov 26.01.2023
    Делаю сборку Linux для тонких клиентов на базе Thinstation 6.2 (https://github.com/Thinstation/thinstation).

    Собираю пакет для монтирования MTP устройств (Android смартфоны).
    Собственно, руками без проблем монтирую как и simple-mtpfs (https://github.com/phatina/simple-mtpfs), так и aft-mtp-mount (https://github.com/whoozle/android-file-transfer-linux).

    Решил написать правила для udev и скрипт для монтирования.
    Сначала написал сложный скрипт, с кучей проверок, но в процессе тестирования его очень сильно урезал для отладки, получилось так:

    #!/bin/sh
    
    . /etc/thinstation.env
    . $TS_GLOBAL
    
    if [[ $ACTION == "add" ]]; then
        echo "********************* START MOUNT *******************" | systemd-cat -p err -t "mtp"
        aft-mtp-mount /phone
        grep -oe "/phone" /proc/mounts | systemd-cat -p err -t "mtp"
        ls "/phone/Внутренний общий накопитель" | systemd-cat -p err -t "mtp"
        echo "********************** END MOUNT ********************" | systemd-cat -p err -t "mtp"
    elif [[ $ACTION == "remove" ]]; then
        echo "******************** START UNMOUNT ******************" | systemd-cat -p err -t "mtp"
        umount /phone
        echo "********************* END UNMOUNT *******************" | systemd-cat -p err -t "mtp"
    fi

    udev срабатывает на присоединение/отсоединение устройства. Скрипт тоже отрабатывает по событию. Всё бенч, но есть нюанс: монтирование в логах есть - а на деле его нет. То есть скрипт отрабатывает, в логах пишет, что grep находит устройство как смонтированное, ls отображает список внутренностей накопителя. Захожу в каталог /phone - он пуст, при этом никакой umount не срабатывал.

    Я всё запечатлел на видео, как это выглядит. (https://youtu.be/85VFaSBHWBU)

    В какую сторону копать? В чём может быть проблема?
  • alexanderzhirovalexanderzhirov 26.01.2023
    Выявил такой момент. Если выключить systemd-udevd как сервис и запустить его отдельно в качестве демона, то монтирование срабатывает. Но если сервис работает как часть systemd - то монтирование не работает. Бред.