Portál AbcLinuxu, 4. prosince 2025 15:22
Rád bych se podělil o můj skriptík na vytvoření openbox pipemenu pro připojování různých externích disků atp.
Pro uživatele bashe je tu menší problém akorát v tom, že skript běží v zsh. Dál pak závisí na qdbus a udisks, zbytek je už poměrně standardní (sed, echo,...). Pro vlastní použití je pak potřeba nahradit thunara za svýho oblíbenýho manažera, a v unmount-helperu možná nahradit zenity za kdialog.
#!/bin/zsh
#funkce dbus-getinfo potřebuje název vlastnosti a zařízení
function dbus-getinfo {
qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks/devices/$2 org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks.Device $1
}
# funkce diskpart-* potřebujou akorát název zařízení s kterym pracujou
function diskpart-mounted {
diskoun+=" <menu id=\"$1\" label=\"$1 - `dbus-getinfo IdLabel $1`\">
<item label=\"Unmount\"><action name=\"Execute\">
<execute>unmount-helper $1</execute>
</action></item>
<item label=\"Open\"><action name=\"Execute\">
<execute>thunar \"`dbus-getinfo DeviceMountPaths $1`\"</execute>
</action></item>
</menu>
"
}
function diskpart-unmounted {
diskoun+=" <menu id=\"$1\" label=\"$1 - `dbus-getinfo IdLabel $1`\">
<item label=\"Mount\"><action name=\"Execute\">
<execute>qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks/devices/$1 org.freedesktop.UDisks.Device.FilesystemMount `dbus-getinfo IdType $1` '(' ')'</execute>
</action></item>
</menu>
"
}
diskoun="<openbox_pipe_menu>\n"
#sed si pamatuje 2 vzory (oddělený závorkama), vypisuje jenom druhej
disky=`qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks org.freedesktop.UDisks.EnumerateDeviceFiles | sed -n -e "s/^\(\/dev\/\)\(sd[a-z]$\)/\2/p" | sort`
x=0
y=`echo $disky | wc -l`
while [ $x != $y ]
do
let x++
disk=`echo $disky | sed -n "${x}p"`
ifcheck=`dbus-getinfo DriveConnectionInterface $disk`
if [ $ifcheck = usb ]
then
partcount=`dbus-getinfo PartitionTableCount $disk`
if [ $partcount = 0 ]
then
if [ `dbus-getinfo DeviceIsMounted ${disk}` = true ]
then
diskpart-mounted ${disk}
else
diskpart-unmounted ${disk}
fi
else
diskoun+=" <menu id=\"${disk}\" label=\"${disk} - `dbus-getinfo DriveModel ${disk}`\">
"
oddily=`qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks org.freedesktop.UDisks.EnumerateDeviceFiles | sed -n -e "s/^\(\/dev\/\)\($disk.$\)/\2/p" | sort`
z=0
while [ $z != $partcount ]
do
let z++
oddil=`echo $oddily | sed -n "${z}p"`
if [ `dbus-getinfo DeviceIsMounted ${oddil}` = true ]
then
diskpart-mounted ${oddil}
else
diskpart-unmounted ${oddil}
fi
done
diskoun+=" </menu>
"
fi
fi
done
diskoun+="</openbox_pipe_menu>"
echo $diskoun
#!/bin/zsh
zenity --notification --window-icon /usr/share/icons/elementary/actions/48/media-eject.svg "Unmount in progress" & zenpid=$!
qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks/devices/$1 org.freedesktop.UDisks.Device.FilesystemUnmount '(' ')'
kill $zenpid
zenity --notification --window-icon /usr/share/icons/elementary/actions/48/gtk-ok.svg "Unmount finished"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.