ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
From: Mike Andreev <andreev@d902.iki.rssi.ru>
To: sisyphus@altlinux.ru
Subject: [sisyphus] hotplug
Date: Thu, 9 Dec 2004 20:57:16 +0300
Message-ID: <200412092057.17441.andreev@d902.iki.rssi.ru> (raw)


Здравствуйте,

Мои письма почему-то до 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

             reply	other threads:[~2004-12-09 17:57 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-09 17:57 Mike Andreev [this message]
2004-12-09 18:10 ` Mike Andreev
2004-12-09 19:39   ` Anton Farygin
2004-12-10  8:48     ` Mike Andreev
2004-12-10 13:39       ` Anton Farygin
2004-12-10 16:13         ` Andrey Rahmatullin
2004-12-10 16:55           ` Andriy Dobrovol's'kii
2004-12-10 17:27             ` Mikhael Korneev
2004-12-11 11:45               ` [sisyphus] 2.6.* рулез или маздай? Denis Smirnov
2004-12-11 11:46                 ` [sisyphus] " Michael Shigorin
2004-12-10 21:24           ` [sisyphus] hotplug Aleksandr Blokhin
2004-12-10 21:47             ` Andrey Rahmatullin
2004-12-12  9:45             ` Alexey Morozov
2004-12-12 18:10               ` [sisyphus] hotplug Konstantin A. Lepikhov
2004-12-12 20:40                 ` Aleksandr Blokhin
2004-12-13  9:47                   ` Ivan Fedorov
2004-12-13  9:49                 ` Ivan Fedorov
2004-12-13 11:01                   ` Konstantin A. Lepikhov
2004-12-13 11:19                     ` Ivan Fedorov
2004-12-13 14:34                       ` Konstantin A. Lepikhov
2004-12-13 14:47                         ` Ivan Fedorov
2004-12-13 17:22                           ` Konstantin A. Lepikhov
2004-12-13 17:42                             ` Ivan Fedorov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200412092057.17441.andreev@d902.iki.rssi.ru \
    --to=andreev@d902.iki.rssi.ru \
    --cc=sisyphus@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git