我的 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 权限的原因。
总结这是一项功能,不是错误。不会修复。