Como aceder a uma unidade flash usb a partir do terminal?

Além de usar o comando padrão mount (que requer raiz) pode montar unidades usando udisks e dbus com o seu utilizador padrão.

Para o fazer é útil (mas não necessário) saber primeiro algumas coisas sobre a unidade:

    1. Que dispositivo é (i.e. /dev/sdb1)
    2. que sistema de ficheiros utiliza.

    Conhecendo estes pode usar um simples comando para montar uma unidade a partir da linha de comando.

    gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemMount "<filesystem>" 

    esta chamada deve fazer eco do caminho em que está montada se a montagem for bem sucedida.

    Para desmontar unidades montadas desta forma pode correr:

    gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemUnmount 

    N.B. o <device> é simplesmente o fim do caminho para ele. Assim, por exemplo, se o que pretende montar estiver em /dev/sdb2 então colocaria sdb2 no lugar de <device>.

    se não souber que dispositivo é ou que sistema de ficheiros utiliza não tenha medo. Pode imprimir facilmente toda essa informação com este pequeno comando:

    gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (IdLabel|IdType|Device(IsMounted|IsDrive|File) ).*|\}|.*\{)"

    Isso imprimirá algo como isto:

    node /org/freedesktop/UDisks/devices { node /org/freedesktop/UDisks/devices/sda { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda'; }; }; node /org/freedesktop/UDisks/devices/sda1 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'SYSTEM'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda1'; }; }; node /org/freedesktop/UDisks/devices/sda2 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'Windows7'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda2'; }; }; node /org/freedesktop/UDisks/devices/sda3 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'Recovery'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda3'; }; }; node /org/freedesktop/UDisks/devices/sda4 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda4'; }; }; node /org/freedesktop/UDisks/devices/sda5 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'ext4'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda5'; }; }; node /org/freedesktop/UDisks/devices/sda6 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'swap'; readonly s IdUsage = 'other'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda6'; }; }; node /org/freedesktop/UDisks/devices/sda7 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'ext4'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda7'; }; }; node /org/freedesktop/UDisks/devices/sdb { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sdb'; }; }; node /org/freedesktop/UDisks/devices/sdb1 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'USB DRIVE'; readonly s IdType = 'vfat'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sdb1'; }; }; node /org/freedesktop/UDisks/devices/sr0 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sr0'; }; };};

    Os que têm IdUsage = 'filesystem' podem ser montados usando o comando acima.

    Isso significa que, por exemplo, se eu quisesse montar o dispositivo ‘USB DRIVE’ executaria o comando

    gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdb1 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat" 

    Estes comandos funcionam todos usando o dbus sistema de mensagens, da mesma forma que Nautilus e outros gestores de ficheiros auto-montam coisas. Nestes comandos estamos a enviar vários objectos (ou seja /org/freedesktop/... mensagens pedindo-lhes para montar e desmontar certos dispositivos. Eles podem ou não fazê-lo, dependendo das permissões dadas em PolicyKit.

    Utilizando comandos semelhantes é possível controlar quase todos os aspectos da experiência no Ubuntu e simular a maioria dos programas e funções do sistema (i.e. encerramento, mudança de volume, etc.).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *