Авто-рестарт Klipper при подключении к хосту

nvn
Идет загрузка
Загрузка
07.07.2020
1154
5
печатает на Anycubic Predator
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

3
Статья относится к принтерам:
Anycubic Predator

Надоело каждый раз при включении принтера делать ручной перезапуск сервиса. Сделал скрипт для автоматического перезапуска сервиса Klipper-а при включении питания, либо при подключении принтера по USB.

Для начала нам необходимо установить простенький планировщик at

sudo apt install at

далее запустим его и активируем автозапуск

sudo systemctl start atd
sudo systemctl enable atd

Теперь отключаем принтер, его питание или USB кабель и в консоли запускаем udev монитор с фильтром по USB:

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, копируем 1d50/614e/100

Для завершения мониторинга нажимаем Ctrl+C

Далее создаем правило для нашего устройства

sudo nano /etc/udev/rules.d/99-klipper.rules

и вносим следующее содержимое, где /home/pi/ ваша пользовательская папка, а 1d50/614e/100 в соответствующем месте:

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

#ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="1d50/614e/100", RUN+="/bin/systemctl --no-block stop klipper.service"

(последнюю строку можно раскомментировать если необходимо останавливать сервис klipper-а)

Сохраним файл и выйдем при помощи Ctrl+x

Перегрузим правила:

udevadm control --reload-rules

Далее создадим скрипт перезапуска в папке пользователя:

sudo nano ~/klipper-udev.sh

внесем следующее содержимое:

#!/bin/sh

sleep 1

systemctl --no-block restart klipper.service

exit 0

(если ставили Klipper+DWC при помощи скрипта от manu7irl, то строка для первого принтера будет такая systemctl --no-block restart klipper-0.service)

Сохраним файл и выйдем при помощи Ctrl+x

И сделаем его исполняемым:

chmod +x klipper-udev.sh

Всё. Теперь при подключении принтера у вас через 3-4 секунды должен быть рабочий набор, если установлен DWC, он будет уже подключен.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

3
Комментарии к статье

Комментарии

08.07.2020 в 04:54
0

а нахоена токие костыли если малинка работает  от одного питания с принтером

08.07.2020 в 06:16
2

не у всех малинка работает от одного питания с принтером.

например у меня апельсина работает 24x7, а принтер я выключаю, чтобы экраном не светил.


так же частый сценарий, когда принтер включается/выключается с малины удаленно

08.07.2020 в 06:23
0

аt и скрипт в /home как бы лишние. если скрипты для запуска/остановки сервиса адекватные, достаточно одного systemctl

08.07.2020 в 09:11
0

Я не против, предложите более короткий вариант. Но заработало только так,  т.к. udev прибивает всё что запускает почти сразу. Если бы не нужен был sleep, то да, всё работает, но в тот момент когда сервис клиппера уже перезапускается, соединение еще не готово. 

nvn
08.07.2020 в 10:57
0

когда сервис клиппера уже перезапускается, соединение еще не готово

тогда да, если стартовые скрипты клиппера не трогать и systemd device unit не использовать, то проще через at

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Теория вычисления стоимости изделия 3D печати

Всякие полезности

Первые впечатления об eSUN Hard-Tough Resin.

Радиоуправляемая авиамодель распечатанная на 3Д принтере

Лишние поддержки в фотон с

О программном выборе режима StealthChop/SpreadCicle у драйверов TMC (по UART/SPI) в Marlin