Como os dispositivos habilitados para MTP funcionam com o Ubuntu?


69

Desde o Ubuntu 13.04 , o acesso ao armazenamento de dispositivos externos via MTP deve funcionar imediatamente através de um módulo GVFS-MTP.

Embora essa pergunta seja sobre o Galaxy Nexus, também são suportados outros dispositivos Android, players de mídia habilitados para Windows Phones e MTP .

Para solução de problemas, consulte esta resposta .


Estou tendo alguns problemas para que as transferências de arquivos funcionem no MTP com o Galaxy Nexus. Estou usando o Kubuntu 11.10 de 64 bits, e foi isso que fiz e os resultados que obtive:

  1. Adicionada regra para o dispositivo em /etc/udev/rules.d/51-android.rules. A regra é a seguinte e funciona para adb:

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
    
  2. Reiniciado udev(e o computador apenas para garantir).

O Adb funciona e todos os métodos de leitura do dispositivo via MTP parecem funcionar (tentei montar com mtpfs, gmtp e usar o pacote mtp-tools diretamente). No entanto, quando tento escrever no dispositivo, nada do que tentei funciona.

Como exemplo, a execução mtp-newfolder test_dir 0 0fornece a seguinte saída:

libmtp version: 1.1.0
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
Folder creation failed.
ERROR: Could not close session!

Se eu correr mtp-foldersatrás de uma mtp-newfolder com falha sem reconectar o dispositivo, obtenho a seguinte saída:

Attempting to connect device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
PTP_ERROR_IO: failed to open session, trying again after resetting USB interface
LIBMTP libusb: Attempt to reset device
mtp-folders: Successfully connected
Friendly name: (NULL)
Error 1: Get Storage information failed.
Error 2: PTP Layer error 02fe: get_all_metadata_fast(): could not get proplist of all    objects.
Error 2: (Look this up in ptp.h for an explanation.)
Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles.
Error 2: (Look this up in ptp.h for an explanation.)
LIBMTP_Get_Storage()
: Resource temporarily unavailable
OK.

Acompanhado pelo seguinte em dmesg:

[ 1000.912082] usb 2-4: reset high speed USB device number 7 using ehci_hcd
[ 1001.045877] usb 2-4: usbfs: process 3166 (mtp-folders) did not claim interface 0 before use

Alguém tem alguma idéia sobre o que fazer?

EDITAR:

Eu também tentei o modo PTP. Mais uma vez, a leitura funciona bem, mas não consigo escrever nada no dispositivo.


Eu não acho que é Samsung .... e acho que é Android. Meu dispositivo alimentado por favo de mel é exatamente da mesma maneira que você precisa usar apenas o MTP. Eu acho que é assim que todos os dispositivos Android pós-2.3 serão.

Respostas:


37

Desde o Ubuntu 13.04, o acesso ao armazenamento de dispositivos externos via MTP funciona imediatamente, por meio de um módulo GVFS-MTP.

Pergunta relacionada: Existem planos para melhorar o suporte a mtp em versões futuras do Ubuntu?

Para solução de problemas, consulte esta resposta .


Para mim, era um problema não ter os libmtparquivos mais recentes no meu sistema. Então resolvi o problema e fiz esse artigo para ajudar outras pessoas .

Resumo do link: Houve um bug no libmtppacote com versões mais antigas do Ubuntu. Este bug já foi corrigido na última fonte de libmtp.


11
O problema parece estar corrigido nos pacotes do Ubuntu 12.04, portanto, esses podem ser usados ​​se você for corajoso o suficiente para fazê-lo. Agarrei-los de launchpad.net/ubuntu/+source/libmtp/1.1.1-1 e criou os pacotes para o sistema (e o mesmo para gmtp)
Tatu Lahtela

@ Shannon. Obrigado. essa é a melhor solução. Gostaria de ter encontrado primeiro.
MountainX

2
O rhythmbox ainda congela e gera erros (LIBMTP_Send_Representative_Sample (): não foi possível obter informações do objeto.) ao tentar acessar o nexus, e o nautilus fornece: Não é possível montar o Galaxy Nexus; Erro ao inicializar a câmera: -60: não foi possível bloquear o dispositivo. Cocô.
Waspinator

