📜 ⬆️ ⬇️

[systemd / udev] ppp: correct autostart of the system wide daemon

usb_modeswitch package usually comes with ready udev rules for automatic modem mode switching. ppp , independently of it, besides itself, includes a service for demonization. These configurations are independent of each other.



If you use them at the same time, a conflict may arise : pppd starts before udev switches the usb_modeswitch -J -J.


You can leave Restart=on-failure with RestartSec=5s , but is it sports?


"Just dying to be saved ..." Converge


To begin, edit usb_modeswitch.conf - DisableSwitching=yes . This file is implicitly used by the "default" rules - they will not be useful to us, although they will not interfere.


Now - systemctl disable ppp@….service . We will not need to multi-user.target unit from multi-user.target ; [Install] no longer useful.


It remains to make it all work again - in a different way.


“Beaten awake to murder again.” PsyOpus


The new udev rule is intended to solve the problem posed earlier: it must first communicate the usb_modeswitch task, and only then turn to systemd.


In the USB subsystem, a device can be defined with two attributes-identifiers: idVendor and idProduct . They can be seen lsusb-ohm - they are located respectively after the "ID".


This almost corresponds to the first line of the new configuration:


 $ su - $ cd /etc/udev/rules.d $ cat > 20-provider-modem.rules <<< … 

 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="…", ATTR{idProduct}=="…", RUN+="/usr/sbin/usb_modeswitch -v $attr{idVendor} -p $attr{idProduct} -J" 

- it is not necessary to specify the number system ( 0x ).


Now we turn to the consideration of another subsystem - now ttyUSB0 important for us. Again, turn to your favorite text editor:


 $ cat >> 20-provider-modem.rules <<< … 

 SUBSYSTEM=="tty", KERNEL=="ttyUSB0", TAG+="systemd", ENV{SYSTEMD_WANTS}="ppp@provider.service" 

- here udev informs systemd at the appropriate time about the possibility of running ppp@ .


Finally:


 $ udevadm control --reload 

“Well, you apply ...” TesseracT


I was once very interested in the intelfx conclusion about the relationship between systemd and udev :


udev and systemd are awesome powerful frameworks that complement each other.

systemd is based on dependency model: execute X if Y is available.
udev - on the event model: when Y becomes available, execute X.

The connection of userspace with kernel is really underlined very expressively, and this can not fail to impress. The example shown — perhaps a little promising or mediocre — wholly reveals the potential of this tool.


')

Source: https://habr.com/ru/post/311268/


All Articles