Como copiar arquivos * para * uma câmera?

5

Eu gostaria de copiar um arquivo de atualização de firmware para minha câmera Canon 7D, conectado via USB.

Depois que ele foi montado automaticamente por thunar + thunar-volman + gvfs-gphoto2 , tentei o seguinte:

$ cp eos7d-v205-win/7D000205.FIR /run/user/1000/gvfs/gphoto2\:host\=%5Busb%3A001%2C012%5D/
$ echo $?
0
$ ls /run/user/1000/gvfs/gphoto2\:host\=%5Busb%3A001%2C012%5D/
DCIM  MISC

Então isso entrou em um buraco negro.

A primeira vez que tento copiá-lo com Ctrl - c e Ctrl - v imprime o seguinte mensagem de erro ao colar o arquivo:

Error writing file.

-108: No such file or directory.

Do you want to skip it?

Se eu tentar novamente depois disso, ele simplesmente falha:

$ thunar
Segmentation fault (core dumped)
$ echo $?
139

A capa do Gphoto 2 tem uma não documentada put function que também tentei:

$ sudo umount /run/user/1000/gvfs
$ gphoto2 --shell
gphoto2: {.../eos7d-v205-win} /> help put
Help on "put":

Usage: put [directory/]filename
Description:
        Upload a file

* Arguments in brackets [] are optional

Portanto, esta função aceita um argumento único com um diretório opcional . Estranho, mas deveria ser factível. Algumas tentativas de fazer isso funcionar:

$ gphoto2 --shell
gphoto2: {.../eos7d-v205-win} /> ls
store_00010001/     
gphoto2: {.../eos7d-v205-win} /> put 7D000205.FIR                       

*** Error ***              
You need to specify a folder starting with /store_xxxxxxxxx/
*** Error (-1: 'Unspecified error') ***
gphoto2: {.../eos7d-v205-win} /> put /store_00010001/7D000205.FIR

*** Error ***              
PTP Access Denied
*** Error (-1: 'Unspecified error') ***
gphoto2: {.../eos7d-v205-win} /> put /store_00010001/MISC/7D000205.FIR

*** Error ***              
PTP Access Denied
*** Error (-1: 'Unspecified error') ***

Talvez seja não compatível ?

O Digikam tem um recurso de upload , mas isso reportou ' Falha ao fazer o upload do arquivo "7D000205.FIR". ' Executá-lo a partir do shell não produziu mais informações.

man gvfs-copy não diz explicitamente que não pode copiar para uma câmera, mas não consigo descobrir como:

$ gvfs-copy "file://${HOME}/7D000203.FIR" /run/user/1000/gvfs/gphoto2\:host\=%5Busb%3A004%2C006%5D/
Error copying file file:///[...]/7D000203.FIR: Error writing file: -1: Unspecified error
$ gvfs-copy "file://${HOME}/7D000203.FIR" file:///run/user/1000/gvfs/gphoto2\:host\=%5Busb%3A004%2C006%5D/
Error copying file file:///[...]/7D000203.FIR: Error opening file '/run/user/1000/gvfs/gphoto2:host=[usb:004,006]': No such file or directory
$ gvfs-copy "file://${HOME}/7D000203.FIR" gphoto2://host\=%5Busb%3A004%2C006%5D/
Error copying file file:///[...]/7D000203.FIR: The specified location is not mounted

gphoto2 diz que deve ser possível enviar arquivos para a câmera:

$ gphoto2 --port usb: --abilities
Abilities for camera             : Canon EOS 7D                                
Serial port support              : no
USB support                      : yes
Capture choices                  :
                                 : Image
                                 : Preview
Configuration support            : yes
Delete selected files on camera  : yes
Delete all files on camera       : no
File preview (thumbnail) support : yes
File upload support              : yes

O manual do gphoto2 diz que suporta arquivos "upload". Não funciona Tentando um comando relatado como trabalhando em outro lugar :

$ gphoto2 --upload-file 7D000203.FIR --folder /store_00010001
*** Error ***              
PTP Access Denied
*** Error (-1: 'Unspecified error') ***       

For debugging messages, please use the --debug option.
Debugging messages may help finding a solution to your problem.
If you intend to send any error or debug messages to the gphoto
developer mailing list <[email protected]>, please run
gphoto2 as follows:

    env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --upload-file 7D000203.FIR --folder /store_00010001

Please make sure there is sufficient quoting around the arguments.

Depois de tentar o comando debug, recebo as seguintes linhas de registro relevantes:

ptp_usb_getresp [usb.c:434] (0): PTP_OC 0x100c receiving resp failed: PTP Access Denied (0x200f)
put_file_func [library.c:5940](0): 'ptp_sendobjectinfo (params, &storage, &parent, &handle, &oi)' failed: 'PTP Access Denied' (0x200f)
gp_context_error            (0): PTP Access Denied
gp_camera_folder_put_file [gphoto2-camera.c:1248](0): 'gp_filesystem_put_file (camera->fs, folder, filename, type, file, context)' failed: -1
gp_camera_free              (2): Freeing camera...
gp_camera_exit              (2): Exiting camera ('Canon EOS 7D')...
ptp_usb_sendreq             (2): Sending PTP_OC 0x1003 / Close session request...
gp_port_write               (3): Writing 12 = 0xc bytes to port...
gp_port_write               (3): Wrote   12 = 0xc bytes to port: (hexdump of 12 bytes)
 0c 00 00 00 01 00 03 10-0c 00 00 00              ............    

Muitas WTFs por minuto . O que eu preciso fazer para copiar um arquivo para minha câmera no Arch Linux?

Caso seja relevante: tentei copiar o arquivo no Windows 7 e ele também falhar:

You do not have permission to create this item.

    
por l0b0 08.03.2014 / 12:29

2 respostas

3

Não tenho certeza se você vai gostar desta resposta, mas, na minha experiência também, usar o PTP sempre causou um alto WTF / min. Presumivelmente, a própria câmera restringe a escrita na pasta raiz ou algo igualmente sensitivo.

Eu sugeriria colocar as mãos em um leitor CompactFlash, montar o sistema de arquivos diretamente e usar esse tipo de acesso para copiar o arquivo do firmware para a pasta raiz do cartão (por exemplo, mount /dev/sdc1 /mnt/camera e cp eos7d-v205-win/7D000205.FIR /mnt/camera/ ).

Eu achei os leitores de cartões muito mais rápidos do que o PTP, presumivelmente porque os primeiros podem se beneficiar dos recursos de leitura antecipada do sistema de arquivos do seu computador, enquanto o PTP não, então eu os considero uma despesa digna (e pequena) .

    
por 28.02.2015 / 00:17
0

Você pode usar o comando gvfs-copy . A sintaxe é:

gvfs-copy source-URI destination-URI

Então, isso deve funcionar:

gvfs-copy file:///home/user/eos7d-v205-win/7D000205.FIR file:///run/user/1000/gvfs/gphoto2\:host\=%5Busb%3A001%2C012%5D/
    
por 22.03.2014 / 17:06