我目前正在尝试编写几个 systemd/udev 配置文件,这些文件将允许我在我的 Arch Linux 笔记本电脑上自动挂载/卸载 MTP Android 设备。我花了一些时间,但到目前为止效果还不错。
现在,我希望任何具有fuse
权限的用户都能够卸载设备。到目前为止,只有与go-mtpfs
启动时相同的用户才可以执行此操作。
我很清楚 MTP 的设计目的是让您可以拔掉设备而不会产生任何后果,但是在 Nautilus 中单击“弹出”时弹出错误消息有点意外,而且不太好。
我尝试了以下操作,但失败了:
- 将我自己添加到
fuse
组中,go-mtpfs
以我自己的身份启动root
并尝试以我自己的身份卸载 go-mtpfs
以用户和组启动fuse
,并尝试以我自己的身份卸载,也在fuse
组中
任何想法?另外,如果您有一种优雅的方式来实现同样的事情,而不必依赖团队fuse
,我很想听听!
系统服务 (/etc/systemd/system/android-mtp.service):
[Service]
Type=forking
ExecStartPre=/bin/mkdir -p /media/Android
ExecStart=/usr/sbin/daemonize -l /var/lock/go-mtpfs.lock /usr/bin/go-mtpfs -allow-other=true /media/Android
ExecStop=/bin/umount /media/Android
ExecStopPost=/bin/rmdir /media/Android
udev规则 (/etc/udev/rules.d/99-android-mtp.rules):
# Google Nexus 7 16 Gb Bootloader & recovery mode
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0666" # Bootloader
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d001", MODE="0666" # Recovery
# Google Nexus 7 16 Gb PTP mode (camera)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e43", MODE="0666" # PTP media
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e44", MODE="0666" # PTP media with USB debug on
# Google Nexus 7 16 Gb MTP mode (multimedia device)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e41", MODE="0666" # MTP media
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0666" # MTP media with USB debug on
# Google Nexus 7 MTP mode : automatic unmount when unplugged (all android versions)
ENV{ID_MODEL}=="Nexus", ENV{ID_MODEL_ID}=="4e41", ACTION=="remove", RUN+="/usr/bin/systemctl stop android-mtp.service"
ENV{ID_MODEL}=="Nexus", ENV{ID_MODEL_ID}=="4e42", ACTION=="remove", RUN+="/usr/bin/systemctl stop android-mtp.service"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e41", ACTION=="remove", RUN+="/usr/bin/systemctl stop android-mtp.service"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e42", ACTION=="remove", RUN+="/usr/bin/systemctl stop android-mtp.service"
# Google Nexus 7 MTP mode : automatic mount when plugged (all android versions)
ENV{ID_MODEL}=="Nexus", ENV{ID_MODEL_ID}=="4e41", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="android-mtp.service"
ENV{ID_MODEL}=="Nexus", ENV{ID_MODEL_ID}=="4e42", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="android-mtp.service"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e41", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="android-mtp.service"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e42", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="android-mtp.service"
答案1
该fuse
组旨在指示谁可以挂载 FUSE 文件系统。其目的并不是让该组中的任何人都可以卸载其他人安装的文件系统。只有进行挂载的用户(即 root 用户)才能卸载文件系统。
您可以使用须藤授权fuse
组中的用户以执行安装的同一用户身份运行卸载命令。运行visudo
以添加一行,例如:
%fuse ALL = (fuse) fusermount -u /media/Android
你为什么不自己安装呢?这是使用 FUSE 的常用方法。