从 python 脚本访问 mtp/ptp 设备,权限被拒绝

从 python 脚本访问 mtp/ptp 设备,权限被拒绝

我的 Android 手机已连接到我的 Ubuntu 20.10 机器。我尝试使用 在 DCIM/Camera 目录中的所有文件上设置“上次修改”时间戳os.utime。我收到了 python 错误OSError: [Errno 95] Operation not supported,这基本上是权限被拒绝。

  • 该 python 脚本已经过测试,在其他目录上绝对有效。路径绝对正确。
  • 手机连接正常,我可以从任何其他程序访问我的文件。
  • 我是该文件的所有者。
  • 权限为 rw--。尝试对其进行 chmod 会导致权限被拒绝。
  • sudo python 脚本没有帮助。
  • 在其他地方准备文件并将其复制过来并没有起到作用,因为复制操作似乎修改了 mtime。

我该怎么办?为什么这个 mtp 支架的表现与其他支架不同?

答案1

事实证明这是理想的行为:MTP 和 PTP 实现旨在将单一文件系统处理能力保留在连接设备手中,连接设备和计算机处于服务器-客户端层次结构中,连接设备是服务器。虽然协议定义不容易获得,但似乎存在以下形式的握手

收到:

  • 物理连接设备
  • 打开存储内存
  • 设备执行目录遍历并向计算机提供树和文件列表
  • 计算机发送文件下载请求
  • 设备发送所请求文件的副本
  • 转发文件列表并在等待响应时关闭连接。

发送:

  • 已发送文件传输请求
  • Android 设备接受它
  • 设备在缓冲区中接收文件并主动将其集成到所需位置的自己的 fs 树中。

这使得直接访问文件属性(如 exif 元数据和 cdate/mdate 属性)变得不可能,正如您直观地期望从类似 ftp 的连接或真正的 usb 大容量存储中访问一样,这也解释了无法更改远程设备上的 fs 权限的原因。

总结这是一项功能,不是错误。不会修复。

相关内容