Além de usar o comando padrão mount
(que requer raiz), você pode montar unidades usando udisks
e dbus
com seu usuário padrão.
Para fazer isso, é útil (mas não obrigatório) saber algumas coisas sobre a unidade primeiro:
- Qual dispositivo é (ou seja,
/dev/sdb1
)
- qual sistema de arquivos ele usa.
Sabendo disso, você pode usar um comando simples 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 ecoar o caminho no qual ela está montada se a montagem for bem-sucedida.
Para desmontar unidades montadas desta forma, você pode executar:
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. Por exemplo, se o que você deseja montar está em /dev/sdb2
, você colocaria sdb2
no lugar de <device>
.
Se você não souber qual dispositivo é ou qual sistema de arquivos ele usa, não tema. Você pode imprimir facilmente todas essas informações 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 assim:
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';
};
};
};
Aqueles 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', eu executaria o comando
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdb1 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat" []
Todos esses comandos funcionam usando o sistema de mensagens dbus
, da mesma forma que Nautilus
e outros gerenciadores de arquivos montam automaticamente as coisas. Nesses comandos, estamos enviando vários objetos (por exemplo, /org/freedesktop/...
mensagens solicitando que montem e desmontem certos dispositivos. Eles podem ou não fazer isso dependendo das permissões que foram concedidas em PolicyKit
.
Usando comandos similares, é possível controlar quase todos os aspectos da experiência no Ubuntu e simular a maioria dos programas e funções do sistema (por exemplo, desligamento, alteração de volume, etc.).