Não foi possível executar operações de arquivo em um dispositivo MTP montado via GVFS: “Operação não suportada”

13

Estou executando o Linux Mint 17.1 de 64 bits (baseado no Ubuntu 14.04). Desde a atualização do Linux Mint 14 / Ubuntu 12.10, o script Python usado para sincronizar músicas com o meu Walkman parou de funcionar.

Anteriormente, quando eu montava o meu Walkman, ele aparecia automaticamente como o caminho /run/user/1000/gvfs/WALKMAN/Storage Mediae funcionava como qualquer outro sistema de arquivos: eu podia copiar faixas para ele, excluir faixas dele etc., por todo o Python. No entanto, não me lembro se tive que fazer alguma alteração para que isso acontecesse.

Desde a atualização para o Linux Mint 17 (e agora 17.1), quando eu monto o Walkman, ele aparece como o caminho /run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media. Além disso, quando tento executar as mesmas operações de arquivo, elas agora falham. Eu descobri que isso acontece não apenas através do Python, mas também na linha de comando. Por exemplo:

david@MILTON:~$ cp '/data/Music/10SecsWhiteNoise.mp3' '/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C006%5D/Storage Media/MUSIC'
cp: cannot create regular file ‘/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C006%5D/Storage Media/MUSIC/10SecsWhiteNoise.mp3’: Operation not supported

Eu fiz algumas pesquisas sobre esse problema, mas a explicação mais comum parece ser que ele foi resolvido anteriormente por este PPA: https://launchpad.net/~langdalepl/+archive/ubuntu/gvfs-mtp

Mas agora, as versões do Ubuntu desde 13.10 contêm todas essas alterações, portanto, não é mais necessário. Então, por que ainda estou tendo esses erros? Ainda consigo fazer operações de arquivos no meu Walkman por meio de um gerenciador de arquivos gráficos (Caja, no Linux Mint), mas não através da linha de comando.

David Pitchford
fonte
Eu acho que pode ajudá-lo: github.com/hanwen/go-mtpfs
PersianGulf
Meu dispositivo já é montado como MTP ... esse não é o problema.
David Pitchford

Respostas:

14

Um palpite: agora você está realmente usando o MTP para acessar o seu Walkman, e o MTP é péssimo.

Detalhes

O Operation not supportederro pode indicar que o seu Walkman usa uma implementação MTP que não suporta acesso "direto". De acordo com http://intr.overt.org/blog/?p=174, esse tipo de acesso direto é uma extensão específica do Android, portanto, provavelmente não é suportada pelo seu Walkman.

Como resultado, você pode usar apenas algumas maneiras selecionadas para acessar arquivos no seu Walkman usando o MTP: acho que tudo o que lê ou grava arquivos em uma única operação é suportado, enquanto o acesso a partes selecionadas de um arquivo não é suportado para essas implementações do MTP . E parece que o cpPython sempre usa o último método de acesso e, portanto, falha.

Solução possível

No entanto, você poderá substituir apenas cppor gvfs-copy. Nos meus testes com um telefone Samsung Android (que também possui uma implementação de MTP prejudicada), gvfs-copyfoi possível copiar arquivos para o telefone onde houve cpfalha.

fundo

Não consegui encontrar muita informação sobre essas limitações MTP dependentes do dispositivo; Aqui estão alguns trechos em que a situação é explicada um pouco:

/ubuntu//a/284831 https://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/1389001/comments/2 https://bugs.launchpad.net/ubuntu/+source / gvfs / + bug / 1157583 / comments / 1

Por que funcionou antes?

Quanto ao motivo pelo qual o Walkman estava acessível cpno Mint 14, mas não no Mint 17, isso pode ser causado por uma troca interna de PTP para MTP como sistema de acesso. Pelo menos foi o que notei no dispositivo Samsung ao mudar do Ubuntu 12.04 para 14.04. O telefone suporta PTP e MTP, mas o Ubuntu 12.04 aparentemente apenas suporta PTP; então foi isso que foi usado. Como a nova versão do Ubuntu possui suporte interno para o MTP, isso agora é usado.

Na verdade, pode até ser que o seu Walkman tenha sido acessado anteriormente como dispositivo de armazenamento em massa USB , que é o que os discos rígidos e unidades flash USB usam. Talvez por alguma razão o Linux (ou o seu Walkman) tenha decidido que o MTP era preferível ao acesso ao armazenamento em massa.

Você pode ver o método de acesso usado consultando a URL do Walkman (no Nautilus, vá para a pasta Walkman, pressione Ctrl + L e veja a barra de endereços): para MTP, o dispositivo é encontrado em, por exemplo. mtp://[usb:001,004]/enquanto para PTP é algo parecido gphoto2://[usb:001,004]/store_00010001. Para acesso ao armazenamento em massa, o URL é apenas um caminho normal /media/WALKMAN.

