Oprócz użycia standardowej komendy mount
(która wymaga roota) możesz montować dyski używając udisks
i dbus
ze swoim standardowym użytkownikiem.
Aby to zrobić, warto (ale nie trzeba) najpierw wiedzieć kilka rzeczy o dysku:
- Jakie to urządzenie (tj.
/dev/sdb1
) - jakiego systemu plików używa.
Poznając te informacje można użyć prostego polecenia do zamontowania dysku z wiersza poleceń.
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemMount "<filesystem>"
To wywołanie powinno wywołać echo ścieżki, na której jest zamontowany, jeśli zamontowanie się powiedzie.
Aby odmontować dyski zamontowane w ten sposób możesz uruchomić:
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemUnmount
N.B. <device>
jest po prostu końcem ścieżki do niego. Więc na przykład jeśli to co chcesz zamontować jest na /dev/sdb2
wtedy umieścisz sdb2
w miejsce <device>
.
Jeśli nie wiesz jakie to urządzenie lub jakiego systemu plików używa nie obawiaj się. Możesz łatwo wydrukować wszystkie te informacje za pomocą tego małego polecenia:
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) ).*|\}|.*\{)"
Wyświetli to coś takiego:
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'; }; };};
Urządzenia, które mają IdUsage = 'filesystem'
mogą być montowane za pomocą powyższego polecenia.
To oznacza, że na przykład, jeśli chciałbym zamontować urządzenie 'USB DRIVE', wykonałbym polecenie
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdb1 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat"
Te wszystkie polecenia działają przy użyciu systemu przesyłania wiadomości dbus
, w ten sam sposób, w jaki Nautilus
i inne menedżery plików automatycznie montują rzeczy. W tych poleceniach wysyłamy różnym obiektom (np. /org/freedesktop/...
wiadomości z prośbą o zamontowanie i odmontowanie pewnych urządzeń. Mogą lub nie mogą tego zrobić w zależności od uprawnień, które zostały podane w PolicyKit
.
Używając podobnych poleceń można kontrolować prawie każdy aspekt swojego doświadczenia w Ubuntu i symulować większość programów systemowych i funkcji (tj. wyłączanie, zmiana głośności, itp.).