LINUX.ORG.RU

А запятую во втором случае? И еще: не учтено то, что может быть флешка без разделов.

Посмотри на мои правила для автомонтирования в ЛОРовики. Они работают. Просто замени sed и mkdir на нужное тебе.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

посмотрел, и понял, что сегодня не осилю. но нужно будет вдумчиво почитать. мне как естествознавцу это вельми тяжко взять нахрапом. спасибо за ссылку.

а запятые где ни ставлю- не работают рулесы, хотя на убунту 11.04 второй вариант работал без запятых.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

попробовал так

KERNEL=="sd[a-z]", GOTO="do-disk-rules"
KERNEL!="sd[a-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
KERNEL=="sd[a-z]", GROUP="users"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k"

не болтает.

ratte@BrainEater:~$ cat /usr/bin/boltalka.sh 
#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

FESTIVAL="festival --tts --language russian"

DEVICE=$1
UDEVINFO="udevadm info"

[ -z "$DEVICE" ] && exit
[ -z "$ACTION" ] && exit

function get_device_attr ()
{
        path=`find /sys/devices -name $1`
        echo `$UDEVINFO --attribute-walk --path=$path | grep $2 -m1 | cut -f s16 -d`
}

function get_device_name ()
{
        device=$1

        case $device in
                [0-9]-[0-9])
                        s=`get_device_attr $device "product"`
                        [ -z "$s" ] && echo "устройство"
                ;;
                *)
                        exit
                ;;
        esac
}                                                                                                     
                                                                                                      
function say ()                                                                                       
{
        echo "$1 $2" | $FESTIVAL
        exit
}

name=`get_device_name $DEVICE`

if [ -n "$name" ]; then
        case "$ACTION" in
                add)
                say "$name" "подключен+о"
                ;;
                remove)
                say "$name" "отключен+о"
                ;;
                change)
                say "$name" "информация изменена"
                ;;
        esac
pyometra ★★★★★
() автор топика
Ответ на: комментарий от pyometra

Сделал тестилку:

KERNEL=="sd[a-z]", GOTO="do-disk-rules"
KERNEL!="sd[a-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
KERNEL=="sd[a-z]", GROUP="users"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/bin/mkdir /r"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/bin/mkdir /a"
LABEL="end-of-file"
А у тебя в конце было забыто LABEL, что определилось на этапе теста:
udevadm test --action=add /block/sdi

Директории создаются.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от pyometra

Поздравляю тебя, Шарик:

[ -z "$ACTION" ] && exit
Вот она и не работает.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от pyometra

Еще ты fi в конце забыл

У меня русский язык не работает (без понятия, как его заставить работать), меняю на english, все ОК:

./bolt sda add
что-то талдычит.

А тебе надо вызывать скрипт со вторым аргументом — add или remove

KERNEL=="sd[a-z]", GOTO="do-disk-rules"
KERNEL!="sd[a-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
KERNEL=="sd[a-z]", GROUP="users"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k remove"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k add"
LABEL="end-of-file"

И из скрипта убрать ненужную опцию change

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 3)
Ответ на: комментарий от Eddy_Em

fi не захватил копипастом

cat /usr/bin/boltalka.sh 
#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

FESTIVAL="festival --tts --language russian"

DEVICE=$1
UDEVINFO="udevadm info"

[ -z "$DEVICE" ] && exit
#[ -z "$ACTION" ] && exit

function get_device_attr ()
{
        path=`find /sys/devices -name $1`
        echo `$UDEVINFO --attribute-walk --path=$path | grep $2 -m1 | cut -f s16 -d`
}

function get_device_name ()
{
        device=$1

        case $device in
                [0-9]-[0-9])
                        s=`get_device_attr $device "product"`
                        [ -z "$s" ] && echo "устройство"
                ;;
                *)
                        exit
                ;;
        esac
}

function say ()
{
        echo "$1 $2" | $FESTIVAL
        exit
}                                                                                                     
                                                                                                      
name=`get_device_name $DEVICE`                                                                        

if [ -n "$name" ]; then
        case "$ACTION" in
                add)
                say "$name" "подключен+о"
                ;;
                remove)
                say "$name" "отключен+о"
                ;;
                change)
                say "$name" "информация изменена"
                ;;
        esac
fi

не работает.

cat /etc/udev/rules.d/62-festival.rules
KERNEL=="sd[a-z]", GOTO="do-disk-rules"
KERNEL!="sd[a-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
KERNEL=="sd[a-z]", GROUP="users"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k"
LABEL="end-of-file"

где-то в скрипте наверное проблема.

я в этом вообще не понимаю.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

И для начала надо проверить скрипт: просто запусти его

он же вроде как должен в момент монтирования/размонтирования срабатывать. если просто запустить ничего не происходит.

KERNEL=="sd[a-z]", GOTO="do-disk-rules"
KERNEL!="sd[a-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
KERNEL=="sd[a-z]", GROUP="users"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k remove"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/usr/bin/boltalka.sh %k add"
LABEL="end-of-file"

не работает.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em
/usr/bin/boltalka.sh sda add

так не работает.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

фестиваль работает хорошо. озвучивает всякие погоды. не работает конкретно подключение носителей.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

а как посмотреть где скрипт затыкается? чтоб в терминал сыпал. а то я только про strace знаю, а он что-то адское показывает.

pyometra ★★★★★
() автор топика
Ответ на: комментарий от pyometra

Понавтыкай в скрипт echo перед каждой строчкой, например.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.