Media Transfer Protocol

Related articles
Android#Transferring files
USB storage devices
The
Media Transfer Protocol
(MTP) can be used to transfer media files to and from many mobile phones (all Windows Phone 7/8/10 devices, most newer
Android
devices) and media players (e.g. Creative Zen).
Connecting
To connect your computer to a device via MTP:
the device needs to be connected to your computer via USB
MTP needs to be enabled on the device
the device's screen needs to be unlocked (for security reasons)
FUSE filesystems
The following programs let you access MTP devices via a
FUSE
filesystem.
Note
MTP is messy and its implementation varies between devices. Try the below clients and see which one works best with your device.
Tip
It is recommended to reboot your computer after installing MTP related packages.
For the FUSE-based file systems, you might need to create the mount-point directory first. The directory
~/mnt
is used in the examples below.
FUSE mounts can generally be unmounted using
fusermount -u
mountpoint
.
Android File Transfer
Android File Transfer
— MTP client with CLI, Qt UI, and FUSE wrapper which uses a custom MTP implementation
https://whoozle.github.io/android-file-transfer-linux/
||
android-file-transfer
Mount your device on
~/mnt
:
$ aft-mtp-mount ~/mnt
If you want album art to be displayed, it must be named
albumart.xxx
and placed first in the destination folder. Then copy other files. Also, note that fuse could be 7-8 times slower than ui/cli file transfer.
If you want to interact with it via the command line interface, run the command:
$ aft-mtp-cli
Type
help
in order to list all the commands available,
exit
to quit.
If you want to interact with it via the graphical user interface, start the
android-file-transfer
application, choose a destination folder and click any button on the toolbar. Available options are:
Upload Album
,
Upload Directory
and
Upload Files
. The latter two are self-explanatory.
Upload album
searches the source directory for album covers, and sets the best available cover.
MTPfs
MTPfs
— based on
libmtp
, it is a FUSE filesystem that supports reading and writing from any MTP device
https://www.adebenham.com/mtpfs/
||
mtpfs
Note
The following is likely to not work and you might have to resort to
libgphoto2
or a file manager with gvfs support like
PCManFM
.
First edit your
/etc/fuse.conf
and uncomment the following line:
user_allow_other
Mount your device on
~/mnt
:
$ mtpfs -o allow_other ~/mnt
jmtpfs
jmtpfs
— based on
libmtp
for accessing MTP (Media Transfer Protocol) devices
https://github.com/JasonFerrara/jmtpfs
||
jmtpfs
AUR
Mount device on
~/mnt
:
$ jmtpfs ~/mnt
Make this cohere to the rest of Linux (use regular mount/umount commands) by doing two steps
$# ln -s <actual mount command's path/name>  <a name consistent with Linux's mount convention>
$  ln -s /sbin/jmtpfs                        /sbin/mount.jmtpfs
add this line to
/etc/fstab
;
#jmtpfs <mount path>        fuse nodev,allow_other,<other options>                             0    0
  jmtpfs /home/sam/run/motog fuse nodev,allow_other,rw,user,noauto,noatime,uid=1000,gid=1000    0    0
Now mount the device and see if the options "took"
$ mount /home/sam/run/motog
 Device 0 (VID=22b8 and PID=2e82) is a Motorola Moto G (ID2).
 Android device detected, assigning default bug flags
 $ mount 
  ...
  jmtpfs on /home/sam/run/motog type fuse.jmtpfs (rw,nosuid,nodev,noexec,noatime,user_id=1000,group_id=1000,allow_other,user=sam)
SIMPLE-MTPFS
SIMPLE-MTPFS
— based on
libmtp
Simple Media Transfer Protocol FileSystem is a file system capable of operating on files on MTP devices attached via USB to local machine
https://github.com/phatina/simple-mtpfs/
||
simple-mtpfs
AUR
Run
simple-mtpfs -l
to list detected devices.
To mount the first device in the list to
~/mnt
, run
simple-mtpfs --device 1 ~/mnt
.
go-mtpfs
go-mtpfs
— FUSE filesystem with custom MTP implementation, written in Go
https://github.com/hanwen/go-mtpfs
||
go-mtpfs-git
AUR
Install
android-udev
, which will allow you to edit
/etc/udev/rules.d/51-android.rules
and apply to your
idVendor
and
idProduct
, which you can see after running
mtp-detect
. To the end of the line, add your user
OWNER="
user
"
.
Mount device on
~/mnt
:
$ go-mtpfs ~/mnt
Note
When using multiple devices you may want to use the
-d
flag to specify a device (id can be found by running
mtp-detect
)
Mounting with
go-mtpfs
might fail if an external SD Card is present. If you try to access your device while having an SD card and go-mtpfs complains, try removing the SD card and mounting again.
This package has not been maintained since 2020.
libmtp
libmtp
is a library MTP implementation, which also comes with some example command-line tools (which you can list using
pacman -Ql libmtp
).
Install
the
libmtp
package.
Run
mtp-detect
to detect your device.
If an error is returned, make sure your user is in the
adbusers
user group
.
libmtp
is meant to be used as a library, not by an end user. Other then the
mtp-detect
command, the other commands-line tools are likely to be unnecessarily error prone for daily work. The upstream author refers to them as examples. As of Jan2025, see
lines 115-138 of the README file
. For a more concrete example see the old, but demonstrating, suggestion for
Copying file from MTP device using libmtp (over USB)
. It is recommended to use a front end.
Frontends
gMTP
— A graphical frontend for libmtp. It lets you connect to Android devices and manage files using a desktop agnostic GUI.
https://gmtp.sourceforge.io/
||
gmtp
Media players
You can also use your MTP device in music players such as
Amarok
. To achieve this, you might have to edit
/etc/udev/rules.d/51-android.rules
(the MTP device used in the following example is a Galaxy Nexus). 
Run:
$ lsusb
Search for your device. It should be something like that:
Bus 003 Device 011: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-P7500 [Galaxy Tab 10.1]
And entry to
/etc/udev/rules.d/51-android.rules
will be this:
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666", OWNER="[username]"
Also reload udev rules:
# udevadm control --reload
File manager integration
To view the contents of your Android device's storage via MTP in your file manager, install the corresponding plugin:
For file managers that use
GVFS
(GNOME Files), install
gvfs-mtp
for MTP or
gvfs-gphoto2
for PTP support.
For file managers that use KIO (KDE's Dolphin), MTP support is included in
kio-extras
(dependency of dolphin).
After installing the required package, the device should show up in the file manager automatically and be accessible via an URL, for example
mtp://[usb:002,013]/
.
gvfs-mtp
This article or section is a candidate for merging with
udev
.
Notes:
please use the second argument of the template to provide more detailed indications.
(Discuss in
Talk:Media Transfer Protocol
)
The
gvfs-mtp
is available in the official repositories.
With
lsusb
you can get information about your device where Bus and Device numbers can be used with
gvfs-mtp
and device ID for creating of a
udev
rule.
Bus
002
Device
018
: ID
04b7
:
88a9
Compal Electronics, Inc.
To see detected device with enabled MTP
Use
gio mount
:
gio mount -li | grep -e ^Volume -e activation_root
Volume(0): MT65xx Android Phone
  activation_root=mtp://[usb:
002
,
018
]/
Use
lsusb
:
lsusb -v 2> /dev/null | grep -e Bus -e iInterface -e bInterfaceProtocol
...
Bus 002 Device 018: ID 04b7:88a9 Compal Electronics, Inc. 
      bInterfaceProtocol      0 
      iInterface              5 MTP
