Uzix | микроблог

Меню монтирования в OpenBox

Буду краток. Давеча, не найдя готового, написал вот такую штуку:

Итак, код:

#!/bin/sh
 case "$1" in
	openn)
		rox $(mount |grep $2 |awk '{print $3}')
		;;
	moope)
		$0 mount $2
		$0 openn $2
		;;
	mount)
		LABEL="$(/sbin/blkid -o udev /dev/$2 |grep ID_FS_LABEL\= |awk -F'=' '{print $2}')"
		test -z "$LABEL" && LABEL=$2
		notify-send -c device.added -i gnome-dev-removable "Монтирование $2" "Точка монтирования: $LABEL"
		pmount /dev/$2 "$LABEL"
		;;
	umoun)
		notify-send -i gnome-dev-removable "Отмонтирование $2" "Точка монтирования: $(mount |grep $2 |awk '{print $3}')"
		pumount $3 /dev/$2
		if [ $? -eq 0 ]; then notify-send -u low -c device.removed -i gnome-dev-removable \
                      "Устройство $2 отмонтировано" "Теперь это устройство можно безопасно извлечь"
		else notify-send -u critical -c device.removed -i gnome-dev-removable "Устройство $2 НЕ отмонтировано" \
                     "$(lsof $(mount |grep $2 |awk '{print $3}')|awk '{printf $1"("$2") "}')"
		fi
		;;
	umoul)
		$0 umoun $2 --lazy
		;;
esac
 test -n "$*" && exit
 echo "<openbox_pipe_menu>"
echo "<separator label=\"Закладки\" />"
for bookmark in `sed 's/< ><^ >*$//' .gtk-bookmarks |sed s/file\://
` ; do
  echo '<item label="'`basename ${bookmark}`'">'
  echo '<action name="Execute"><execute>'
  echo "rox ${bookmark}"
  echo '</execute></action>'
  echo '</item>'
done
 echo "<separator label=\"Устройства\" />"
for i in /sys/block/sd*/; do cd $i; for ii in sd*; do
	test -r $ii || continue
	test ${ii%?} = sda && continue
	VENDOR=$(cat $i/device/vendor |sed 's/ *$//g')
	MODEL=$(cat $i/device/model |sed 's/ *$//g')
	echo "<menu id=\"$ii\" label=\"$ii <$VENDOR - $MODEL>\">"
		echo "<separator label=\"Действия над $ii\"/>"
		echo "<item id=\"${ii}_openn\" label=\"Открыть\">"
			echo "<action name=\"Execute\"><execute>$0 openn $ii </execute></action>"
		echo "</item>"
		echo "<item id=\"${ii}_moope\" label=\"Монтировать и открыть\" >"
			echo "<action name=\"Execute\"><execute>$0 moope $ii</execute></action>"
		echo "</item>"
		echo "<item id=\"${ii}_mount\" label=\"Монтировать\" >"
			echo "<action name=\"Execute\"><execute>$0 mount $ii</execute></action>"
		echo "</item>"
		echo "<item id=\"${ii}_umoun\" label=\"Отмонтировать\" >"
			echo "<action name=\"Execute\"><execute>$0 umoun $ii</execute></action>"
		echo "</item>"
		echo "<item id=\"${ii}_umoul\" label=\"Отмонт. принудительно\" >"
			echo "<action name=\"Execute\"><execute>$0 umoul $ii</execute></action>"
		echo "</item>"
		echo "<separator/>"
		echo "<item id=\"${ii}_imntpt\" label=\"Точка монт.: $(mount |grep $ii |awk '{print $3}')\" />"
#		echo "<item id=\"${ii}_ilabal\" label=\"Метка: $(/sbin/blkid /dev/$ii)\" />"
	echo "</menu>"
done; cd -; done
echo "</openbox_pipe_menu>"

Как видно из кода, необходимы pmount, blkid, notify-send, rox (или другой файл-менеджер).

Использование - прописать в menu.xml что-то вроде такого:

<menu id="mounts" label="Монтирование" execute="~/.config/openbox/mountmenu.sh" />

Чтобы заменить файл-менеджер, отредактируйте строки 5 и 37. Чтобы добавить игнорируемые скриптом диски, отредактируйте строку 45.

Пост был написан для блога welinux.ru

Комментарии