Contents

在Linux上安装MTP设备

1. 概述

媒体传输协议 (MTP) 是一种使我们能够在两个设备之间传输数据的协议。MTP 主要用于运行 Android 操作系统的设备。

在本文中,我们将讨论如何在 Linux 下挂载 MTP 设备。我们将介绍大多数主要 Linux 发行版附带的gvfs-mtp包。之后,我们将看一下jmtpfs ,它允许我们使用命令行挂载和卸载 MTP 设备。

2. GVfs

GNOME 虚拟文件系统 (GVfs) 是围绕GNOME 输入-输出 (GIO) 库 的用户空间虚拟文件系统包装器。GVfs 抽象了 GIO 库的内部工作,允许我们在没有任何特殊技术知识的情况下访问各种文件系统和服务。

2.1. gvfs-mtp

GVfs 带有多个用于文件系统和服务的后端 ,例如 Apple 移动设备 (AFC)、Google 在线帐户 (GOA) 和 SMB。这些模块之一是gvfs-mtp

** gvfs-mtp模块设计为仅与 MTP 设备一起使用。它允许我们通过 FUSE 文件系统访问 MTP 设备。**

2.2. 安装

如果我们在 GNOME 桌面环境中,很可能我们已经安装了gvfs-mtp。但是,如果不是这样,我们可以使用包管理器 从发行版的官方包存储库中安装它:

# Ubuntu-based
$ apt install gvfs-mtp
# Fedora and RHEL
$ dnf install gvfs-mtp
# Arch-based
$ pacman -S gvfs-mtp

2.3. 连接 MTP 设备

在我们使用 MTP 连接我们的设备之前:

  • 出于安全原因,我们的设备屏幕需要先解锁
  • 我们的设备应该允许安装所需的权限
  • 设备应通过 USB 数据线连接

完成后,我们将使用lsusb 检查我们的设备是否成功连接到我们的机器:

$ lsusb | grep -i smartphone
Bus 001 Device 006: ID 12d1:107e Huawei Technologies Co., Ltd. P10 smartphone

或者,我们也可以使用gio 来检测我们的设备

$ gio mount -li | grep activation_root
activation_root=mtp://HUAWEI_HUAWEI_VNS-L21_BUC4C16523021942/
  • mount是我们可以用来挂载设备的子命令
  • -l列出所有可挂载的设备
  • -i打印出每个可挂载设备的详细报告

如果您没有看到您的设备,请参阅系统日志 以解决任何问题。

2.4. 使用 CLI 挂载 MTP 设备

安装gvfs-mtp软件包后,我们现在可以使用gio实用程序或图形文件管理器(例如GNOME Files )挂载 MTP 设备。

我们可以使用gio命令的activation_root字段中的路径安装我们的设备:

$ gio mount "mtp://HUAWEI_HUAWEI_VNS-L21_BUC4C16523021942/"

现在,我们可以使用*/run/user/$UUID/gvfs*中以 mtp:host=directory 开头的目录来访问我们挂载的设备

$ ls -l /run/user/1000/gvfs
2 dr-x------ 1 hey hey 0 Jan  1  1970 'mtp:host=HUAWEI_HUAWEI_VNS-L21_BUC4C16523021942'

或者,我们也可以使用lsusb输出中的总线和设备编号挂载我们的设备:

$ gio mount "mtp://[usb:001,006]/"

2.5. 卸载 MTP 设备

我们可以使用mount子命令的*-u–unmount*标志卸载设备:

$ gio mount -u "mtp://HUAWEI_HUAWEI_VNS-L21_BUC4C16523021942/"

2.6. 在文件管理器中挂载 MTP 设备

支持 GVfs 的文件管理器将尝试自动挂载 MTP 设备——取决于发行版的配置方式。

但是,我们可以通过单击轻松安装 MTP 设备,如下图所示:

/uploads/mounting_mtp_devices/1.png

同样,我们可以使用设备标签右侧显示的弹出按钮卸载设备。

3. jmtpfs

jmtpfs是一个基于libmtp的轻量级实用程序,我们使用它来读取和写入数据到 MTP 设备。

3.1. 安装

默认情况下,Linux 发行版不附带jmtps,并且它在大多数软件包存储库中不可用。因此,我们需要从源头构建它。

在我们安装jmtpfs之前,我们应该使用包管理器从官方包存储库安装libmtp依赖项。

现在,让我们克隆 jmtpfs存储库:

$ git clone https://github.com/JasonFerrara/jmtpfs

现在,让我们配置和编译jmtpfs

$ ./configure
$ make
$ make install

成功后,让我们验证一下:

$ jmtpfs
jmtpfs version: 0.5

3.2. 安装

**默认情况下,MTP 设备只能由 root 用户读写。**因此,我们应该首先允许其他用户对 MTP 设备进行读写。

因此,取消注释*/etc/fuse.conf文件中的user_allow_other*选项:

$ sed -i '/user_allow_other/s/^#//g' /etc/fuse.conf

现在,我们要将 MTP 设备挂载到具有读写权限的目录上:

$ jmtpfs ~/mtp

3.3. 卸载

同样,我们可以使用fusermount 卸载我们的设备:

$ fusermount -u ~/mtp

3.4. 与 Linux 其他部分的一致性

此外,我们可以使这个挂载过程与 Linux 的其余部分保持一致——允许我们使用常规的mountunmount 命令。

首先,我们将创建jmtpfs的软符号链接。该链接的名称将与 Linux 挂载约定一致,例如mount.jmtpfs

$ ln -s /usr/local/bin/jmtpfs /usr/local/bin/mount.jmtpfs

然后,我们将在fstab 文件中为我们的 MTP 设备添加一个条目:

jmtpfs /home/user/mtp fuse nodev,allow_other,rw,user,noauto,noatime,uid=1000,gid=1000    0    0

现在,我们已准备好使用mount挂载我们的设备:

$ mount /home/user/mtp

同样,我们现在可以使用umount卸载我们的设备:

$ umount /home/user/mtp