...
To mount all available connected MTP devices use inline script
gio mount -li | awk -F= '{if(index($2,"mtp") == 1)system("gio mount "$2)}'
To mount or unmount from a command with gvfs-mtp use Bus and Device numbers, e.g. to mount
gio mount mtp://[usb:001,007]/
and to unmount
gio mount -u mtp://[usb:001,007]/
. The mounted device will be available in a directory that begins with
mtp:host=
and is located under
/run/user/$UID/gvfs/
.
To disable automount of MTP devices with gvfs you will need to change value
true
to
false
for variable
AutoMount
that is located in
/usr/share/gvfs/mounts/mtp.mount
.
Note
The file managers can have own options for automount. On start they are checking for all available mountable devices.
If your device is not showing up in the file manager then
#libmtp
is missing a native support and is not currently available in the list of the
supported devices
. If you will try to mount by using command line you may also get an error
Device 0 (VID=
XXXX
and PID=
XXXX
) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team
The workaround to make it shown in the file manager is to write a
udev
rule for the device but it is no guaranty that you will be able to mount it by using MTP connection.
Use ID number that is represented by the pattern
vendorId
:
productID
, e.g.
04b7
:
88a9
, and make a udev rule by creating a configuration file
/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="04b7", ATTR{idProduct}=="88a9", MODE="0660", GROUP="uucp", ENV{ID_MTP_DEVICE}="1", SYMLINK+="libmtp"
Reload the udev rules.
# udevadm control --reload
The file managers with support for
gvfs
will be able to show MTP devices and mount them if supported by
#libmtp
but if has no support and cannot be opened then change settings in the phone to PTP and install
gvfs-gphoto2
for having access at least to the photos, command line mounting of PTP is a little similar to mounting of the MTP devices:
gio mount gphoto2://[usb:002,019]/
.
Note
If you getting limited access to the device and cannot use standard commands from command line such as e.g.
cp
,
ls
then look for
gvfs
own alternatives,
ls -1 /usr/bin/gvfs-*
.
Troubleshooting
libmtp (gvfs-mtp): filemanager (nautilus, pcmanfm, vifm and etc) hangs on accessing DCIM/Camera of Android device
Symptoms: everything works fine till moment of entering DCIM/Camera directory. In this case filemanager freezes and even in command line you cannot run even
ls
on that directory.
Possible and very probable reason is the bug of libmtp.
It seems that it is caused by file with name like
20180915_180351(0).jpg
. Samsung phones for example like to create files with such names.
There are several tickets (
one
,
two
and etc) and questions (
one
,
two
) about it.
So possible workaround is to use different mtp option from
#FUSE filesystems
like go-mtpfs for such directories or somehow change file naming policy of your phone camera (or switch to another camera app like
Open Camera
for example).
jmtpfs: Input/output error upon first access
Symptoms: jmtpfs successfully mounts, but as soon as one attempts to access files on the device (e.g. via
ls
), an error is reported:
cannot access <mount-point>: Input/output error
This appears to be a security feature: MTP does not work when the phone is locked by the lockscreen.  Unlock the phone and it should work again as long as the cord remains connected.
kio-mtp: cannot use "Open with File Manager" action
If you are not able to use the action "Open with File Manager", you may work around this problem by editing the file
/usr/share/solid/actions/solid_mtp.desktop
.
Change the line
Exec=kioclient exec mtp:udi=%i/
to
Exec=dolphin "mtp:/"
.
kio-mtp being called simultaneously by different services
Parallel usage of mtpfs and kio-mtp, as well as conflicting services using kio-mtp -music players included- should be avoided, as mentioned in
this forum
.
Amarok's plugin for MTP services, for example, might be preventing Dolphin (plasma) to access different phone model's files. Switching it off was a solution for at least one user.