Portál AbcLinuxu, 8. července 2025 13:11

Připojovadlo pro openbox

9.6.2011 19:27 | Přečteno: 943× | Linux | poslední úprava: 9.6.2011 19:27

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.


Vlastní generátor:
#!/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

Unmount-helper:
#!/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"
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

10.6.2011 09:21 Viktor
Rozbalit Rozbalit vše Re: Připojovadlo pro openbox
Odpovědět | Sbalit | Link | Blokovat | Admin
Nebolo jednoduchsie nainstalovat a nastavit autofs?
10.6.2011 10:19 Brokarna | skóre: 18 | blog: problemy_s_r_o
Rozbalit Rozbalit vše Re: Připojovadlo pro openbox
No moc se mi nelíbí to vytrhávání připojenýho souborovýho systému.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.