MTP en Nexus 7, una pesadilla

Montando el Nexus 7 y copiando archivos mediante MTP

Si últimamente te has comprado un dispositivo con Jelly Bean, como por ejemplo el Nexus 7, y eres usuario de Linux, te habrás llevado la desagradable sorpresa de que al conectarlo por usb a tu equipo para transferir archivos, este no lo reconoce. Y esto es porque ahora Android necesita que el sistema operativo implemente el protocolo mtp:

Media Transfer Protocol (MTP) es un conjunto de extensiones a PTP (Picture Transfer Protocol) creado por Microsoft, para permitir al protocolo su uso con otros dispositivos además de cámaras digitales, como por ejemplo reproductores de audio digitales, y otros dispositivos digitales portátiles.

Para mi esto es un paso atrás, porque muchos sistemas aún no entienden este protocolo y lo peor de todo, que conseguir que funcione es una auténtica pesadilla. Qué ganas al utilizar MTP? Pues no lo tengo muy claro pero parece que se puede acceder a la memoria del terminal a la vez que el terminal está haciendo uso de la memoria. Me imagino que en un futuro próximo sera un estandard. Yo prefiero pinchar y ver una unidad más como he hecho hasta ahora.

Después de perder horas leyendo tutoriales, instalando e incluso compilando he conseguido que me funcione. Así es que voy a enumerar los pasos que he seguido aquí:

  1. sudo apt-get install libmtp-dev golang fuse-utils
  2. sudo chmod a+r /etc/fuse.conf
  3. sudo nano /etc/fuse.conf
  4. Descomentamos la línea user_allow_other
  5. Nos descargamos go-mtpfs de http://hanwen.home.xs4all.nl/public/software/go-mtpfs/ ,x86_64 para 64 bits y x86 para 32.
  6.  Y la copiamos en /usr/local/sbin/go-mtpfs quitándole la extensión, solo tiene que quedar go-mtpfs.
  7. Le damos permisos de ejecucion para todos sudo chmod a+x /usr/local/sbin/go-mtpfs
  8. Ahora creamos un punto de montaje: sudo mkdir /media/Nexus7
  9. Y le damos permisos: sudo chmod 777 /media/Nexus7
  10. Para automatizar el reconocimiento del dispositivo al enchufarlo tenemos que crear unas reglas en udev:
  11. sudo nano /etc/udev/rules.d/99-android.rules
  12. Copiamos estas reglas

# Google Nexus 7 16 Gb Bootloader & recovery mode
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e40″, MODE=”0666″ # Bootloader
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”d001″, MODE=”0666″ # Recovery

# Google Nexus 7 16 Gb PTP mode (camera)
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e43″, MODE=”0666″ # PTP media
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e44″, MODE=”0666″ # PTP media with USB debug on

# Google Nexus 7 16 Gb MTP mode (multimedia device)
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e41″, MODE=”0666″ # MTP media
SUBSYSTEM==”usb”, ATTR{idVendor}==”18d1″, ATTR{idProduct}==”4e42″, MODE=”0666″ # MTP media with USB debug on

# Google Nexus 7 MTP mode : automatic mount when plugged (all android versions)
ENV{ID_MODEL}==”Nexus”, ENV{ID_MODEL_ID}==”4e41″, ACTION==”add”, RUN+=”/usr/bin/sudo -u tu_usuario /usr/local/sbin/go-mtpfs /media/Nexus7″
ENV{ID_MODEL}==”Nexus”, ENV{ID_MODEL_ID}==”4e42″, ACTION==”add”, RUN+=”/usr/bin/sudo -u tu_usuario /usr/local/sbin/go-mtpfs /media/Nexus7″
ENV{ID_MODEL}==”Nexus_7″, ENV{ID_MODEL_ID}==”4e41″, ACTION==”add”, RUN+=”/usr/bin/sudo -u tu_usuario /usr/local/sbin/go-mtpfs /media/Nexus7″
ENV{ID_MODEL}==”Nexus_7″, ENV{ID_MODEL_ID}==”4e42″, ACTION==”add”, RUN+=”/usr/bin/sudo -u tu_usuario /usr/local/sbin/go-mtpfs /media/Nexus7″

# Google Nexus 7 MTP mode : automatic unmount when unplugged (all android versions)
ENV{ID_MODEL}==”Nexus”, ENV{ID_MODEL_ID}==”4e41″, ACTION==”remove”, RUN+=”/bin/umount /media/Nexus7″
ENV{ID_MODEL}==”Nexus”, ENV{ID_MODEL_ID}==”4e42″, ACTION==”remove”, RUN+=”/bin/umount /media/Nexus7″
ENV{ID_MODEL}==”Nexus_7″, ENV{ID_MODEL_ID}==”4e41″, ACTION==”remove”, RUN+=”/bin/umount /media/Nexus7″
ENV{ID_MODEL}==”Nexus_7″, ENV{ID_MODEL_ID}==”4e42″, ACTION==”remove”, RUN+=”/bin/umount /media/Nexus7″

Donde pone tu_usuario pon el usuario con el que inicias sesion en linux. En otros sitios por ahí podrás encontrar alguna regla diferente en udev, o sólamente una línea, pero a mi esto es lo que me ha funcionado. Hay comandos para averiguar los identificadores del dispositivo pero no hace falta complicarse. También la gente pasa más parámetros. Con estas lineas udev detecta el modo en que has conectado el dispositivo.

  1. Reiniciamos udev para que se relea la configuración: sudo service udev restart
  2. Para que el sistema lo detecte y monte automáticamente, también tenemos que editar /etc/fstab:

DeviceFs(Nexus\0407) /media/Nexus7 fuse.DeviceFs(Nexus\0407) allow_other,rw,user,noauto 0 0

Con esto ya deberíamos ver la unidad montada cuando enchufemos el Nexus 7 por usb.
Puede ser que me haya dejado el instalar alguna librería o programa más, pero como ya he instalado tantas aplicaciones siguiendo anteriores tutoriales no estoy seguro. Podeís dejarme vuestras dudas en los comentarios.

Un Comentario Trackback URL | Comments RSS

  1. Luisi Says:

    THanks, me funcionaron tus instrucciones

One Trackback

  1. 18 noviembre, 2012 : Bitacoras.com

Switch to our mobile site