Não sei se o MTP tem vantagens reais sobre o PTP ou o armazenamento em massa ou se é possível voltar ao PTP ou ao armazenamento em massa. No Linux, as implementações MTP e PTP têm seu próprio conjunto de bugs, portanto, pode depender do seu caso de uso qual é o melhor. O armazenamento em massa AFAIK é a opção mais desejável para o usuário, mas o suporte ao dispositivo nos telefones está diminuindo.

oliver
fonte
2
Obrigado por me apresentar a gvfs-copy. No entanto, é uma chatice enorme que não copie diretórios recursivamente. Existe outro que eu possa fazer recursivamente?
TuxForLife
1
também gvfs-copynão funciona para mim melhor do que o normal cp. E no meu caso, o mesmo telefone funcionava no passado através do MTP. Alguns telefones funcionam e outros não. Em todo MTP (como eu seleciono a opção de conexão MTP no menu do telefone). update: encontrou o problema. Estava tentando copiar do cartão para o armazenamento do telefone. Eu tive que copiar primeiro para o sistema de arquivos local (por exemplo, / tmp) e depois copiar para o armazenamento do telefone. Parece que a cópia direta mtp-> mtp ainda não funciona.
Akostadinov
Nem o gvfs-copy nem o gvfs-moveu funcionaram para mim também. Usando o Caja 1.8.2, consegui movê-los usando a interface gráfica e depois excluir os arquivos.
Julien Lamarche 13/01
2

Para acessar meu telefone celular, tive que instalar o servidor mtp através do Synaptic Package Manager no meu Linux Mint 17.1 Mate. Meu Linux Mint 17 Mate anterior não exigia a instalação do mtp-server, meu celular foi reconhecido automaticamente ao conectar via porta usb. Talvez essa informação ajude.

Scott
fonte
Você quer dizer através da linha de comando? Como eu disse, ainda posso acessá-lo através do gerenciador de arquivos da GUI.
David Pitchford
Caja responde às minhas necessidades, então não posso ajudá-lo com a linha de comando.
Scott
Obrigado Scott. Sua resposta me ajudou a resolver esta mensagem de erro: Kon 'mtp://[usb:003,029]/' niet weergeven. Fout: The name :1.1813 was not provided by any .service files Kies een andere weergavemethode en probeer het opnieuw.E meu dispositivo Adroid não se conectou através do MTP na minha instalação do Mint 17. Provavelmente após uma atualização 17.1. apt-get install mtp-serverresolveu meu problema. Isso é para outros usuários com esse problema podem ajudá-los, como me ajudou.
2

Eu me deparei com esse mesmo problema no Ubuntu 16.04 e no Samsung Galaxy SIII conectado no modo MTP.

Usando a sugestão de Oliver para usar gvfs-copy, copiar diretamente do meu NAS para o telefone não funciona: (nem o Nautilus). Esta é uma solução alternativa para um possível bug no gvfs-copy.

gvfs-copy '/run/user/1000/gvfs/smb-share:server=n2100,share=public/Music/The Story of Funk-1.mp2' '/run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C005%5D/Card/Music/Radio/'
Error copying file /run/user/1000/gvfs/smb-share:server=n2100,share=public/Music/The Story of Funk-1.mp2: Operation unsupported

Nem o formato de caminho alternativo sugerido pela página de manual:

gvfs-copy 'smb://n2100/public/Music/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'
Error copying file smb://n2100/public/Music/The Story of Funk-1.mp2: Operation unsupported

Copiar o arquivo para uma pasta local primeiro, no entanto, funcionou. {Obrigado akostadinov} (e o Nautilus também).

gvfs-copy '/home/nigel/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'
Nigel Winterbottom
fonte
1

No Debian Jessie, gvfs-copydo pacote gvfs-binfunciona para mim.

$ dpkg -S $(which gvfs-copy)
gvfs-bin: /usr/bin/gvfs-copy
$ dpkg -l gvfs-bin |tail -1
ii  gvfs-bin       1.22.2-1     amd64        userspace virtual filesystem - binaries
user1338062
fonte
0

Você pode tentar usar o rsync para sincronizar com o seu dispositivo, embora, com as transferências do MTP, geralmente não seja possível definir a data e hora para cada arquivo. Para tornar as transferências mais rápidas, você deve usar a opção --size-only para rsync e não a opção -t. Acho mais fácil alterar o diretório para o diretório mtp, como / run / user / 1000 / gvfs / mtp: host = blahblah / blah / blah e execute:

rsync -n -vlr --size-only --delete /source/of/files/ ./

A opção -n é executar uma execução a seco. Apenas apague essa opção se estiver satisfeito com os resultados.

Eric Sokolowsky
fonte