summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2021-04-11 17:14:30 +0100
committerdakkar <dakkar@thenautilus.net>2021-04-11 17:14:54 +0100
commit6b3f0559ba4fcfc169f0f1bca77103ef5ee65434 (patch)
tree20ee83a9c9211c53841e593efe93a5e2baa9c3eb
parentzoom wrapper (diff)
downloadmisc-scripts-6b3f0559ba4fcfc169f0f1bca77103ef5ee65434.tar.gz
misc-scripts-6b3f0559ba4fcfc169f0f1bca77103ef5ee65434.tar.bz2
misc-scripts-6b3f0559ba4fcfc169f0f1bca77103ef5ee65434.zip
dmount - udisks+mount
-rwxr-xr-xbin/dmount65
1 files changed, 65 insertions, 0 deletions
diff --git a/bin/dmount b/bin/dmount
new file mode 100755
index 0000000..457e189
--- /dev/null
+++ b/bin/dmount
@@ -0,0 +1,65 @@
+#!/usr/bin/env perl
+use v5.24;
+use strict;
+use warnings;
+use File::Basename;
+use Try::Tiny;
+use List::Util 'uniq';
+use Net::DBus;
+
+my $bus = Net::DBus->system();
+my $srv = $bus->get_service('org.freedesktop.UDisks2');
+my $ud = $srv->get_object('/org/freedesktop/UDisks2/Manager');
+
+sub filter_dev {
+ my ($device_path) = @_;
+
+ my $dev = $srv->get_object($device_path);
+ return unless $dev->_net_dbus_introspector->has_interface('org.freedesktop.UDisks2.Filesystem');
+ my $ignore = try { $dev->HintIgnore } catch { 1 };
+ return if $ignore;
+ return $dev;
+}
+
+sub list {
+ return map { $_->IdLabel || $_->IdUUID }
+ map { filter_dev($_) }
+ @{$ud->GetBlockDevices({})};
+}
+
+sub mount {
+ my ($name) = @_;
+
+ my @devs = map { filter_dev($_) } uniq(
+ @{$ud->ResolveDevice({label=>$name},{})},
+ @{$ud->ResolveDevice({uuid=>$name},{})},
+ );
+ die "No device matching '$name'\n" unless @devs;
+
+ $_->Mount({}) for @devs;
+}
+
+my $cmd = basename($0);
+if (!@ARGV) {
+ warn <<"EOF";
+$cmd <name> # mount
+$cmd --list # list names
+$cmd --bashcomp # print completion code
+EOF
+ exit 1;
+}
+elsif ($ARGV[0] eq '--list') {
+ say for list();
+}
+elsif ($ARGV[0] eq '--bashcomp') {
+ print <<"EOF";
+_dmount_list() {
+ COMPREPLY=( \$($cmd --list) )
+}
+
+complete -F _dmount_list $cmd
+EOF
+}
+else {
+ mount($ARGV[0]);
+}