A versão do Ubuntu que possuo (14.04.1) monta automaticamente minha câmera digital e gera uma caixa me convidando a dizer o que fazer com ela. Como fiquei insatisfeito com todas as opções apresentadas, escrevi um script que faz exatamente o que eu quero, usando o gphoto2 para acessar a câmera e obter arquivos dela. O único problema é que, mesmo que eu tenha especificado 'não fazer nada' na caixa, a câmera permanece montada e, portanto, no que diz respeito ao gphoto2, indisponível porque não foi liberada. Para liberá-lo, devo abrir ou encontrar uma pasta e, especificamente, ejetar a câmera. Prefiro não me preocupar com esta etapa e apenas deixar meu script ser executado. Eu estou querendo saber se existe uma maneira de fazer isso.
Responder1
Para Ubuntu 17.10, 18.04 e superior, você precisará usar o utilitário gio
(que substituiu o gvfs-mount
).
Se a câmera estiver montada e você tiver o gphoto2 instalado, tente
gio mount -s gphoto2
mas se você quiser direcionar a câmera especificamente:
gio mount -l
mostrará as unidades montáveis.
Se você tiver uma câmera conectada, ela pode ficar assim:
$ gio mount -l
Drive(0): DA4032
Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Volume(0): Canon Digital Camera
Type: GProxyVolume (GProxyVolumeMonitorGPhoto2)
Mount(0): Canon Digital Camera -> gphoto2://%5Busb%3A002,002%5D/
Type: GProxyShadowMount (GProxyVolumeMonitorGPhoto2)
Mount(1): Canon Digital Camera -> gphoto2://%5Busb%3A002,002%5D/
Type: GDaemonMount
copiar o local após ->
permitirá desmontá-lo via gio mount -u
(desmontar, se você olhar a ajuda:gio help mount
gio mount -u gphoto2://%5Busb%3A002,002%5D/
irá desmontar a câmera via shell. Agora, para automatizar isso, você precisará criar um script systemd.
Responder2
Se você não quiser mexer udev
(o que é uma coisa do sistema), você pode usar a udisk
interface para desmontar a câmera.
A câmera normalmente será montada em um local fixo, igual /media/user/1234-5678/
ou similar (YMMV, depende de como a câmera formata o cartão); e como um dispositivo, digamos /dev/sdc1/
.
Agora você pode desmontá-lo do seu script usando
udisksctl unmount -b /dev/sdc1
o problema é que o dispositivo pode mudar; minha solução é ter essa pequena mágica
udisksctl unmount -b $(mount | grep 1234-5678 | cut -d" " -f1)
que funcionará desde que o ID do cartão não mude.