| OLD | NEW | 
|     1 Building and Installing |     1 Building and Installing | 
|     2 ----------------------- |     2 ----------------------- | 
|     3  |     3  | 
|     4 See the "INSTALL" file. |     4 See the "INSTALL" file. | 
|     5  |     5  | 
|     6  |     6  | 
|     7 Initiator and Responder |     7 Initiator and Responder | 
|     8 ----------------------- |     8 ----------------------- | 
|     9  |     9  | 
|    10 libmtp implements an MTP initiator, which means it initiate |    10 libmtp implements an MTP initiator, which means it initiate | 
|    11 MTP sessions with devices. The devices responding are known |    11 MTP sessions with devices. The devices responding are known | 
|    12 as MTP responders. libmtp runs on something with a USB host |    12 as MTP responders. libmtp runs on something with a USB host | 
|    13 controller interface, using libusb to access the host |    13 controller interface, using libusb to access the host | 
|    14 controller. |    14 controller. | 
|    15  |    15  | 
|    16 If you're more interested in the MTP responders, gadgets like |    16 If you're more interested in the MTP responders, gadgets like | 
|    17 MP3 players, mobile phones etc, look into: |    17 MP3 players, mobile phones etc, look into MeeGo:s Buteo Sync: | 
|    18 - MeeGo:s Buteo Sync: |    18 http://wiki.meego.com/Buteo - these guys are creating a fully | 
|    19   https://github.com/nemomobile/buteo-mtp |    19 open source MTP responder. | 
|    20   https://wiki.merproject.org/wiki/Buteo/MTP |    20  | 
|    21 - Android has an MTP responder implementation: |  | 
|    22   https://android.googlesource.com/platform/frameworks/base/+/master/media/jni/ |  | 
|    23 - Ubuntu/Ricardo Salveti has mtp-server and libmtp-server going: |  | 
|    24   https://code.launchpad.net/~phablet-team/mtp/trunk |  | 
|    25   http://bazaar.launchpad.net/~phablet-team/mtp/trunk/files |  | 
|    26  |    21  | 
|    27 Heritage |    22 Heritage | 
|    28 -------- |    23 -------- | 
|    29  |    24  | 
|    30 libmtp is based on several ancestors: |    25 libmtp is based on several ancestors: | 
|    31  |    26  | 
|    32 * libptp2 by Mariusz Woloszyn was the starting point used |    27 * libptp2 by Mariusz Woloszyn was the starting point used | 
|    33   by Richard A. Low for the initial starter port. You can |    28   by Richard A. Low for the initial starter port. You can | 
|    34   find it at http://libptp.sourceforge.net/ |    29   find it at http://libptp.sourceforge.net/ | 
|    35  |    30  | 
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   136 please volunteer. |   131 please volunteer. | 
|   137  |   132  | 
|   138  |   133  | 
|   139 FAQ: Common Problems |   134 FAQ: Common Problems | 
|   140 -------------------- |   135 -------------------- | 
|   141  |   136  | 
|   142 Some MTP devices have strange pecularities. We try to work around |   137 Some MTP devices have strange pecularities. We try to work around | 
|   143 these whenever we can, sometimes we cannot work around it or we |   138 these whenever we can, sometimes we cannot work around it or we | 
|   144 cannot test your solution. |   139 cannot test your solution. | 
|   145  |   140  | 
|   146 * Android locked screen: some devices just report zero files |  | 
|   147   and no storages when the device screen is locked, it looks like |  | 
|   148   so: |  | 
|   149  |  | 
|   150   mtp-detect |  | 
|   151   Device 0 (VID=04e8 and PID=6860) is a Samsung Galaxy models (MTP). |  | 
|   152   Attempting to connect device(s) |  | 
|   153   Error 1: Get Storage information failed. |  | 
|   154   Device: SHV-E210K |  | 
|   155   LIBMTP_Get_Storage(): No data available |  | 
|   156   OK. |  | 
|   157  |  | 
|   158   This is probably so as not to allow the MTP access to be used |  | 
|   159   as a "backdoor" into the device. Unlock the device before listing |  | 
|   160   files, set the autolock to some large value or disabled if it |  | 
|   161   disturbs you, you are causing this to yourself, or should we say |  | 
|   162   that your vendor is prioritizing security and privacy over |  | 
|   163   ease-of-use. (You may talk to your vendor about this.) |  | 
|   164  |  | 
|   165 * mtp-* tools doesn't work because someone else is already hogging |   141 * mtp-* tools doesn't work because someone else is already hogging | 
|   166   the device |   142   the device | 
|   167  |   143  | 
|   168   This is a common problem, the most common case could be that |   144   This is a common problem, the most common case could be that | 
|   169   gphoto2 (which can also talk PTP/MTP) is taking over the device |   145   gphoto2 (which can also talk PTP/MTP) is taking over the device | 
|   170   as soon as it's plugged in. Some distributions are configured that |   146   as soon as it's plugged in. Some distributions are configured that | 
|   171   way. Counter it like this: |   147   way. Counter it like this: | 
|   172  |   148  | 
|   173   gvfs-mount -s gphoto2 |   149   gvfs-mount -s gphoto2 | 
|   174  |   150  | 
|   175   Then re-attach the device. |   151   Then re-attach the device. | 
|   176  |   152  | 
|   177   Sometimes some gvfs daemons are running on the |   153   Sometimes the "gvfs-gphoto2-volume-monitor" is running on the | 
|   178   system and hogging the device, try stopping them |   154   system and hogging the device, try something like: | 
|   179   with something like these commands: |  | 
|   180  |   155  | 
|   181   killall gvfs-mtp-volume-monitor |   156   pkill gfvs-gphoto2-volume-monitor | 
|   182   killall gvfs-gphoto2-volume-monitor |  | 
|   183  |   157  | 
|   184   Then plug in the device and issue "mtp-detect" to figure out if |   158   Then plug in the device and issue "mtp-detect" to figure out if | 
|   185   this may be the case. |   159   this may be the case. | 
|   186  |   160  | 
|   187 * Generic MTP/PTP disconnect misbehaviour: we have noticed that |   161 * Generic MTP/PTP disconnect misbehaviour: we have noticed that | 
|   188   Windows Media Player apparently never close the session to an MTP |   162   Windows Media Player apparently never close the session to an MTP | 
|   189   device. There is a daemon in Windows that "hooks" the device |   163   device. There is a daemon in Windows that "hooks" the device | 
|   190   by opening a PTP session to any MTP device, whenever it is |   164   by opening a PTP session to any MTP device, whenever it is | 
|   191   plugged in. This daemon proxies any subsequent transactions |   165   plugged in. This daemon proxies any subsequent transactions | 
|   192   to/from the device and will never close the session, thus |   166   to/from the device and will never close the session, thus | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   224   such devices and you cannot expect to have command line tools |   198   such devices and you cannot expect to have command line tools | 
|   225   like the mtp examples work with them. You could implement new |   199   like the mtp examples work with them. You could implement new | 
|   226   example programs that just call to a mediating daemon like the |   200   example programs that just call to a mediating daemon like the | 
|   227   Windows MTP stack does. (And change all programs using libmtp |   201   Windows MTP stack does. (And change all programs using libmtp | 
|   228   directly today.) |   202   directly today.) | 
|   229  |   203  | 
|   230   If this bug in your device annoys you, contact your device |   204   If this bug in your device annoys you, contact your device | 
|   231   manufacturer and ask them to test their product with some libmtp |   205   manufacturer and ask them to test their product with some libmtp | 
|   232   program. |   206   program. | 
|   233  |   207  | 
 |   208 * Android locked screen: some devices just report zero files | 
 |   209   and no storages when the device is locked, probably so as not | 
 |   210   to allow the MTP access to be used as a "backdoor" into the | 
 |   211   device. Unlock the device before listing files, set the autolock | 
 |   212   to some large value or disabled if it disturbs you, you are | 
 |   213   causing this to yourself. | 
 |   214  | 
