# Demarrage du service local aléatoire

## Anard

Bonjour,

J'ai défini deux scripts dans /etc/local.d pour permettre le réveil du PC par la souris ou le clavier et pour réveiller le PC par wakeonlan :

```
anard@imack ~ $ ls -l /etc/local.d/

total 12

-rw-r--r-- 1 root root 652 21 déc.  01:14 README

-rwxr-xr-x 1 root root 185 26 juil.  2021 wakeup-by-input.start

-rwxr-xr-x 1 root root  82 11 déc.  14:49 wol.start

anard@imack ~ $ cat /etc/local.d/*.start

#!/bin/bash

# wake up from mouse click

echo enabled > /sys/bus/usb/devices/3-11/power/wakeup

# wake up from keyboard key (BT call)

echo enabled > /sys/bus/usb/devices/3-12/power/wakeup

#!/bin/bash

# start listening for wakeonlan magic packets

ethtool -s enp2s0 wol g

```

Ça fonctionne plutôt bien dans l'ensemble mais parfois il semble que non. Je n'ai pas pu réveiller le PC par la souris ce soir par exemple :

```
anard@imack ~ $ cat /sys/bus/usb/devices/*/power/wakeup

disabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

anard@imack ~ $ rc-service local status

 * status: started

```

On voit bien que ça ne fonctionne pas, pourtant le service local est bien démarré.

Simplement en redémarrant le service, ça fonctionne à nouveau :

```
anard@imack ~ $ sudo rc-service local restart

Mot de passe : 

 * Stopping local ...                                                     [ ok ]

 * Starting local ...                                                     [ ok ]

anard@imack ~ $ cat /sys/bus/usb/devices/*/power/wakeup

disabled

disabled

enabled

enabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

```

Comment faire pour que ça fonctionne à chaque démarrage ? J'imagine que c'est un problème d'ordre de démarrage des services OpenRC, mais je ne sais pas comment régler ça ni à quel moment mon service local doit être démarré pour fonctionner correctement...

Merci pour votre aide.

----------

## xaviermiller

Bonjour,

Es-tu bien sûr que ces valeurs ne sont pas changées par autre chose par après? Écris dans un fichier .log durant l'exécution du script pour voir si tout se passe bien.

Est-ce que ces fichiers sont bien exécutables ? Est-ce qu'ils fonctionnent si tu les fais appelles manuellement ?

Le WOL, je l'active à l'arrêt de mes machines (scripts *.stop). Peut-être dois-tu aussi le faire pour ta souris et ton clavier.

----------

## El_Goretto

Bonjour à tous,

Même piste que xaviermiller, il faudrait regarder de plus près l'exécution des scripts, pour les rendre "robuste": à minima une valeur de retour adéquate et des logs.

Dans le même registre, est-ce que tu es sûr que le path vers tes périphériques USB est robuste peu importe l'état de la machine (cad d'un boot à l'autre, si quelqu'un débranche et rebranche ailleurs, etc.).

----------

## xaviermiller

 *El_Goretto wrote:*   

> Dans le même registre, est-ce que tu es sûr que le path vers tes périphériques USB est robuste peu importe l'état de la machine (cad d'un boot à l'autre, si quelqu'un débranche et rebranche ailleurs, etc.).

 

Bien vu! Je te propose de créer une règle udev pour garantir la stabilité d'accès, par exemple en créant un alias via un lien symbolique.

----------

## Anard

Bonsoir et merci.

Le script lancé manuellement fonctionne bien puisqu'en relançant local par 

```
# rc-service local restart
```

 ma souris et mon clavier recommencent à réveiller le PC.

J'ai quand même modifié le script pour signaler une éventuelle erreur :

```
$ cat /etc/local.d/wakeup-by-input.start 

#!/bin/bash

write_conf() {

   local file="/sys/bus/usb/devices/$1/power/wakeup"

   echo enabled > "$file"

   if [ $? -gt 0 ]; then

      logger local.d Impossible to write to $file

      exit 1

   fi

   return 0

}

# wake up from mouse click

write_conf 3-11

# wake up from keyboard key (BT call)

write_conf 3-12

exit 0
```

