| Firmware base & current version (Klipper fork / Marlin fork / proprietary) | Klipper (QIDI fork, base ≈0.12.x) + Moonraker (QIDI fork) + Fluidd + Crowsnest, on Debian 11 bullseye. Not Marlin, not proprietary. Latest field version seen: 01.01.02.04 (2026-08); wiki documents to V01.01.02.03. Sub-firmware at.04: MCU 02.01.01.09, toolhead 02.02.01.08, Box 02.03.01.13. GitHub source releases: Q2_V1.1.0 (2026-01-05), Q2_V1.1.1 (2026-01-19) | 1 source- github.com/QIDITECH/QIDI_Q2 (README: "QIDI Q2 is a 3D printer that uses Klipper as its foundation"; releases list); firmware/config/printer.cfg (whole file is stock Klipp · 2026-08 · local
|
|---|
| Source code availability (repos, GPL compliance status, last update date) | Partial, and materially non-compliant. github.com/QIDITECH/QIDI_Q2 (GPL-3.0, created 2026-01-05 — i.e. ~4.5 months after the printer shipped — last push 2026-01-19, two commits) contains klipper/klippy/ (Python host), fluidd/, part of moonraker/, and config/. It does not contain the MCU firmware source (src/, Makefile,.config), and 10 klippy/extras modules ship as compiled aarch64 binaries: air.cpython-39-…so (the probe), heater_air_core.cpython-39-…so (the chamber heater controller), cs1237.…so, hx711.…so, box_detect.so, box_extras.so, box_rfid.so, box_stepper.so, buttons_irq.so, aht20_f.so. QIDITECH/klipper has branches only for PLUS4/Q1_Pro/main (last real commit 2023) — no Q2 branch | 1 source- github.com/QIDITECH/QIDI_Q2 (tree at 3f6bcc8, 1033 blobs: 726 fluidd, 216 klipper, 71 moonraker, 13 config, 5 other, + LICENSE + README; 1055 total tree entries including · 2026-08 · local
|
|---|
| Root/SSH access: possible? official or community method | Yes. The vendor-documented path is mks / makerbase + sudo su, and that is the only path anyone has demonstrated on a Q2. QIDI's own wiki walks users through connecting with "any SSH connection software" and logging in with user mks, password makerbase, then running sudo apt install …; sudo su from there gives a full root shell. Whether you can SSH in *directly as root* is on the Q2 — the one reviewer who published transcripts says he could not, but explicitly because the root password was unknown to him, not because he showed the login refused | 1 source- wiki.qidi3d.com/en/Memo/System-Time-Modification ("using any SSH connection software to access the printer's LINUX system … Please log in with mks and password: makerbase · 2026-08 · local
|
|---|
| Moonraker / Mainsail / Fluidd or other open API available (stock vs after mods)? | All stock, no mods needed. Moonraker listens on 0.0.0.0:7125 with trusted_clients covering 10/8, 127/8, 169.254/16, 172.16/12, 192.168/16, fe80::/10, ::1, plus [octoprint_compat], [history], [file_manager] enable_object_processing: True and [timelapse]. Fluidd is the shipped web UI (QIDI-modified build v1.30.4 / "1.30.5-ab46ef6"), reachable on the printer IP and on port 10088. Mainsail, Mobileraker, Obico-style clients and KIAUH all install fine | 2 sources |
|---|
| Notable community firmware/mods (names, repos, what they add) | Two active mainline-Klipper projects, and one notable absence. (1) MisterSheikh/Qidi_Q2_Mainline_Klipper — GPL-3.0, created 2026-02-25, 57 stars, pushed 2026-08-21: a patchset giving mainline Klipper on stock Q2 electronics (GD32F425 USB CDC fix, GD32F425 MCU temperature without crashing, Katapult builds, GD32F303 SPI2 mapping for hardware-SPI MAX6675, CS1237 integrated into mainline load_cell/load_cell_probe, optional 200 MHz/120 MHz overclock builds; pinned to Klipper 9c1ae230eaebd5ec4df76d5a87537e2f35defab0). (2) n3oney/qidi-q2-klipper — "mainline klipper, kalico, katapult on the Qidi Q2, without an ST-Link", created 2026-07-29, pushed 2026-08-21. (3) 53Aries/klipper branches Q2, Dev-Q2, feature/gd32f425-support. FreeDi does *not* support the Q2 | 1 source- github.com/MisterSheikh/Qidi_Q2_Mainline_Klipper (README + docs/config_changes.md; API metadata: stars 57, created 2026-02-25T13:45:39Z, pushed 2026-08-21T00:40:29Z, GPL- · 2026-08 · local
|
|---|
| Firmware update mechanism (OTA/USB) & update cadence history | Two paths. *OTA:* screen → "Check for updates" → download and apply. *Offline:* put a QD_Update folder at the root of a USB stick containing QD_Q2_SOC (installed via apt) and optionally QD_Q2_MCU, QD_Q2_THR; insert into the screen's USB-A port; after success the files are renamed.bak and an offline_update_log-YYYYMMDD_HHMMSS.txt is written. Cadence observed in the wild: 1.1.1 → 1.1.1.1 (by 2026-02) → 01.01.02.01 (2026-06) →.02 →.03 (2026-07) →.04 (2026-08) | 1 source- lesimprimantes3d.fr/test-qidi-q2-20251030/ ("La procédure de mise à jour manuelle utilise la clé USB contenant à la racine un dossier QD_Update … QD_Q2_SOC (un fichier in · 2026-08 · local
|
|---|
| G-code flavor & notable custom G-codes/macros | Klipper flavour with [gcode_arcs] resolution: 1.0 (G2/G3), [exclude_object], [pause_resume], [display_status], [virtual_sdcard], [respond], [save_variables], [force_move] enable_force_move: True. Custom set: M141/M191 chamber set/wait (both clamp the target to 65 °C), M106 P0/P2/P3/P4 (part / auxiliary / chamber-circulation / Polar Cooler), M107, M204 (also forces accel-to-decel = accel/2), M290 Z trim, M303 PID, M900 PA, M901 input-shaper calibrate+save, M603/M604 unload/load, M4029 full auto-calibration, M4030/M4031 bed-position init via reverse Z homing, G29/G31/G32 mesh calibrate / mesh-mode toggles, M0/M25→PAUSE, M84 (also force-disables all steppers), plus CLEAR_NOZZLE, CUT_FILAMENT_1, MOVE_TO_TRASH, SHAKE_OOZE, EXTRUSION_AND_FLUSH, BEEP, LED_ON/LED_OFF, SAVE_CONFIG_QD, RESUME_INTERRUPTED, DETECT_INTERRUPTION and the BOX_* family | 1 source- firmware/config/gcode_macro.cfg (whole file, 1004 lines — M141 L634-639 and M191 L642-651 both use TARGET= min of s and 65 (Jinja min-filter on [s, 65]); [gcode_arcs] L91 · 2026-08 · local
|
|---|
| Root shell: exact method (official setting toggle / vendor-documented / community exploit / none). Is root persistent across OTA firmware updates, or wiped each update? | Method: vendor-documented SSH as mks / makerbase, then sudo su. No exploit, no jailbreak, no hidden toggle. (Direct root@ SSH may also work — QIDI's sibling Plus 4 image ships root SSH enabled with the same makerbase password — but this is untested on the Q2; see N3.) Root access itself survives OTA (the account and sudo rights are part of the shipped image and updates are apt-installed packages, not full reflashes) — but user customisations do not: QIDI updates replace printer.cfg and overwrite many files under ~/printer_data/config and the user home. There is also a root-running vendor agent, qidi-client.service (/home/qidi/QIDI_Client/bin/qidiclient), that owns some config state and silently reverts user edits. Complication: newer firmware appears to use a qidi user alongside/instead of mks | 1 source- wiki.qidi3d.com/en/Memo/System-Time-Modification; lesimprimantes3d.fr/test-qidi-q2-20251030/ ("Quand une mise à jour a lieu (en-ligne ou hors-ligne), le fichier printer.c · 2026-08 · local
|
|---|
| Userland: OS base (Debian/Ubuntu/Buildroot/OpenWrt/busybox-only), package manager present (`apt`/`opkg`/`ipkg`/none), CPU architecture (armv7 / aarch64 / mips / x86), and free space on the writable partition. A busybox/no-apt rootfs with a few MB free is a red flag — say so. | Debian GNU/Linux 11.8 "bullseye" (PRETTY_NAME="Debian GNU/Linux 11 (bullseye)", /etc/debian_version = 11.8), aarch64 / arm64, kernel 5.10.160 (KERNEL="5.10 - rk3308_linux_defconfig"), systemd 247, Python 3.9.2, apt present and fully functional. Rootfs /dev/mmcblk0p6, ext4, rw, 29.1 GB on the 32 GB eMMC. Standard Debian userland — openssh-server, nginx, ffmpeg, bluez, net-tools, rsync, sudo, openvpn, ntfs-3g, python3.9-dev all installed; git installable on demand. 512 MB RAM is the real constraint, not storage. This is emphatically not a busybox/no-apt rootfs | 1 source- lesimprimantes3d.fr/test-qidi-q2-20251030/ and /forum/topic/63168 (verbatim cat /etc/os-release, cat /etc/debian_version, lscpu, uname/dmesg banner "Linux version 5.10.16 · 2026-08 · local
|
|---|
| Native Tailscale feasibility: can `tailscaled` run persistently on-device? Cite concrete evidence — community guides, wiki entries, forum posts, or repos of people actually doing it on THIS model. Note whether it needs `/dev/net/tun` (kernel TUN support) and whether the kernel provides it, plus whether userspace-networking mode is the only option. Distinguish "someone did it" from "should theoretically work." | Very likely to work, but nobody has publicly done it on a Q2 — treat as "should work", not "someone did it". In favour: aarch64 Debian 11 with working apt is exactly Tailscale's supported deb target; there is ~29 GB of writable ext4 and systemd 247 to host tailscaled as a normal service; and, decisively for TUN, openvpn 2.5.1 is already installed in the stock image, which in its default dev tun mode requires /dev/net/tun — strong circumstantial evidence the kernel provides TUN. Against: no one has posted ls -l /dev/net/tun, zcat /proc/config.gz or a tailscale up transcript for this model; the kernel is a vendor rk3308_linux_defconfig 5.10 build with no published source or config, so CONFIG_TUN is inferred, not proven; and with 512 MB RAM already implicated in Klipper shutdowns, adding a daemon is not free. The strongest evidence is a sibling model, added: the community qidi-community/Plus4-Wiki publishes a *secure remote access* guide that installs Tailscale on the printer itself over SSH with the stock one-liner (curl -fsSL https://tailscale.com/install.sh piped into sh), after which "your printer appear[s] in the list of machines" in the Tailscale admin console, and tells users to add the Tailscale CGNAT range 100.64.0.0/24 to Moonraker's trusted_clients. That is a working on-device tailscaled on a QIDI Klipper printer of the same MKS/Debian userland family — but it is the Plus 4, a different SoC and a different kernel build, so it does not settle CONFIG_TUN on the Q2's rk3308_linux_defconfig | 1 source- lesimprimantes3d.fr/forum/topic/63168 (sudo apt list --upgradable output includes openvpn/oldoldstable-security 2.5.1-3+deb11u1 arm64, i.e. openvpn is installed; lsmod sh · 2026-08 · local
|
|---|
| SSH daemon: present by default or must be installed/enabled? Default credentials if documented. Does an OTA update disable it or reset the password? | Openssh-server is installed and enabled by default — SSH works out of the box with no toggle. Documented credentials: mks / makerbase (published by QIDI itself on the wiki, so effectively a universal default password). Root has no known SSH password; privilege escalation is via sudo. Whether an OTA resets the password or the account is — no source tested it, and the mks→qidi account change across firmware generations means it cannot be assumed stable | 1 source- lesimprimantes3d.fr/forum/topic/63168 (sudo apt list --upgradable lists openssh-server, openssh-client, openssh-sftp-server, ssh as installed packages; live sessions show · 2026-08 · local
|
|---|
| Filesystem persistence: is the rootfs read-only or overlay-mounted? Do user-installed binaries and init/systemd services survive reboot and survive firmware updates? Is there a supported place to persist customizations? | Rootfs is a plain read-write ext4 partition — not read-only, not overlay-mounted. /dev/mmcblk0p6 on / type ext4 (rw,relatime,sync), 29.1 GB. User-installed binaries and systemd services persist across reboot — demonstrated by an owner running Klippain Shake&Tune, KlipperBackup, a reinstalled KIAUH and Samba on a retail unit. They do not reliably survive QIDI firmware updates: printer.cfg is replaced (a backup is kept) and updates "écrasent de nombreux fichiers de configuration". The supported-in-practice persistence pattern is community-invented: keep your changes in your own include files and re-add a single [include …] line to printer.cfg after each update | 1 source- lesimprimantes3d.fr/forum/topic/63168 (mount output verbatim; fdisk -l showing the 6-partition GPT); lesimprimantes3d.fr/test-qidi-q2-20251030/ ("À la fin du fichier prin · 2026-08 · local
|
|---|