如何以 root 身份卸载 gphoto2 设备

How to unmount gphoto2 device as root

作为普通用户,我可以通过 gio mount

看到我安装的摄像头
user@localhost $ gio mount -l
Volume(0): NIKON DSC D3200
  Type: GProxyVolume (GProxyVolumeMonitorGPhoto2)
  Mount(0): NIKON DSC D3200 -> gphoto2://%5Busb%3A002,007%5D/
    Type: GProxyShadowMount (GProxyVolumeMonitorGPhoto2)
Mount(1): NIKON DSC D3200 -> gphoto2://%5Busb%3A002,007%5D/
  Type: GDaemonMount

但是切换到root,它就变得不可见了

root@localhost $ gio mount -l
Volume(0): Filesystem root
  Type: GUnixVolume
  Mount(0): Filesystem root -> file:///
    Type: GUnixMount

所以运行脚本作为root,我不能用下面的命令卸载相机,

gio mount -s gphoto2

这是因为当 运行以 root 身份运行时,GIO 使用不同的后端来枚举挂载,因为提供(例如)gphoto2 支持的 GVFS 守护进程在用户会话中(在D-Bus 会话总线)而不是系统范围的。所以 root 无法与他们交谈。

运行 你的脚本是非 root 用户,否则你将不得不做一些管道来让你的脚本显式访问你的 D-Bus 会话总线(但只有当你的用户会话处于活动状态)。

你不需要 root 权限来列出或卸载 GIO 挂载:它的权限由 polkit 控制,如果默认情况下不允许,你应该得到一个授权提示。