web-dev-qa-db-ja.com

Fuseグループのすべてのユーザーにマウント解除を許可する

私は現在、MTP AndroidデバイスをArchLinuxラップトップに自動マウント/アンマウントできるようにするsystemd/udev構成ファイルをいくつか書き込もうとしています。少し時間がかかりましたが、これまでのところそれはかなりうまく機能します。

ここで、Fuse権限を持つすべてのユーザーがデバイスをアンマウントできるようにしたいと思います。これまでのところ、go-mtpfsが開始されたのと同じユーザーに対してのみ可能です。

MTPは、デバイスのプラグを抜くだけで問題が発生しないように設計されていることはよく知っていますが、Nautilusで[取り出し]をクリックするとエラーメッセージがポップアップ表示されるのは予想外で、あまり良いことではありません。

私は以下を試しましたが失敗しました:

  • 自分をFuseグループに追加し、go-mtpfsrootとして開始し、自分としてアンマウントしてみます
  • go-mtpfsFuseユーザーおよびグループとして開始し、同じくFuseグループ内で自分自身としてアンマウントしてみます

何か案が?また、Fuseグループに依存せずに同じことを達成するためのエレガントな方法がある場合は、ぜひお知らせください。

systemdサービス(/ 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

devルール(/ 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"
3
F.X.

Fuseグループは、Fuseファイルシステムをマウントできるユーザーを示すことを目的としています。そのグループの誰もが他の人によってマウントされたファイルシステムをアンマウントできるということではありません。ファイルシステムをアンマウントできるのは、マウントを実行しているユーザー、つまりrootだけです。

Sudo を使用して、Fuseグループのユーザーに、マウントを実行したのと同じユーザーとしてアンマウントコマンドを実行することを許可できます。 visudoを実行して、次のような行を追加します。

%Fuse ALL = (Fuse) fusermount -u /media/Android

自分でマウントしてみませんか?これがFuseを使用する通常の方法です。