Bonjour !
Raphaël Dorado a écrit :
> udevadm monitor \
> | egrep --line-buffered "UDEV.+sdd1" \
> | while $(true)
> do
> read event
> event=$(echo "$event" | cut -d' ' -f4 )
> echo $event
> done
>
> $event est 'add' quand j'insère la clé
> $event est 'remove' quand je retire la clé
Tiens, intéressant ! De mon côté, je ne peux pas grepper le nom complet
du device, car il change à l'occasion (ttyUSB0 ou ttyUSB1). Mais je vois
que je peux demander à udevadm de ne me montrer que les événements UDEV
du sous-système tty. J'ai fait un essai en branchant un câble FTDI (vu
comme /dev/ttyUSB0), en ouvrant le port en écriture, et en tapant
udevadm monitor -u -s tty
Quand je débranche et rebranche le câble, je vois ceci :
UDEV [344267.700283] remove /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.3/1-5.3:1.0/ttyUSB0/tty/ttyUSB0 (tty)
UDEV [344270.921765] add /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.3/1-5.3:1.0/ttyUSB1/tty/ttyUSB1 (tty)
Je crois que je vais essayer de me baser sur ça. Ci-dessous la version
préliminaire du script que je vais essayer.
Merci !
Edgar.
-- 8< ------------------------------------------------------------------
#!/bin/bash
port_id=usb-FTDI_UM232R_USB__-__Serial_A156DVPL-if00-port0
port=/dev/serial/by-id/$port_id
nc_pid="" # PID of netcat
# Start the netcat process and record its PID.
start_netcat() {
stty -F $port raw -echo 115200
nc -k -n -l -p 1234 < $port > $port &
nc_pid=$!
}
# Start or stop netcat, as required.
refresh() {
# Start netcat when the port shows up.
if [ -e "$port" ]; then
if [ -n "$nc_pid" ]; then
echo "killing netcat (unexpectedly alive)"
kill $nc_pid
fi
echo "starting netcat"
start_netcat
fi
# Stop netcat if it is running and the port vanishes.
if [ ! -e "$port" -a -n "$nc_pid" ]; then
echo "stopping netcat"
kill $nc_pid
nc_pid=""
fi
}
# Initial setup, in case the port is already here.
refresh
# Watch for udev adding or removing ttys.
udevadm monitor -u -s tty | grep --line-buffered '(tty)' | \
while true; do
read line # read and discard
refresh
done