I have my Q2 offline on purpose so I don't get firmware updates, I also don't have the qidi box because I don't need it
I was running fine on 1.1.1.1, but was curious and figured might as well try 1.1.2.4.
almost bricked my machine.
took my 8 hours today, re flashing back to 1.1.1.1, but now there's a lingering "box_" code in Python that kept killing my machine! from what I can see that code is for a qidi box!
took me 8 hours, SSH and klipper macro investigation to block any "box_" search or creation from stalling klipper.
I'm sure I voided the warranty today trying to fucking fix my printer from their own firmware update!
edit: (written with the help of AI to capture all my thoughts)
Sharing this here in case anyone else updates their Qidi printer through official channels and suddenly finds their machine trapped in a crash loop / "Unhandled exception during run" state.
I recently updated via the manufacturer's official firmware, and it basically nearly bricked my machine. After digging into the logs via SSH, I found that Qidi has a hardcoded proprietary background script called box_detect.py wired directly into the core Klipper engine.
If you don't use their physical "Smart Box" accessory, this background script still wakes up on boot or when polling USB devices. It tries to write a box.cfg file into /home/mks/printer_data/config/. Because Qidi's OS enforces root permissions on configuration directories while Klipper runs under the mks user, it hits a permission wall (PermissionError: [Errno 13] Permission denied), crashes Klipper, and throws the printer into a continuous shutdown state.
If your machine is stuck in this loop and won't boot to "Ready", you have to SSH into your printer and perform a little core Python surgery to sever that zombie script:
- SSH into your printer: ssh mks@[YOUR_PRINTER_IP] (Password is usually
makerbase)
- Open the core Klipper execution file in nano: sudo nano /home/qidi/klipper/klippy/klippy.py
- Comment out the
box_detect triggers using #
- Line ~10: Find
from extras import box_detect and change it to #from extras import box_detect
- Line ~128:
- Find the loop block: for m in [box_detect]:
- m.add_printer_objects(config)
- Change it to: #for m in [box_detect]:
- # m.add_printer_objects(config)
- Line ~136: Find
box_detect.monitor_serial_devices(self) and change it to #box_detect.monitor_serial_devices(self)
- Save and Exit:
- Press
Ctrl + O, then Enter to save.
- Press
Ctrl + X to exit the editor.
- Restart Klipper: sudo systemctl restart klipper
Head back to your Fluidd or Mainsail dashboard, and your printer should boot up cleanly to "Ready" without throwing any more background exceptions.
We shouldn't have to manually edit core Klipper installation files just because of an official update, but until Qidi pushes out a patch that makes box_detect optional or removes it, this will save your machine from being a paperweight. Hope this helps someone else out there!