You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kioslave/media/contrib/mediamanager_usbstorage.dev

109 lines
3.4 KiB

#!/bin/sh
# /etc/dev.d/default/mediamanager_usbstorage.dev
# Notify all KDE sessions (thanks to the mediamanager) that a new
# usb_storage device appeared or disappeared
#
# to debug this script, uncomment the next line and see /tmp/mediamanager_usbstorage.debug after execution
#DEBUG=1
# exit immediately if /usr/bin/ is not yet available (during boot if /usr is a separate partition)
/bin/ls -d /usr/bin/ >/dev/null 2>&1 || exit
DEBUGOUT=/tmp/mediamanager_usbstorage.debug.$$
if [ "$DEBUG" = "1" -a -z "$2" ]; then
echo "executing $0 $@" > $DEBUGOUT
echo "with the following environment variables:" >> $DEBUGOUT
env >> $DEBUGOUT
echo "----" >> $DEBUGOUT
sh -x $0 $@ debug >> $DEBUGOUT 2>&1
exit
fi
# we only manage block devices
if [ "$1" != "block" ]; then exit; fi
# we only manage usb_storage devices
if [ "$ACTION" = "add" ]; then
device="`ls /sys$DEVPATH/../device/../../../ 2> /dev/NULL | grep ':' | head -1`"
if [ -z "$device" -o ! -e /sys/bus/usb/drivers/usb-storage/$device ]; then
# The behavior is not the same for every kernel it seems.
# Testing the driver/ directory just in case.
device="`ls /sys$DEVPATH/../device/../../../driver 2> /dev/NULL | grep ':' | head -1`"
if [ -z "$device" -o ! -e /sys/bus/usb/drivers/usb-storage/$device ]; then
exit
fi
fi
fi
# functions for syslog
LOGGER="logger -t `basename $0`[$$] -p user.notice"
write_syslog () {
echo ${@} | $LOGGER
}
# be sure the drivers are loaded
/sbin/modprobe -q usb_storage
/sbin/modprobe -q vfat
# create the FSH required /media directory
# See: http://www.pathname.com/fhs/pub/fhs-2.3.html#MEDIAMOUNTPOINT
MNT=media
if [ ! -d /$MNT ]; then
mkdir /$MNT
write_syslog "Created the /$MNT directory"
fi
# we need DEVPATH, DEVNAME and ACTION, so we warn the user that executes this script by hand
if [ -z "$DEVPATH" -a -z "$DEVNAME" -a -z "$ACTION" ]; then
echo
echo "This script must be called by udevd because it needs the following environment variables: DEVPATH, DEVNAME, ACTION"
echo "So you must copy this script as /etc/dev.d/default/updfstab-2.6.dev and set it executable"
echo "See: http://www.kernel.org/pub/linux/utils/kernel/hotplug/RFC-dev.d"
echo
exit
fi
# if $DEVPATH/device exists, we are a device, not a partition, so exit
if [ -d /sys${DEVPATH}/device ]; then exit; fi
dcop_users="`ps aux | grep dcopserver | grep -v grep | awk '{print $1}' | sort | uniq`"
# if the current device is being added
if [ "$ACTION" = "add" ]; then
# get partition information
partition="/sys${DEVPATH}/../device/../../.."
# We check twice again... marvelous random kernel behaviour changes...
if [ -e $partition/product ]; then
product="`cat $partition/product`"
else
product="`cat $partition/../product`"
fi
if [ -e $partition/manufacturer ]; then
manufacturer="`cat $partition/manufacturer`"
else
manufacturer="`cat $partition/../manufacturer`"
fi
write_syslog "Invoking dcop..."
write_syslog "kded mediamanager removablePlug $DEVNAME \"$manufacturer $product\""
method="kded mediamanager removablePlug"
for user in $dcop_users ; do
dcop --user $user --all-sessions $method $DEVNAME "$manufacturer $product"
done
elif [ "$ACTION" = "remove" ]; then
write_syslog "Invoking dcop..."
write_syslog "kded mediamanager removableUnplug $DEVNAME"
method="kded mediamanager removableUnplug"
for user in $dcop_users ; do
dcop --user $user --all-sessions $method $DEVNAME
done
umount $DEVNAME
fi