|   234 * Samsung Android 2.3.x devices: these have a special MTP stack |   215 * Samsung Android 2.3.x devices: these have a special MTP stack | 
|   235   with some specific bugs that we have maybe nailed down now. |   216   with some specific bugs that we have maybe nailed down now. | 
|   236   It suffers from an "immediate connect" syndrome, i.e. you have |   217   It suffers from an "immediate connect" syndrome, i.e. you have | 
|   237   to connect to the device within 7 seconds of plugging in, or it |   218   to connect to the device within 7 seconds of plugging in, or it | 
|   238   will go numb. This also goes for command-line activity with |   219   will go numb. This also goes for command-line activity with | 
|   239   the example programs, so this device is better used with a |   220   the example programs, so this device is better used with a | 
|   240   GUI tool like Rhythmbox, gnomad2... |   221   GUI tool like Rhythmbox, gnomad2... | 
|   241  |   222  | 
|   242 * Generic USB misbehaviour: some devices behave badly under MTP |   223 * Generic USB misbehaviour: some devices behave badly under MTP | 
|   243   and USB mass storage alike, even down to the lowest layers |   224   and USB mass storage alike, even down to the lowest layers | 
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   591  |   572  | 
|   592  1. Plug in the device. |   573  1. Plug in the device. | 
|   593  2. USB-mass storage folder will open automatically. |   574  2. USB-mass storage folder will open automatically. | 
|   594  3. Unmount the device. |   575  3. Unmount the device. | 
|   595  4. Run mtp-detect. It will most likely fail the first time. |   576  4. Run mtp-detect. It will most likely fail the first time. | 
|   596  5. Run mtp-detect again, it might work this time, or fail. Keep running |   577  5. Run mtp-detect again, it might work this time, or fail. Keep running | 
|   597     till it works. 99% it works by the third try. |   578     till it works. 99% it works by the third try. | 
|   598  6. Once mtp-detect gives you an "Ok", open either Rhythmbox or Gnomad2, |   579  6. Once mtp-detect gives you an "Ok", open either Rhythmbox or Gnomad2, | 
|   599     everything should work. |   580     everything should work. | 
|   600  |   581  | 
|   601 Linux: Try this, if you have a recent Linux kernel, |   582 Linux: Try this, if you have a recent 2.6.x Linux kernel, | 
|   602 add the file (as root): |   583 run (as root) something like: | 
|   603  |  | 
|   604 /etc/modprobe.d/no-usb-storage.conf |  | 
|   605  |  | 
|   606 With the contents: |  | 
|   607  |  | 
|   608 options usb-storage quirks=1234:4321:i |  | 
|   609  |  | 
|   610 This will tell usb-storage to ignore this device when it's inserted |  | 
|   611 so it is not hogged by the mass storage interfaces. Remove and re-insert |  | 
|   612 the device and see if it works. Usually this does the trick. |  | 
|   613  |  | 
|   614 For older systems, or as a bigger hammer, run (as root) something |  | 
|   615 like: |  | 
|   616  |   584  | 
|   617 > rmmod usb_storage ; mtp-detect |   585 > rmmod usb_storage ; mtp-detect | 
|   618  |   586  | 
|   619 You can run most any command or a client like gnomad2 or |   587 You can run most any command or a client like gnomad2 or | 
|   620 Amarok immediately after the rmmod command. This works |   588 Amarok immediately after the rmmod command. This works | 
|   621 sometimes. Another even more brutal approach is this: |   589 sometimes. Another way: | 
|   622  |   590  | 
|   623 * Edit /etc/modprobe.d/blacklist |   591 * Edit /etc/modprobe.d/blacklist | 
 |   592  | 
