Portál AbcLinuxu, 8. července 2025 13:11
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.