Seria bom para atualizar as instruções para receber as últimas mtp, não 1.1.1
Kostiantyn Rybnikov

21

Você já tentou a sugestão de Bilal Akhtar no omgubuntu ?

Conectando seu telefone ou tablet Android ao Ubuntu com MTPFS

  1. Configuração

    Primeiro, instale as ferramentas necessárias com sudo apt-get install mtp-tools mtpfs

    Conecte seu Galaxy Nexus ao seu computador. No seu telefone, abra a gaveta de notificações e clique em "Tipo de conexão USB". Verifique se MTP está selecionado.

    imagem mostrando as configurações de conexão USB do Android

    Em seguida, execute estes comandos:

    mtp-detect | grep idVendor
    mtp-detect | grep idProduct
    

    Você deve obter uma saída como esta: insira a descrição da imagem aqui

    Agora, execute estes comandos:

    gksu gedit /etc/udev/rules.d/51-android.rules
    

    Uma janela do Gedit deve abrir. Digite este texto, tudo em uma única linha :

    SUBSYSTEM=="usb", ATTR{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"
    

    Substitua VENDORIDpelo que idVendorvocê anotou anteriormente. Da mesma forma, substitua PRODUCTIDpelo que idProductvocê anotou. No meu caso, eles eram 04e8e 685crespectivamente, mas poderiam ter sido diferentes para você.

    Salve e feche o arquivo. Em seguida, desconecte o telefone e execute estes comandos:

    sudo service udev restart
    sudo mkdir /media/GalaxyNexus
    sudo chmod a+rwx /media/GalaxyNexus
    sudo adduser $USER fuse
    

    $USERé uma variável de shell padrão e deve ser o usuário que você deseja adicionar (geralmente você mesmo). Agora, execute este comando:

    gksu gedit /etc/fuse.conf
    

    Na janela do Gedit, remova o #no início da última linha (a que começa com #user_allow_other) assim:

    insira a descrição da imagem aqui

    Você está quase pronto! Agora, reinicie o computador e execute estes três comandos:

    echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrc
    echo "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrc
    source ~/.bashrc
    
  2. Uso

    Conecte seu telefone, verifique se ele está usando MTP e execute android-connect.

    Voila! Agora você pode navegar pelo conteúdo do seu telefone Android usando o Nautilus. Basta iniciar o gerenciador de arquivos e, na barra lateral, clicar em GalaxyNexus para navegar pelo conteúdo do telefone, como faria com um pen drive. Você também pode adicionar, remover e modificar arquivos como um sistema de arquivos normal.

    captura de tela do nautilus exibindo o conteúdo do telefone

    Para remover o telefone com segurança, basta executar android-disconnect.

  3. Conclusão

    A partir de agora, você só precisa correr android-connectpara montar o telefone e android-disconnectremovê-lo com segurança. Todo o resto deve ser tratado automaticamente. Tentei várias maneiras de fazer com que a montagem e a desmontagem acontecessem automaticamente na conexão por cabo, mas essa foi a melhor solução que eu consegui encontrar.

    Esses dois comandos não exigirão permissões de root para serem executados. Todos os usuários que são membros do grupo de usuários de fusíveis devem poder executar esses comandos sem acesso root.

    É isso aí! Você conectou com sucesso o seu telefone Ice Cream Sandwich ao seu computador Ubuntu. O processo pode demorar muito para um novato, mas tenho certeza de que alguém irá aparecer e criar uma GUI para tudo isso, para que tudo aconteça sem problemas. :)


Sim, já tentei a maioria das maneiras de usar o mtpfs-tools. Como Shannon descobriu, era aparentemente um bug no libmtp.
21711 Leo

Funciona, mas tenho algumas perguntas. 1. O que essa configuração do udev faz, por que não funciona sem ela? 2. Com que mágica ele sabe qual dispositivo montar quando o faz mtpfs, ou simplesmente suporta apenas um dispositivo conectado por vez?
Bart van Heukelom 23/03

Além disso, ao copiar um arquivo grande (com Nautilus), ele parecerá copiar muito rápido (50MB / s), mas durante esse período não copiará nada. Somente quando a barra de progresso atinge 100%, a cópia real é iniciada (e a interface trava). Talvez algum tipo de opção de buffer possa ser desativado?
Bart van Heukelom 23/03

