# Execute on USB insert (Italiano)

The factual accuracy of this article or section is disputed.

Reason: As per Udev#Writing_udev_rules, mount should not be executed from udev rules. The linked USB mount rule section is missing, so the instructions are incomplete. (Discuss in Talk:Execute on USB insert (Italiano)#)

Supponendo di voler eseguire un certo programma all’inserimento di una pennina USB. Personalmente, ho aggiunto questa caratteristica perché mi ero stufato dei blocchi del pc dove tastiera e mouse sono inservibili(ed anche le scorciatoie da tastiera non funzionano).

Quindi ho aggiunto una misura di sicurezza, in modo che solo una chiavetta USB contenente la giusta chiave possa eseguire il programma.

## Installazione

Mettere una copia dello script `exdongle` (che trovate più in basso) nella cartella degli eseguibili(uno dei percorsi indicati nella variabile d’ambiente `$PATH` comunemente è consigliato usare `/usr/bin/`).

Aggiungere la seguente linea alla regola di mount delle periferiche USB (modificarla a seconda della propria configurazione):

    ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"

Eseguire l’opzione di configurazione, per esempio

    exdongle conf -k "$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM" -p "-10" -s "on"

Questo imposta la configurazione con chiavi casuali(solo con le chiavi giuste potranno essere eseguiti sul computer i programmi o gli script), e la priorità di esecuzione a -10

## Configurare una pennina USB

Per prima cosa, scrivere lo script che verrà inserito all’inserimento della pennina.

Ad esempio:

    test.sh

    #!/bin/sh

    DISPLAY=:0 xterm

Adesso eseguire nuovamente `exdongle` utilizzando l'opzione `new`:

    exdongle new <punto di mount della pennina USB> test.sh

Ora, ogni volta che viene inserita la pennina, una finestra di terminale, lanciata dall’utente root verrà eseguita sul display `:0`. Questo può essere utile per scopi amministrativi.

## Sicurezza

Questa procedura non garantisce la sicurezza del sistema, ed è quindi consigliato utilizzarla solo su pc domestici.

## exdongle script

    /usr/bin/exdongle

    #!/bin/sh

    # exdongle mkexdongle

    ###############################################################################

    CONFFILE="/etc/exdongle.conf"

    ###############################################################################

    function usage() {

     echo ""
     echo "USAGE: $0 new <DIR> <PROG>"
     echo "       $0 del <DIR>"
     echo "       $0 conf [-k KEY] [-p PRIORITY] [-s SWITCH]"
     echo "       $0 run <DIR>"
     echo ""
     echo "  new:"
     echo "    DIR <S>:    The directory on the dongle to execute"
     echo "    SCRIPT <S>: The script to run on dongle"
     echo ""
     echo "  del:"
     echo "    DIR [S]: The directory on the dongle to execute"
     echo ""
     echo "  conf:"
     echo "    -k <S>: specify key"
     echo "    -p <N>: priority to run script at"
     echo "    -s <on|off>: Activate or deactivate exdongle"
     echo ""
     echo "  run:"
     echo "    DIR <S>: Directory to find script in"
     echo ""

     exit 0

    }

    ###############################################################################

    function new() {

     if [ ! "$#" -eq 3 ]; then
        usage $@;
        exit 1;
     fi

     DIR="$2"
     PROG="$3"
     PLOC="$DIR/.$(hostname).$key"

     rm "$PLOC" &> /dev/null
     cp "$PROG" "$PLOC"

     exit 0

    }

    ###############################################################################

    function del() {

     DIR="$2"
     PLOC="$DIR/.$(hostname).$key"

     if [ -e "$PLOC" ]; then
        rm -f "$PLOC"
     fi

     exit 0

    }

    ###############################################################################

    function conf() {

     shift
     while getopts "k:p:s:" optname; do
        case "$optname" in
         k)
           key="$OPTARG"
           ;;
         p)
           priority="$OPTARG"
           ;;
         s)
           if [ "$OPTARG" = "on" ] || [ "$OPTARG" = "off" ]; then
             switch="$OPTARG"
           fi
           ;;
        esac
     done

     echo "# exdongle configuration file" > "$CONFFILE"
     echo "key=\"$key\"" >> "$CONFFILE"
     echo "priority=\"$priority\"" >> "$CONFFILE"
     echo "switch=\"$switch\"" >> "$CONFFILE"

     chmod 0600 "$CONFFILE"

     exit 0

    }

    ###############################################################################

    function run() {

     if [ ! "$switch" = "on" ]; then
        exit 0
     fi

     if [ ! "$#" -eq 2 ]; then
        usage $@
        exit 1
     fi

     DIR="$2"
     PLOC="$DIR/.$(hostname).$key"
     ELOC="/tmp/.exdongle.prog"

     if [ ! -e "$PLOC" ]; then
        echo "No executable file found!" 1>&2
        exit 0
     fi

     rm -f "$ELOC"
     cp "$PLOC" "$ELOC"
     chmod 0500 "$ELOC"
     nice -n "$priority" $ELOC
     rm -f "$ELOC"
     exit 0

    }

    ###############################################################################

    if [ ! "$UID" == "0" ]; then
     echo "You must be root to perform this operation" 1>&2
     exit 1
    fi

    if [ -e "$CONFFILE" ]; then
     . "$CONFFILE"
    fi

    case "$1" in
     new)
        new "$@"
        ;;
     del)
        del "$@"
        ;;
     conf)
        conf "$@"
        ;;
     run)
        run "$@"
        ;;
     *)
        usage "$@"
        ;;
    esac

    exit 0

## Note

Alcune note:

- I programmi/script usati dovrete fornirveli autonomamente, l’unico file che vi verrà fornito sarà lo script `exdongle`.

Category:

- Hardware detection and troubleshooting (Italiano)

Hidden category:

- Pages or sections flagged with Template:Accuracy