En effet, si je change de port USB, ça ne fonctionnera plus mais ça ne devrait pas arriver (et j'en suis conscient donc je saurais quoi faire).

Et puis, créer une règle udev, j'ai peur que ce ne soit pas (encore) de mon niveau  :Smile: 

Je ne comprends pas : si je lance ces scripts lors de l'arrêt (*.stop) les valeurs seront correctement enregistrées lors du redémarrage ?

Merci.

----------

## Anard

Aussi, je comprends mal les différences entre les différents modes de veille.

Dans l'invite de déconnexion d'Xfce, celui-ci propose "Mise en Veille", "Mise en Veille Hybride" et "Mise en Veille prolongée"

Quelles différences entre ces 3 modes ?

En revanche dans les préférences du Gestionnaire d'Alimentation, il n'y a plus le mode "hybride". Mes réglages demandent une mise en veille simple au bout de 45 minutes d'inactivité.

Est-ce que quelque chose d'autre pourrait déclencher une veille plus profonde du système quand je suis parti toute la journée ? Je le soupçonne car parfois quand je reviens, des applications lancées à mon départ ont été quittées. Ce qui pourrait peut-être expliquer que ce mode supprime également mes réglages faits dans les scripts wakeup-on-input.start et wol.start

Merci pour vos lumières.

----------

## El_Goretto

 Mise en Veille: suspend to RAM

 Mise en Veille prolongée: suspend to Disk

L'hybride... je n'ai trouvé que des références à de la doc Microsoft, relative à du windows.

----------

## netfab

Salut,

Le mode hybride, c'est un mix des deux autres modes.

 *Quote:*   

> 
> 
> Suspend to both
> 
>     A hybrid of the aforementioned methods, sometimes called hybrid suspend. Saves the machine's state into swap space, but does not power off the machine. Instead, it invokes usual suspend to RAM. Therefore, if the battery is not depleted, the system can resume from RAM. If the battery is depleted, the system can be resumed from disk, which is much slower than resuming from RAM, but the machine's state has not been lost.
> ...

 

https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate

----------

## Anard

Merci. et donc comment agit le service local ? Les scripts .stop sont lancés lors d'un mode de mise en veille ? D'après la doc, je croyais comprendre qu'ils n'étaient lancés que lors de l'extinction.

----------

## netfab

 *Anard wrote:*   

> Les scripts .stop sont lancés lors d'un mode de mise en veille ?

 

Je ne crois pas.

 *Anard wrote:*   

> D'après la doc, je croyais comprendre qu'ils n'étaient lancés que lors de l'extinction.

 

C'est normalement le cas.

Active l'option suivante dans /etc/rc.conf :

```

rc_logger="YES"

```

Puis, tu crées le fichier /etc/conf.d/local avec

```

rc_verbose=yes

```

Lorsque ton problème arrive, regarde le contenu de /var/log/rc.log pour voir si des erreurs apparaissent lors du démarrage du script *.start.

----------

## Anard

Bien.

Au démarrage ce matin, le clavier n'est pas activé pour le réveil du PC. Il semble qu'au moment où le service local est lancé, tous les périphériques USB ne sont pas configurés: 

```
rc default logging started at Sun Feb  6 09:21:20 2022

 * Starting automounter ...

 [ ok ]

 * Starting dbus ...

 [ ok ]

 * Starting bluetooth ...

 [ ok ]

 * Starting sysklogd ...

 [ ok ]

 * Starting cronie ...

 [ ok ]

 * Starting cupsd ...

 [ ok ]

 * Starting DHCP Client Daemon ...

 [ ok ]

 * Mounting network filesystems ...

 [ ok ]

 * Setting up lightdm ...

 [ ok ]

 * Initializing sensors ...

 [ ok ]

 * Starting ProFTPD ...

 [ ok ]

 * Starting sshd ...

 [ ok ]

 * Starting local ...

 *   Executing "/etc/local.d/wakeup-by-input.start" ...

/etc/local.d/wakeup-by-input.start: ligne 5: /sys/bus/usb/devices/3-12/power/wakeup: Aucun fichier ou dossier de ce type

 *   Execution of "/etc/local.d/wakeup-by-input.start" failed.

 [ !! ]

 *   Executing "/etc/local.d/wol.start" ...

 [ ok ]

 [ !! ]

rc default logging stopped at Sun Feb  6 09:21:22 2022

anard@imack ~ $ cat /sys/bus/usb/devices/3-

3-0:1.0/  3-1:1.0/  3-11:1.2/ 3-12:1.0/ 3-4:1.1/  3-7:1.0/  3-7:1.3/  

3-1/      3-11:1.0/ 3-11:1.3/ 3-4/      3-4:1.2/  3-7:1.1/  3-8/      

3-11/     3-11:1.1/ 3-12/     3-4:1.0/  3-7/      3-7:1.2/  3-8:1.0/  

anard@imack ~ $ cat /sys/bus/usb/devices/*/power/wakeup

disabled

disabled

enabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

disabled

```

----------

## netfab

C'est pour cela que tu devrais écrire une règle udev pour chacun de tes péripériques. Ce n'est pas si compliqué.

Udev lancera ta commande au moment où un périphérique sera reconnu et disponible.

Un petit tuto ici : https://linuxconfig.org/tutorial-on-how-to-write-basic-udev-rules-in-linux

----------

## Anard

Merci je vais étudier cette voie. En attendant, j'ai modifié mon script pour attendre l'arrivée du périphérique :

```
#!/bin/bash

wake_by_usb() {

   while [ $# -gt 0 ]; do

      local file="/sys/bus/usb/devices/$1/power/wakeup"

      local count=0

      while

         [ ! -f "$file" ] && [ $count -lt 5 ]

      do sleep .5 && let count+=1; done

      [ -f "$file" ] && echo enabled > "$file" || logger local.d : File $file not found

      shift

   done

   return 0

}

# wake up from mouse click

wake_by_usb 3-11

# wake up from keyboard key (BT call)

wake_by_usb 3-12

exit 0
```

----------

## Anard

Voici ma règle, pour le clavier, c'est un clavier BT et BCM20702A0 correspond au nom de l'adaptateur

Si j'ai bien compris, avec ce code je peux utiliser une autre souris et qu'elle soit reconnue comme telle à condition que son attribut "product" se termine par "mouse"

```
anard@imack ~ $ cat /etc/udev/rules.d/70-mouse-keyboard-wakeup.rules 

ACTION=="add" \

, ATTR{product}=="BCM20702A0|[A-Za-z -_]*[mM]ouse" \

, ATTR{power/wakeup}="enabled"

```

----------