Infelizmente não sei as respostas que você deseja. Eu sinto Muito.
Des

Fiz tudo isso, mas recebi esta mensagem ao tentar conectar o android: fusermount: falha ao abrir o /etc/fuse.conf: permissão negada fusermount: opção allow_other somente permitida se 'user_allow_other' estiver definido em /etc/fuse.conf even embora eu editei o /etc/fuse.conf conforme as instruções.
Dmitry Shvedov

21

Conectando dispositivos via MTP com GVFS

Desde o Ubuntu 13.04, o acesso ao armazenamento de dispositivos compatíveis com MTP funciona imediatamente através de um back-end GVFS . Por favor, dê uma olhada. Existem planos para melhorar o suporte a mtp em versões futuras do Ubuntu? para instruções de instalação anteriores a 13.04.

Esta solução deve funcionar para todos os dispositivos Android que fornecem funcionalidade MTP e provavelmente todos os dispositivos não Android com funcionalidade MTP, como Windows Phones e Portable Media Players .

Não fique confuso

Houve alguma confusão, vamos tentar esclarecer as coisas:

  • Você não precisa fazer nada que possa anular sua garantia!

    • Você não precisa fazer root no seu dispositivo.
    • Você não precisa desbloquear o gerenciador de inicialização. (Você pode encontrar instruções para Android ela e .)

    Desbloquear apenas se refere à tela de bloqueio dos sistemas operacionais nesta resposta.

  • Você não precisa configurar o acesso de desenvolvedor ao seu dispositivo, como ADB, fastboot ou algo semelhante através de certas regras do udev. (Você pode encontrar instruções para Android no capítulo Configurando o acesso USB -la e ou dela e .)

  • Tanto quanto sei, você também não precisa do FUSE ou configura as opções relacionadas ao FUSE.

