Far funzionare i dispositivi abilitati MTP con Ubuntu?


69

Poiché Ubuntu 13.04 l'accesso all'archiviazione su dispositivi esterni tramite MTP dovrebbe funzionare immediatamente tramite un modulo GVFS-MTP.

Mentre questa domanda riguarda Galaxy Nexus, sono supportati anche altri dispositivi Android, nonché telefoni Windows e lettori multimediali abilitati MTP .

Per la risoluzione dei problemi, consultare questo articolo .


Sto avendo un bel po 'di problemi a far funzionare i trasferimenti di file su MTP con Galaxy Nexus. Sto usando Kubuntu 11.10 a 64 bit, e questo è quello che ho fatto e i risultati che ottengo:

  1. Aggiunta la regola per il dispositivo in /etc/udev/rules.d/51-android.rules. La regola è la seguente e funziona per adb:

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
    
  2. Riavviato udev(e computer solo per essere sicuri).

Adb funziona e tutti i metodi per leggere dal dispositivo tramite MTP sembrano funzionare (ho provato a montare con mtpfs, gmtp e usando direttamente il pacchetto mtp-tools). Quando provo a scrivere sul dispositivo, tuttavia, nulla di ciò che ho provato funziona.

Ad esempio, l'esecuzione mtp-newfolder test_dir 0 0fornisce il seguente output:

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 corro mtp-foldersdopo una mtp-newfolder fallita senza ricollegare il dispositivo, ottengo il seguente output:

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.

Accompagnato da quanto segue in 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

Qualcuno ha idea di cosa fare?

MODIFICARE:

Ho anche provato la modalità PTP. Ancora una volta, la lettura funziona bene, ma non riesco a scrivere nulla sul dispositivo.


Non penso che sia Samsung .... e penso che sia Android. Il mio dispositivo Honeycomb è esattamente lo stesso modo in cui devi usare solo MTP. Penso che sarà così come saranno tutti i dispositivi Android post 2.3.

Risposte:


37

A partire da Ubuntu 13.04, l'accesso alla memoria di dispositivi esterni tramite MTP funziona immediatamente tramite un modulo GVFS-MTP.

Domanda correlata: ci sono piani per migliorare il supporto mtp su future versioni di Ubuntu?

Per la risoluzione dei problemi, vedere questa risposta .


Per me, è stato un problema di non avere gli ultimi libmtpfile sul mio sistema. Quindi ho risolto il problema e ho scritto questo articolo per aiutare gli altri .

Riepilogo del collegamento: c'era un bug nel libmtpbundle con le versioni precedenti di Ubuntu. Questo bug era già stato corretto nell'ultima fonte di libmtp.


1
Il problema sembra essere stato risolto nei pacchetti per Ubuntu 12.04, quindi possono essere utilizzati se si è abbastanza coraggiosi da farlo. Li ho presi da launchpad.net/ubuntu/+source/libmtp/1.1.1-1 e ho creato i pacchetti per il sistema (e lo stesso per gmtp)
Tatu Lahtela,

@Shannon. Grazie. Questa è la soluzione migliore Vorrei averlo trovato prima.
MountainX