|   624 * Add the line "blacklist usb-storage" |   593 * Add the line "blacklist usb-storage" | 
 |   594  | 
|   625 * Reboot. |   595 * Reboot. | 
|   626  |   596  | 
|   627 Now none of you USB disks, flash memory sticks etc will be |   597 Now none of you USB disks, flash memory sticks etc will be | 
|   628 working (you just disabled them all). However you *can* try |   598 working (you just disabled them all). However you *can* try | 
|   629 your device, and it might have started working because there |   599 your device, and it might have started working because there | 
|   630 is no longer a USB mass storage driver that tries to hook onto |   600 is no longer a USB mass storage driver that tries to hook onto | 
|   631 the mass storage interface of your device. |   601 the mass storage interface of your device. | 
|   632  |   602  | 
|   633 If not even blacklisting works (check with |   603 If not even blacklisting works (check with | 
|   634 "lsmod | grep usb-storage"), there is some problem with |   604 "lsmod | grep usb-storage"), there is some problem with | 
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1021                                       NULL, 0); |   991                                       NULL, 0); | 
|  1022  |   992  | 
|  1023 SKETCH OF AN OVERVIEW |   993 SKETCH OF AN OVERVIEW | 
|  1024 --------------------- |   994 --------------------- | 
|  1025  |   995  | 
|  1026 Draft agenda for a talk on MTP devices submitted for the Android |   996 Draft agenda for a talk on MTP devices submitted for the Android | 
|  1027 builders summit, might come to recycle this: |   997 builders summit, might come to recycle this: | 
|  1028  |   998  | 
|  1029 - Protocol overview |   999 - Protocol overview | 
|  1030   - Transactional filesystem - no corruption due to unplugged cables! |  1000   - Transactional filesystem - no corruption due to unplugged cables! | 
|  1031   - The host and the device can access the files simultaneously, the |  | 
|  1032     device will always "own" the physical file system and proxy the |  | 
|  1033     host (MTP initiator). |  | 
|  1034 - libmtp interface |  1001 - libmtp interface | 
|  1035 - relation to libgphoto2 |  1002 - relation to libgphoto2 | 
|  1036 - User expectations fall short: |  1003 - User expectations fall short: | 
|  1037   - Not really a mountable filesystem. |  1004   - Not really a mountable filesystem. | 
|  1038   - Streaming does not work. (Size needs to be known beforehand due to |  1005   - Streaming does not work. (Size needs to be known beforehand due to | 
|  1039     transactional nature.) |  1006     transactional nature.) | 
|  1040   - GVFS MTP backend to the rescue. |  | 
|  1041 - Device sins |  1007 - Device sins | 
|  1042   - Using the same VID/PID for several modes, some of which are not MTP. |  | 
|  1043     HTC Zopo, HD2, Bird (0x0bb4/0x0c02). Thanks for that, now we cannot |  | 
|  1044     detect the protocol from just VID+PID but have to examine the interfaces. |  | 
|  1045   - Android bugs |  1008   - Android bugs | 
|  1046   - Samsungs special Android MTP stack |  1009   - Samsungs special Android MTP stack | 
|  1047   - SonyEricsson Aricent stack for Xperia Androids pre 4.0, broken headers! |  1010   - SonyEricsson Aricent stack for Xperia Androids pre 4.0, broken headers! | 
|  1048   - Flat access model vs hierarchical, how Android uses MTP as an hierachical |  1011   - Flat access model vs hierarchical, how Android uses MTP as an hierachical | 
|  1049     file system while it was previously a flat database. |  1012     file system while it was previously a flat database. | 
|  1050   - Old paradigm: scan the entire non-hierarchical storage for all content, |  | 
|  1051     build a cache to speed up the (USB 1.1!) link. Usually all files were |  | 
|  1052     stored in the root folder or a single folder named "/Music" or similar. |  | 
|  1053   - Android introduced deeply nested folder hierarchies, not seen before |  | 
|  1054     on MTP devices. |  | 
|  1055   - Microsoft not using the complete metadata dump feature of the MTP |  | 
|  1056     protocol (once introduced by creative) instead they walk directories |  | 
|  1057     separately. |  | 
|  1058   - So caching a big device will take long time and/or timeout. |  | 
|  1059   - Go-MTPFS (FUSE) and GVFS MTP - doing the partial directory walk rather |  | 
|  1060     than caching all files. |  | 
|  1061   - Especially Android devices nowadays assume that |  | 
|  1062     you want to index a folder at the time, whereas older MTP devices (such |  | 
|  1063     as those from Creative) would assume that you wanted to index the entire |  | 
|  1064     device as it was plugged in, and device firmware is now ever more tailored |  | 
|  1065     toward per-folder filetree walking. This makes it harder for the library |  | 
|  1066     to provide the right abstractions: do we provide an API for indexing the |  | 
|  1067     whole device which is unacceptably slow on new devices, or do we provide |  | 
|  1068     an API for indexing a directory at the time which will somehow work on |  | 
|  1069     older devices too? Shall we deprecate the older API? |  | 
|  1070 - Detecting from vendor extension, can fix in newer extensions! |  1013 - Detecting from vendor extension, can fix in newer extensions! | 
|  1071 - Autoprobing on Linux |  1014 - Autoprobing on Linux | 
|  1072   - Color devices do not like autoprobing |  1015   - Color devices do not like autoprobing | 
|  1073   - Devices need different PIDs for every alternative interface due to |  1016   - Devices need different PIDs for every alternative interface due to | 
|  1074     the Windows USB stack. |  1017     the Windows USB stack. | 
|  1075   - Multimode USB - one PID for each mode due to Windows limitations not |  1018   - Multimode USB - one PID for each mode due to Windows limitations not | 
|  1076     applicable to Linux, SONY devices have ~5 different PIDs for a single |  1019     applicable to Linux, SONY devices have ~5 different PIDs for a single | 
|  1077     device. |  1020     device. | 
|  1078   - Mode switch devices? Maybe we do this wrong. |  1021   - Mode switch devices? | 
|  1079 - MTPZ, came and went. Apparently deprecated by Microsoft with Windows |  1022 - MTPZ | 
|  1080   Phone 8. |  | 
|  1081 - Ideas?? |  1023 - Ideas?? | 
|  1082  |  1024  | 
| OLD | NEW |