[sisyphus] hotplug
Mike Andreev
=?iso-8859-1?q?andreev_=CE=C1_d902=2Eiki=2Erssi=2Eru?=
Чт Дек 9 20:57:16 MSK 2004
Здравствуйте,
Мои письма почему-то до community на altlinux.ru не доходят. так что шлю сюда.
вот решил поделиться, может кому-то будет полезно...
[ все ниже описанное было сделано для решения моих личных задач и у меня
работает. Your Mileage May Vary.
конструктивная критика и замечания приветствуются
]
У меня есть Flash'ка и фотоаппарат, который подключаются по USB (как диск не
мантируется, но gphoto2 его поддерживает). Оба устройства опознаются, и при
подключении флэшки в fstab добавляется mount-point.
[ ALT Linux Sisyphus (20041111), hotplug-2004_03_29-alt7, kudzu-1.1.13-alt8 ]
задача состояла в том, что бы изменить параметры mount-point. и, при наличии
залогинившигося в консоль пользователя запускать от его имени необходимые
комманды (mount -- для флешки, скрипт для скачивания фоток -- для
фотоаппарата).
как я понял updfstab не имеет возможности изменения опций монтирования, а в
hotplug не предусмотрено возможности добавления "пользовательских" скриптов,
поэтому было сделано следующее:
в конец /sbin/hotplug добавлен вызов /etc/hotplug.d/local.hotplug
этот скрипт выполняет соответствующие обнаруженному устройству файлы
из /etc/hotplug.d/local/ (от root) и из $HOME/.hotplug/ (от имени
пользователя консоли)
соответствие скриптов устройствам проверяется по $PRODUCT
(передается /sbin/hotplug, как переменная окружения).
теперь при в подключении флэшки она у меня автоматически мантируется в нужное
место с нужными параметрами, а при подключении фотоаппарата автоматически
запускается xterm с мои скриптом.
[ "лучше день потерять, потом за час долететь" (С) ;-) ]
=============================================================================
/etc/hotplug.d/local.hotplug
#!/bin/bash
LOG_FILE=/var/log/hotplug/local
DEBUG=yes export DEBUG
HOTPLUG_TYPE=$1 export HOTPLUG_TYPE
shift
LOGGER="logger -t $(basename $0)"
log_mesg () {
$LOGGER "$@"
}
if [ -z "$HOTPLUG_TYPE" -o -z "$PRODUCT" ]; then exit 1; fi
[ -z "$DEBUG" -o "$DEBUG" == "no" ] || \
log_mesg "type: '$HOTPLUG_TYPE'; env: `env`"
#code to detect console user from /etc/hotplug/usb/usbcam
if [ -f /var/run/console.lock ]; then
CONSOLEOWNER=`cat /var/run/console.lock`
elif [ -f /var/lock/console.lock ]; then
CONSOLEOWNER=`cat /var/lock/console.lock`
else CONSOLEOWNER= ; fi
#user's home directory
if [ -n "$CONSOLEOWNER" ]; then
CONSOLEOWNER_HOME=`awk -F: \
"/^$CONSOLEOWNER/ { print \\\$6 }" /etc/passwd`
fi;
#run scripts if $PRODUCT in known
PRODUCT_ID=`echo $PRODUCT | sed -e 's;/;-;g'`
log_mesg "ID: $PRODUCT_ID; CONSOLEOWNER: $CONSOLEOWNER / $CONSOLEOWNER_HOME"
[ -f /etc/hotplug.d/local/$PRODUCT_ID ] && . /etc/hotplug.d/local/$PRODUCT_ID
[ -x /usr/bin/sudo -a -n "$CONSOLEOWNER_HOME" -a \
-f "$CONSOLEOWNER_HOME/.hotplug/$PRODUCT_ID" ] && \
sudo -u $CONSOLEOWNER $CONSOLEOWNER_HOME/.hotplug/$PRODUCT_ID
=============================================================================
=============================================================================
/etc/hotplug.d/local/c76-5-100
#!/bin/bash
# JetFlash 512M
LOGGER="logger -t $(basename $0)"
log_mesg () {
$LOGGER "$@"
}
case $ACTION in
add)
HOTLPUGED_DEV=`awk '!/^#/ && /,kudzu,/ { dev=$1 } END{ print
dev; }' /etc/fstab`
if [ -z "$HOTLPUGED_DEV" ]; then exit 1; fi
MOUNT_DIR=/mnt/jetflash
MOUNT_OPT=noauto,user,kudzu,sync,dirsync,exec,nodev,nosuid,iocharset=cp1251,codepage=866,shortname=winnt
export HOTLPUGED_DEV
export MOUNT_DIR
log_mesg "Known hardware ($PRODUCT) connected as $HOTLPUGED_DEV"
# check if MOUNT_DIR exists
[ -d $MOUNT_DIR ] || mkdir $MOUNT_DIR
# change fstab
TMP=`mktemp /etc/fstab-XXXXX` || ( log_mesg "Can not create tmp file"
&& exit 1 )
awk -v dev=$HOTLPUGED_DEV -v dir=$MOUNT_DIR -v opt=$MOUNT_OPT -- \
'/^\/dev/ { if($1==dev){ $2=dir; $4=opt; } } {print; }
' /etc/fstab > $TMP
[ -s $TMP ] && cat $TMP > /etc/fstab
rm -f $TMP
;;
remove)
log_mesg "JetFlash was unpluged..."
# may be later here will be some actions
;;
esac
=============================================================================
/home/mike/.hotplug/c76-5-100
#!/bin/bash
# JetFlash 512M
if [ "$ACTION" == "add" -a -n "$MOUNT_DIR" ]; then
mount $MOUNT_DIR && logger -t $(basename $0) "JetFlash was mounted at
$MOUNT_DIR by `whoami`"
fi
=============================================================================
/home/mike/.hotplug/4a9-3077-1
#!/bin/bash
# Cannon PowerShot S50
if [ "$ACTION" == "add" ]; then
logger -t $(basename $0) "Start to download images "
DISPLAY=":0" export DISPLAY
XAUTHORITY=/home/mike/.Xauthority export XAUTHORITY
xterm -e "/home/mike/bin/camera_downloader.sh" &
fi;
--
Mike Andreev
Подробная информация о списке рассылки Sisyphus