Автоперезапуск сервиса klipper после включения принтера

Если у вас как и у меня хост где крутится сервис klipper стоит на машине у которой питание раздельное с 3d-принтером, то скорее всего вы при включении принтера часто сталкиваетесь с тем, что при входе в вебинтерфейс видите такую картинку:

Чтобы при запуске принтера сервис сразу его видел — необходимо проделать несколько манипуляций.

За основу я взял статью по адресу: https://3dtoday.ru/blogs/nvn/avto-restart-klipper-pri-podklyuchenii-k-khostu
Однако учитывая что там несколько косяков, а искать каждый раз при переустановке системы эту статью мне лень, я решил запилить шпаргалку.

Итак. Первое что делаем — ставим маленький планировщик at

sudo apt install at
sudo systemctl start atd
sudo systemctl enable atd

Далее нам надо узнать ID устройства появляющегося в системе при включении принтера. Запускаем монитор udev

udevadm monitor --kernel --property --subsystem-match=usb

И включаем принтер. После его появления в системе монитор выдаст вот такой лог:

KERNEL[458650.175439] add /devices/pci0000:00/0000:00:1d.2/usb8/8-1 (usb)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb8/8-1
SUBSYSTEM=usb
DEVNAME=/dev/bus/usb/008/029
DEVTYPE=usb_device
PRODUCT=1d50/614e/100
TYPE=2/0/0

BUSNUM=008
DEVNUM=029
SEQNUM=367774
MAJOR=189
MINOR=924

Нам требуется значение константы PRODUCT

Создаем файл

sudo nano /usr/lib/udev/rules.d/99-klipper.rules

В него добавляем:

ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="1d50/614e/100", RUN+="/usr/bin/at -M -f /home/mirivlad/bin/klipper-udev.sh now"

Сохраняем и перезагружаем правила:

sudo udevadm control --reload-rules

Далее создаем файл который будет перезапускать нам сервис:

nano /home/mirivlad/bin/klipper-udev.sh

В него добавляем:

#!/bin/bash
sleep 5
sudo systemctl --no-block restart klipper.service
exit 0

Сохраняем и даем права запуска файла:

chmod +x /home/mirivlad/bin/klipper-udev.sh

Поделиться ссылкой: