Udev
允許熔斷器組中的任何使用者解除安裝
我目前正在嘗試編寫幾個 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"
該
fuse
組旨在指示誰可以掛載 FUSE 文件系統。目的不是該組中的任何人都可以解除安裝其他人安裝的文件系統。只有進行掛載的使用者或 root 才能解除安裝文件系統。您可以使用sudo授權
fuse
組中的使用者以執行掛載的同一使用者身份執行解除安裝命令。執行visudo
以添加如下行:%fuse ALL = (fuse) fusermount -u /media/Android
你為什麼不自己做安裝?這是使用 FUSE 的常用方法。