Udev festival - dim13/lor GitHub Wiki

Небольшой скрипт, который молвит человеческим голосом при подключении какого-либо usb устройства или компакт диска. Необходим festival и, естественно, udev.

Скрипт boltalka.sh помещаем куда-нибудь в PATH, а 62-festival.rules - в /etc/udev/rules.d (в зависимости от дистрибутива это место может отличаться). Можно добавлять свои фразы для других устройств, для этого надо смотреть на вывод

udevinfo -a -p `udevinfo -q path -n /dev/устройство`

и писать соответствующие правила в 62-festival.rules Есть хороший мануал по настройке udev.

boltalka.sh

#!/bin/bash

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

FESTIVAL="festival --tts"

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 2 -d '"'`
}

function get_device_name ()
{
    device=$1

    case $device in
        [0-9]-[0-9])
            s=`get_device_attr $device "product"`
            [ -z "$s" ] && echo "device" || echo "$s"
        ;;
        sr*)
            echo "optical drive"
        ;;
        [sh]d*)
            s=`get_device_attr $device "KERNEL"`
            echo "$s drive"
        ;;
        *)
            exit
        ;;
    esac

}
function say ()
{
    echo "$1 $2" | $FESTIVAL
    exit
}

name=`get_device_name $DEVICE`

if [ -n "$name" ]; then
    case "$ACTION" in
        add)
        say "$name" "was found"
        ;;
        remove)
        say "device" "has been removed"
        ;;
        change)
        say "$name" "was changed"
        ;;
    esac
fi

62-festival.rules

SUBSYSTEMS=="usb", RUN+="/usr/bin/boltalka.sh %k"
SUBSYSTEMS=="block", RUN+="/usr/bin/boltalka.sh %b"