2
rhythmbox si blocca ancora e fornisce errori (LIBMTP_Send_Representative_Sample (): impossibile ottenere informazioni sull'oggetto.) quando si tenta di accedere al Nexus e nautilus dà: Impossibile montare Galaxy Nexus; Errore durante l'inizializzazione della fotocamera: -60: impossibile bloccare il dispositivo. Cacca.
waspinator,

Sarebbe bello aggiornare le istruzioni per ottenere l'ultimo mtp, non 1.1.1
Kostiantyn Rybnikov

21

Hai provato il suggerimento di Bilal Akhtar su omgubuntu ?

Connetti il ​​tuo telefono o tablet Android a Ubuntu con MTPFS

  1. Impostare

    Innanzitutto, installa gli strumenti necessari con sudo apt-get install mtp-tools mtpfs

    Collega il tuo Galaxy Nexus al tuo computer. Sul telefono, apri il riquadro delle notifiche e fai clic su "Tipo di connessione USB". Assicurarsi che MTP sia selezionato.

    immagine che mostra le impostazioni della connessione USB Android

    Quindi, esegui questi comandi:

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

    Otterrai un output come questo: inserisci qui la descrizione dell'immagine

    Ora esegui questi comandi:

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

    Una finestra di Gedit dovrebbe aprirsi. Digita questo testo, tutto in una sola riga :

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

    Sostituisci VENDORIDcon quello idVendorche avevi annotato in precedenza. Allo stesso modo, sostituisci PRODUCTIDcon quello idProductche avevi annotato. Nel mio caso, erano 04e8e 685crispettivamente, ma avrebbero potuto essere diversi per te.

    Salva e chiudi il file. Quindi, disconnetti il telefono ed esegui questi comandi:

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

    $USERè una variabile di shell predefinita e dovrebbe essere l'utente che desideri aggiungere (di solito tu stesso). Ora esegui questo comando:

    gksu gedit /etc/fuse.conf
    

    Nella finestra di Gedit, rimuovi #all'inizio dell'ultima riga (quella che inizia con #user_allow_other) in questo modo:

    inserisci qui la descrizione dell'immagine

    Hai quasi finito! Ora riavvia il computer, quindi esegui questi tre comandi:

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

    Connetti il ​​tuo telefono, assicurati che il tuo telefono stia usando MTP ed esegui android-connect.

    Ecco! Ora puoi sfogliare i contenuti del tuo telefono Android usando Nautilus. Basta avviare il file manager, quindi nella barra laterale fare clic su GalaxyNexus per sfogliare i contenuti del telefono proprio come si farebbe con una chiavetta USB. È inoltre possibile aggiungere, rimuovere e modificare file proprio come un normale file system.

    screenshot di nautilus che mostra i contenuti del telefono

    Per rimuovere in sicurezza il telefono, basta eseguire android-disconnect.

  3. Conclusione

    Da ora in poi, devi solo correre android-connectper montare il tuo telefono e quindi android-disconnectper rimuovere in sicurezza il tuo telefono. Tutto il resto dovrebbe essere gestito automaticamente. Ho provato molti modi per far sì che il montaggio e lo smontaggio avvengano automaticamente sulla connessione via cavo, ma questa è stata la soluzione migliore che ho potuto trovare.

    Questi due comandi non richiedono l' esecuzione delle autorizzazioni di root . Tutti gli utenti membri del gruppo di utenti dei fusibili dovrebbero essere in grado di eseguire questi comandi senza accesso root.

    Questo è tutto! Hai collegato correttamente il tuo telefono Ice Cream Sandwich al tuo computer Ubuntu. Il processo potrebbe richiedere molto tempo per un principiante, ma sono sicuro che qualcuno verrà e realizzerà una GUI per tutto ciò in modo che tutto avvenga senza intoppi. :)


Sì, ho già provato la maggior parte dei modi di usare mtpfs-tools. Come ha scoperto Shannon, apparentemente era un bug in libmtp.
Leone,

Funziona, ma ho alcune domande. 1. Cosa fa quella configurazione udev, perché non funziona senza di essa? 2. Con quale magia sa quale dispositivo montare quando lo fai mtpfs, o supporta semplicemente solo 1 dispositivo connesso alla volta?
Bart van Heukelom,