Solução de problemas

  1. Não consigo colocar arquivos no dispositivo.

    Seu dispositivo deve estar desbloqueado para acessar o armazenamento do dispositivo com o Ubuntu via MTP.

    mostrando o dispositivo no nautilus no estado bloqueado e desbloqueado

  2. Estou recebendo uma mensagem de erro informando que o dispositivo não pode ser montado.

    Se você receber a mensagem de erro abaixo, tente reconectar o dispositivo uma vez .

    mensagem de erro que pode aparecer ao conectar

    Se a mensagem de erro aparecer novamente, abra uma nova janela do nautilus a partir do iniciador (de preferência clicando no ícone do dispositivo) e provavelmente fechando a janela atual do nautilus. Possivelmente relacionado: como criar regras do udev para desativar um dos dispositivos Android?

  3. Verifique se existem regras do udev para o seu dispositivo

    Abra um terminal e digite lsusb. Encontre o seu dispositivo na saída e anote o ID (por exemplo 0fce:01b1). A primeira parte é o ID do fornecedor, a última parte, o ID do produto.

    Abra o arquivo de regras mtp udev correspondente nano /lib/udev/rules.d/69-libmtp.rulese procure o ID do seu produto (use Ctrl+ W). Se você não conseguir encontrá-lo, crie uma entrada personalizada /etc/udev/rules.d/69-libmtp.rulesseguindo o padrão abaixo e reinicie .

    # SONY Xperia Z2 MTP
    ATTR{idVendor}=="01b1", ATTR{idProduct}=="01b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
    

    Você deve registrar um bug no pacote libmtp (mais precisamente libmtp-common ) para incluir seu dispositivo em versões futuras, se isso funcionou para você.

  4. Eu ainda não consigo conectar

    Seu dispositivo não é compatível com o subjacente libmtpou você pode enfrentar o mesmo problema que o meu Lumia 620, siga a solução alternativa (etapas para reprodução) que eu publiquei no LP # 1247572: O Nokia Lumia 620 (WP8) falha ao montar de maneira confiável via gvfs-mtp no nautilus . (O dispositivo ainda não funciona perfeitamente aqui, mas usando mtp-detectajuda.)

    Você deve procurar no rastreador de erros libmtp do seu dispositivo e seguir as instruções para novos dispositivos na página do projeto para abrir um relatório de erro.

  5. O rastreador de erros lista meu dispositivo como suportado, mas ainda não funciona

    Em alguns casos, um relatório de bug referente ao seu dispositivo já pode ter sido arquivado e resolvido em uma versão libmtp mais recente do que a sua distribuição é fornecida (por exemplo: Motorola Moto G ). Se for esse o caso, você terá que aguardar a atualização dos repositórios oficiais ou procurar um PPA atualizado.

    Uma lista atualizada de todas as versões libmtp disponíveis nos canais oficiais do software Ubuntu e PPAs privados pode ser encontrada aqui (certifique-se de expandir Outras versões do 'libmtp' em arquivos não confiáveis ). A partir de 13/02/2014, esse PPA de Matthieu Baerts oferece o pacote libmtp mais recente disponível para o Ubuntu.

    Aviso : este PPA contém uma variedade de pacotes diferentes e possivelmente instáveis. Eu recomendaria não adicioná-lo ao seu sistema. Em vez disso, você pode baixar os pacotes libmtp separadamente e instalá-los manualmente em seu sistema.

    Familiarize-se com os CAE e seus riscos antes de prosseguir. Leia também o parágrafo abaixo sobre como restaurar seus pacotes originais antes de prosseguir com as seguintes etapas:

    1. Vá para a página de detalhes do pacote do PPA e expanda a entrada libmtp
    2. Baixe os seguintes pacotes: libmtp-common, libmtp-runtime, libmtp9, mtp-tools. Certifique-se de escolher a arquitetura certa para o seu sistema (isso geralmente será amd64).

      Aqui estão os links dos pacotes em 13/02/2014 : libmtp-common , libmtp-runtime , libmtp9 , mtp-tools

    3. Prossiga com a instalação manual dos pacotes atualizados com o dpkg (mude $HOME/Downloadspara a pasta de download e verifique se não há outros arquivos deb:

      cd "$HOME/Downloads"
      sudo dpkg -i *.deb
      
    4. Depois que tudo tiver sido instalado com sucesso, reinicie o computador, desbloqueie o dispositivo Android, conecte-o via USB e ele deverá aparecer no seu gerenciador de arquivos.

    Isso funcionou bem para mim (@Glutanimate) com meu Motorola Moto G. Como eu estava executando o Ubuntu 12.04 LTS, primeiro tive que instalar uma versão atualizada do gnome-gvfs. Consulte as instruções de instalação anteriores à 13.04 na parte superior para obter mais informações.

    Para desfazer as alterações se algo der errado ou se o dispositivo ainda não for reconhecido, você precisará instalar manualmente os pacotes originais. Vá para a visão geral do libmtp source e encontre sua versão do Ubuntu. Expanda a entrada em questão e continue com o download dos pacotes, como você fez na etapa 2 anterior. Continue com a instalação conforme descrito na etapa 3 e reinicie o sistema. Tudo deve voltar ao normal agora.


11
+1 para 'Não fique confuso' Não funciona para o meu galaxy s3 mini :(
hugo der hungrige

Trabalhei no meu tablet Samsung Galaxy com Android 4.1.2, mas não consigo editar os arquivos em qualquer lugar. Você tem uma solução para isso também?
Vesnog

"Alguns guias sugerem adicionar regras do udev a um arquivo chamado 51-android.rules. Elas não são para MTP, ..." Você perdeu toda a credibilidade ao dizer isso. As regras no udev / rules.d / são totalmente flexíveis. 51-android-rules é um lugar perfeitamente apropriado para eles. Você pode apenas como razoavelmente colocar a regra em 52-Phone-regras
Auspex

@Auspex A linha poderia ter sido melhor escrita, mas, em vez de reclamar, você poderia ter feito isso (isso exigiria ler e entender todo o post) ou fornecer uma resposta melhor. Olhando para o seu perfil, presumo que você saiba como os sites de SE devem funcionar. A maneira como você (não) gerencia seus arquivos /etcé inteiramente sua. Como explicado acima, idealmente todas as regras do udev devem ser fornecidas ootb. Caso contrário, deve-se registrar um bug para incluir a regra que falta /lib/.../69-libmtp.rules, para que todos fiquem felizes com o próximo lançamento.
LiveWireBT

11
@ Auspex Não entendo o que você está tentando alcançar aqui. Repito: a forma como você gerencia seus arquivos /etcdepende de você. /lib/udev/rules.d/69-libmtp.rulesé o que os mantenedores do pacote escolheram e estou sugerindo registrar um bug nesse pacote (atualizei minha resposta) para os usuários que encontrarem esse problema. Se você ainda tiver problemas com isso, fale com os mantenedores ou poste sua própria resposta. Agora estou saindo dessa conversa com você sobre esse assunto.
LiveWireBT

5

Todos os programas baseados em libmtpainda parecem ter problemas com o Galaxy Nexus (a partir da libmtp 1.1.3). Programas baseados em gphoto2trabalho para mim.

Pessoalmente, estou usando gphotofs, disponível em um pacote com o mesmo nome.

Use gphotofs ~/mymountpointpara montar e fusermount -u ~/mymountpointdesmontar quando terminar.


Acabei de atualizar para 12.04 e parece que a libmtp 1.1.3 não está funcionando corretamente como você disse. Terá que investigar isso um pouco mais. Embora o gphotofs esteja funcionando perfeitamente, obrigado pela sugestão!
Leo

11
Usar gphotofsme deixa com um único diretório que está vazio.
Nathan Osman

4

Instale o seguinte e reinicie:

sudo apt-get install gvfs-backends mtpfs jmtpfs libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9 gmtp libdbus-cpp5 libgflags2v5 libgoogle-glog0v5 libmtp-dbg libmtp-doc libmtpserver-dev libmtpserver1 libprocess-cpp3 mtp-server

E sim, esta resposta se aplica também ao "Ubuntu 13.04 [e superior; onde] o acesso ao armazenamento de dispositivos externos via MTP deve funcionar imediatamente por meio de um módulo GVFS-MTP" . Porque ele pode não ser instalado imediatamente. Mesmo quando o seu dispositivo MTP já está de alguma forma montado automaticamente! (Mas o que lhe dá acesso somente leitura ou outros problemas.)
tanius

11
@tanius Devo dizer que o MTP é tão dolorosamente lento que eu nem o uso mais. O esfile explorer possui um servidor ftp e eu apenas uso o curl para fazer upload de arquivos para o dispositivo na minha rede local.
Mchid 02/03

Este comando aponta para a origem do problema:The following packages have unmet dependencies: gvfs-backends : Depends: gvfs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-daemons (= 1.28.2-1ubuntu1~16.04.2) Depends: gvfs-libs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-common (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed E: Unable to correct problems, you have held broken packages.
NoBugs

11
Você deve observar que, quando isso falhar, como no comentário acima, remova e reinstale o "ubuntu-desktop" e o anterior com sudo apt-get install --reinstall. e depois reinicie.
NoBugs

0

Como primeiro passo, eu instalaria jmtpfs( sudo apt-get install jmtpfsno terminal - Ctrl+ Alt+ T), criaria uma pasta mkdir foldernamee, em seguida, montaria o dispositivo jmtpfs foldername, e depois iria para o nautilus (Arquivos).

Se o seu dispositivo não é compatível com a libmtpversão no ubuntu. Você precisa fazer o download e criar uma versão recente libmtp(> 1.1.12), como em: Como instalar a versão mais recente do libmtp?

Você poderá ver as pastas também usando mtp-foldersem um terminal ou com a interface gráfica gmtp.

As etapas anteriores podem mostrar um erro se você as executar sem sudo:

libusb_open() failed!: Permission denied

Para evitar o uso do sudo, você deve adicionar seu dispositivo ao /etc/udev/rules.d/51-android.rulesarquivo como acima (consulte a descrição) e recarregar regras ou reiniciar.


-1

Apenas uma pequena solução alternativa, conecte seu telefone baseado em ICS com o bom e velho MASS STORAGE http://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

11
Embora essa seja uma boa solução para alguns telefones, isso só funciona se um telefone tiver um cartão SD separado. Em relação à pergunta original, isso não funcionaria com o Galaxy Nexus.
coversnail

Mesmo com um cartão SD separado, não acho que a montagem como dispositivo de armazenamento em massa seja uma opção nas versões mais recentes do Android. Embora "sempre haja uma porta dos fundos em algum lugar", não vou ao ponto de dizer que não é possível.
Mchid 02/04/19

Isso foi há 4 anos;)
jflaflamme
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.