Re: [systemd] Service conditionné sur l'existence d'un fichi…

Top Page

Reply to this message
Author: Raphaël Dorado
Date:  
To: guilde
Subject: Re: [systemd] Service conditionné sur l'existence d'un fichier
J'avais pas assez creusé, en changeant 'tty' pas 'usb', j'obtiens ceci en
insérant/retirant ma clé :

$ udevadm monitor -u -s usb
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [320663.780360] add      /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1 
(usb)
UDEV  [320663.802061] add 
/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1:1.0 (usb)
UDEV  [320663.829537] bind 
/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1:1.0 (usb)
UDEV  [320663.849983] bind     /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1 
(usb)
UDEV  [320671.587192] unbind 
/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1:1.0 (usb)
UDEV  [320671.596726] remove 
/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1:1.0 (usb)
UDEV  [320671.606377] unbind   /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1 
(usb)
UDEV  [320671.627045] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1 
(usb)


Merci pour le retour !

Le 10/11/2023 à 11:02, Edgar Bonet a écrit :
> 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

>