Anche quando si copia un file di grandi dimensioni (con Nautilus) sembrerà copiarsi molto velocemente (50 MB / s) ma durante quel periodo non copia nulla. Solo quando la barra di avanzamento raggiunge il 100% inizierà la copia reale (e l'interfaccia si blocca). Forse una sorta di opzione buffer può essere disabilitata?
Bart van Heukelom,

Purtroppo non conosco le risposte che desideri. Mi dispiace.
desgua,

Fatto tutto questo, ma ricevendo questo messaggio quando si tenta di connettersi ad Android: fusermount: impossibile aprire /etc/fuse.conf: autorizzazione negata fusermount: opzione allow_other consentita solo se 'user_allow_other' è impostato in /etc/fuse.conf anche anche se ho modificato /etc/fuse.conf come indicato.
Dmitry Shvedov

21

Connessione di dispositivi tramite MTP con GVFS

Poiché l'accesso alla memoria di Ubuntu 13.04 ai dispositivi compatibili con MTP funziona immediatamente con un back - end GVFS . Si prega di dare un'occhiata Ci sono piani per migliorare il supporto mtp su future versioni di Ubuntu? per le istruzioni di installazione precedenti alla 13.04.

Questa soluzione dovrebbe funzionare per tutti i dispositivi Android che forniscono funzionalità MTP e probabilmente tutti i dispositivi non Android con funzionalità MTP come telefoni Windows e lettori multimediali portatili .

Non essere confuso

C'è stata una certa confusione, proviamo a chiarire le cose:

  • Non è necessario fare nulla che possa invalidare la garanzia!

    • Non è necessario eseguire il root del dispositivo.
    • Non è necessario sbloccare il bootloader. (Puoi trovare le istruzioni per Android sua e .)

    Lo sblocco si riferisce solo alla schermata di blocco dei sistemi operativi in ​​questa risposta.

  • Non è necessario configurare l'accesso degli sviluppatori al dispositivo come ADB, avvio rapido o qualcosa di simile tramite determinate regole udev. (Puoi trovare le istruzioni per Android nel capitolo Configurazione di USB Access her e o e ).

  • Per quanto ne so, anche tu non hai bisogno di FUSE o di configurare le opzioni relative a FUSE.

Problemi di risoluzione dei problemi

  1. Non riesco a mettere i file sul dispositivo.

    Il tuo dispositivo deve essere sbloccato per accedere alla memoria del dispositivo con Ubuntu tramite MTP.

    mostra dispositivo in nautilus in stato bloccato e sbloccato

  2. Ricevo un messaggio di errore che non è possibile montare il dispositivo.

    Se viene visualizzato il messaggio di errore seguente, provare a ricollegare il dispositivo una volta .

    messaggio di errore che potrebbe apparire durante la connessione

    Se il messaggio di errore viene visualizzato di nuovo, apri una nuova finestra nautilus dal programma di avvio (preferibilmente facendo clic sull'icona del dispositivo) e probabilmente chiudendo la finestra nautilus corrente. Possibilmente correlato: come creare regole udev per disabilitare uno dei dispositivi Android?

  3. Controlla se ci sono regole udev per il tuo dispositivo

    Apri un terminale e digita lsusb. Trova il tuo dispositivo nell'output e annota l'ID (ad es 0fce:01b1.). La prima parte è l'ID fornitore, l'ultima parte l'ID prodotto.

    Apri il file delle regole udev mtp corrispondente con nano /lib/udev/rules.d/69-libmtp.rulese cerca l'ID prodotto (usa Ctrl+ W). Se non riesci a trovarlo, devi creare una voce personalizzata /etc/udev/rules.d/69-libmtp.rulesseguendo lo schema seguente e riavviare .

    # 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"
    

    Dovresti considerare di presentare un bug sul pacchetto libmtp (più precisamente libmtp-common ) per includere il tuo dispositivo nelle versioni future, se funzionasse per te.

  4. Non riesco ancora a connettermi

    Il tuo dispositivo non è supportato dal sottostante libmtpo potresti riscontrare lo stesso problema che ho con il mio Lumia 620, segui la soluzione alternativa (passaggi per riprodurre) che ho pubblicato in LP # 1247572: Nokia Lumia 620 (WP8) non riesce a montare in modo affidabile tramite gvfs-mtp in nautilus . (Il dispositivo non funziona ancora perfettamente qui, ma usando gli mtp-detectaiuti.)

    Dovresti cercare il bug tracker di libmtp per il tuo dispositivo e seguire le istruzioni per i nuovi dispositivi nella pagina del progetto per aprire una segnalazione di bug.

  5. Il tracker dei bug elenca il mio dispositivo come supportato ma continua a non funzionare

    In alcuni casi, una segnalazione di bug relativa al tuo dispositivo potrebbe essere già stata archiviata e risolta in una versione libmtp più recente di quella fornita dalla tua distribuzione (ad es. Motorola Moto G ). In tal caso, dovrai attendere che i repository ufficiali vengano aggiornati o cercare un PPA aggiornato.

    Un elenco aggiornato di tutte le versioni di libmtp disponibili attraverso i canali software Ubuntu ufficiali e i PPA privati ​​può essere trovato qui (assicurati di espandere Altre versioni di 'libmtp' in archivi non attendibili ). A partire dal 13/02/2014 questo PPA di Matthieu Baerts offre l'ultimo pacchetto libmtp disponibile per Ubuntu.

    Attenzione : questo PPA contiene una varietà di pacchetti diversi e forse instabili. Vorrei sconsigliarlo di aggiungerlo al tuo sistema. Invece potresti scaricare i pacchetti libmtp separatamente e installarli manualmente sul tuo sistema.

    Si prega di familiarizzare con i PPA e i loro rischi prima di proseguire. Leggere anche il paragrafo seguente sul ripristino dei pacchetti originali prima di procedere con i seguenti passaggi:

    1. Vai alla pagina dei dettagli del pacchetto di PPA ed espandi la voce libmtp
    2. Scarica i seguenti pacchetti: libmtp-common, libmtp-runtime, libmtp9, mtp-tools. Assicurati di scegliere l'architettura giusta per il tuo sistema (questo sarà generalmente amd64).

      Ecco i collegamenti del pacchetto a partire dal 2014/02/13: libmtp-common , libmtp-runtime , libmtp9 , mtp-tools

    3. Procedere con l'installazione manuale dei pacchetti aggiornati con dpkg (passare $HOME/Downloadsalla cartella di download e assicurarsi che non siano presenti altri file deb:

      cd "$HOME/Downloads"
      sudo dpkg -i *.deb
      
    4. Una volta che tutto è stato installato correttamente, riavvia il computer, sblocca il tuo dispositivo Android, collegalo tramite USB e dovrebbe essere visualizzato nel tuo file manager.

    Questo ha funzionato bene per me (@Glutanimate) con il mio Motorola Moto G. Poiché stavo eseguendo Ubuntu 12.04 LTS ho dovuto installare una versione aggiornata di gnome-gvfs. Per ulteriori informazioni, consultare le istruzioni di installazione precedenti alla 13.04 in alto.

    Per annullare le modifiche se qualcosa va storto o se il dispositivo non viene ancora riconosciuto, dovrai installare manualmente i pacchetti originali. Dirigetevi verso la panoramica fonte libmtp e trovare la vostra versione di Ubuntu. Espandi la voce in questione e procedi con il download dei pacchetti, proprio come hai fatto nel passaggio 2. Continuare con l'installazione come descritto al passaggio 3 e riavviare il sistema. Ora tutto dovrebbe tornare alla normalità.


1
+1 per 'Non essere confuso' Non funziona con la mia galaxy s3 mini però :(
hugo der hungrige,

Ha funzionato per il mio tablet Samsung Galaxy con Android 4.1.2, ma non riesco a modificare i file in movimento. Hai una soluzione anche per quello?
Vesnog,

"Alcune guide suggeriscono di aggiungere regole udev a un file chiamato 51-android.rules. Questi non sono per MTP, ..." Hai perso tutta la credibilità quando lo hai detto. Le regole in udev / rules.d / sono completamente flessibili. 51-android-regole è un posto perfettamente appropriato per loro. Potresti anche ragionevolmente mettere la regola in 52 regole telefoniche
Auspex,

@Auspex La riga avrebbe potuto essere scritta meglio, ma invece di lamentarti avresti potuto farlo (ciò avrebbe richiesto la lettura e la comprensione dell'intero post) o fornire una risposta migliore. Guardando il tuo profilo presumo che tu sappia come dovrebbero funzionare i siti SE. Il modo in cui gestisci (erroneamente) i tuoi file /etcdipende interamente da te. Come spiegato sopra, idealmente tutte le regole udev dovrebbero essere fornite ootb. In caso contrario, si dovrebbe presentare un bug per includere la regola mancante /lib/.../69-libmtp.rules, quindi tutti saranno contenti della prossima versione.
LiveWireBT

1
@Auspex Non capisco cosa stai cercando di ottenere qui. Ripeto: come gestisci i tuoi file /etcdipende da te. /lib/udev/rules.d/69-libmtp.rulesè ciò che i manutentori del pacchetto hanno scelto e sto suggerendo di presentare un bug per quel pacchetto (ho aggiornato la mia risposta) per gli utenti che riscontrano questo problema. Se il problema persiste, parla gentilmente con i manutentori o pubblica la tua risposta. Ora mi sto inchinando da questa conversazione con te su questo argomento.
LiveWireBT

5

Tutti i programmi basati su libmtpsembrano ancora avere problemi con il Galaxy Nexus (a partire da libmtp 1.1.3). Programmi basati sul gphoto2lavoro per me.

Personalmente sto usando gphotofs, disponibile in un pacchetto con lo stesso nome.

Usa gphotofs ~/mymountpointper montare, quindi fusermount -u ~/mymountpointper smontare quando hai finito.


Appena aggiornato a 12.04 e sembra che libmtp 1.1.3 non funzioni correttamente come hai detto. Dovrà indagare un po 'di più. gphotofs funziona perfettamente, quindi grazie per il suggerimento!
Leo,

1
L'utilizzo gphotofsmi lascia con un'unica directory vuota.
Nathan Osman,

4

Installa quanto segue e riavvia:

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 sì, questa risposta si applica anche a "Ubuntu 13.04 [e versioni successive; dove] l'accesso alla memoria a dispositivi esterni tramite MTP dovrebbe funzionare immediatamente tramite un modulo GVFS-MTP" . Perché potrebbe non essere installato immediatamente. Anche quando il tuo dispositivo MTP è già in qualche modo montato automaticamente! (Ma dandoti l'accesso in sola lettura o altri problemi.)
tanius

1
@tanius Devo dire che MTP è così dolorosamente lento che non lo uso nemmeno più. esfile explorer ha un server ftp e uso semplicemente curl per caricare i file sul dispositivo sulla mia rete locale.
mchid

Questo comando indica l'origine del 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

1
Dovresti notare che quando questo fallisce come nel commento sopra, rimuovi e reinstalla "ubuntu-desktop" e quanto sopra con sudo apt-get install --reinstall. e quindi riavviare.
NoBugs

0

Come primo passo, vorrei installare jmtpfs( sudo apt-get install jmtpfsnel terminale - Ctrl+ Alt+ T), quindi creare una cartella con mkdir foldernamee quindi montare il dispositivo con jmtpfs foldername, quindi andare su nautilus (File).

Se il tuo dispositivo non è compatibile con la libmtpversione in Ubuntu. Devi scaricare e creare un recente libmtp(> 1.1.12), come in: Come posso installare l'ultima versione di libmtp?

Dovresti essere in grado di vedere le cartelle anche usando mtp-foldersin un terminale o con l'interfaccia grafica gmtp.

I passaggi precedenti potrebbero mostrare un errore se li esegui senza sudo:

libusb_open() failed!: Permission denied

Per evitare l'uso di sudo, è necessario aggiungere il dispositivo al /etc/udev/rules.d/51-android.rulesfile come sopra (vedere desgua) e ricaricare le regole o riavviare.


-1

Solo una piccola soluzione alternativa, collega il tuo telefono basato su ICS con il buon vecchio MASS STORAGE http://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

1
Sebbene questa sia una buona soluzione per alcuni telefoni, funziona solo se un telefono ha una scheda SD separata. In relazione alla domanda originale questo non funzionerebbe con il Galaxy Nexus.
covernail

Anche con una scheda SD separata, non credo che il montaggio come dispositivo di archiviazione di massa sia un'opzione per le versioni più recenti di Android. Anche se "c'è sempre una porta sul retro da qualche parte", quindi non andrò così lontano da dire che non è possibile.
1616

È stato 4 anni fa;)
jflaflamme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.