Packages

668 packages, searchable and sortable. Every one of these already exists as a real, built LinuxDoors package.

PackageVersionCategorySizeDownloads
libxml2
BLFS.
BLFS. Needed by at-spi2-core -- a real dependency that surfaced as a build failure. -D icu=disabled (book's icu=enabled needs the ICU library, which we haven't built and don't otherwise need). Skips the optional docs and test suite.
2.15.4 Libraries 863.2 KB 51 Download PackageSource Download .tar.gz
libxmlb
BLFS general/libxmlb.html (binary XML cache format).
BLFS general/libxmlb.html (binary XML cache format). Real, needed AppStream dependency (packages/appstream) -- see that package's notes for why AppStream turned out to be a genuine GIMP 3.2.4 hard requirement after all (a second, separate meson.build check beyond the appdata-test validation flag). Skips gtk-doc and the test suite.
0.3.29 Libraries 306.5 KB 41 Download PackageSource Download .tar.gz
libxslt
BLFS general-libraries.
BLFS general-libraries. Provides xsltproc, hard-required by xfce4-dev-tools' configure (surfaced as a real build failure). without-python (no python bindings needed). Skips the optional test suite and the docbook-xml/docbook-xsl-nons runtime recommendations (not built).
1.1.45 Libraries 766.8 KB 41 Download PackageSource Download .tar.gz
libyaml
Not in BLFS -- upstream YAML C library (yaml.org / github.com/yaml/libyaml), plain autotools build.
Not in BLFS -- upstream YAML C library (yaml.org / github.com/yaml/libyaml), plain autotools build. Added specifically because xfdesktop's own configure.ac (checked directly in this exact source tree, packages/xfdesktop) gates its 'file-icons' feature (ENABLE_FILE_ICONS, which XFCE_DESKTOP_ICON_STYLE_FILES needs at runtime) behind 'yaml-0.1 >= 0.2.5' via pkg-config -- a dependency this project had never built, so xfdesktop silently compiled WITHOUT desktop file-icon support (no build error, config.log just logged 'dependencies missing: yaml-0.1 >= 0.2.5'). Discovered live via the Phase 1.5 installer boot test, when setting /desktop-icons/style=2 produced 'CRITICAL: Unusable XfceDesktopIconStyle: 2' -- traced to xfdesktop-application.c's ENABLE_FILE_ICONS-gated switch case simply not existing in the compiled binary. 0.2.5 is both the exact minimum version xfdesktop's configure.ac requires and the current latest stable upstream release. xfdesktop must be rebuilt after this package so its configure re-detects yaml-0.1.pc.
0.2.5 Libraries 183.8 KB 46 Download PackageSource Download .tar.gz
lightdm
BLFS.
BLFS. sbindir=/usr/bin (book's own choice, not a typo -- the lightdm binary really lands at /usr/bin/lightdm). Creates the lightdm system user/group live (idempotent guard, uid/gid 65) before the destdir install so the packaged /var/lib/lightdm* and /var/log/lightdm directories can be chowned to a real uid inside $PKG_DESTDIR. Writes /etc/pam.d/lightdm (auth/account/session/password all `include system-*`, same pattern as su/login) and a lightdm.service systemd unit + the display-manager.service/default.target symlinks that `systemctl enable lightdm && systemctl set-default graphical.target` would produce -- done at package-build time instead of a live systemctl call since there's no running PID 1 mid-build. KNOWN GAP: doesn't run `make install-lightdm` from the external 'blfs-systemd-units' package BLFS references -- that unit's content isn't verified from a live book fetch, so a standard lightdm.service was hand-written instead (Description/After/Before/ExecStart=/usr/bin/lightdm/Restart=always/BusName, Alias=display-manager.service), matching the well-established cross-distro convention. Skips --with-libxklavier for lightdm-gtk-greeter (not built). REAL BUG found on first graphical-login test: /etc/pam.d/lightdm originally had no `pam_systemd.so` anywhere in its session stack (system-session is just pam_unix.so, per BLFS's own generic Linux-PAM page) -- without it, systemd-logind never registers the desktop user's session, so XDG_RUNTIME_DIR/DBUS_SESSION_BUS_ADDRESS aren't set up correctly and D-Bus-session-dependent things (xfconfd, hence XFCE's 'could not contact settings server') fail. Fixed by adding `session optional pam_systemd.so` (standard practice for any systemd-based display manager's PAM stack -- see `man pam_systemd`). || 2026-09-28, REAL BUG FOUND: the compiled `liblightdm-gobject-1.so.0.0.0`'s baked-in `SESSIONS_DIR` default (from `liblightdm-gobject/Makefile.am`'s `-DSESSIONS_DIR="...xsessions:...wayland-sessions"`) is genuinely CORRUPTED in this project's own build -- `strings -a -t x` on the real .so shows the literal garbled path `.../usr/share/waylayland-sessions` (an extra "lay" inserted) at one offset, alongside a second, correct "/usr/share/wayland-sessions" string (from an unrelated `g_str_has_suffix()` check in the same file) at a different offset -- meaning the real runtime default never actually included the real wayland-sessions directory, so GNOME on Wayland / Plasma (Wayland) never appeared in lightdm-gtk-greeter's own session-picker dropdown even though both sessions genuinely work once launched (see packages/gnome-session and packages/kwin's notes). Root cause of the corruption itself (a from-scratch-toolchain linker/string-merging anomaly is the leading theory) was NOT chased down -- not needed, since `update_sessions()` already checks a real `sessions-directory` config override under `[LightDM]` before falling back to the compiled default, and stock lightdm.conf already ships the exact correct value as a commented-out line. Real fix lives in scripts/lfs_system_config.sh (uncomments that one line) rather than here, since it's a config-level workaround, not a rebuild -- but flagging it on this package too since the actual defect is baked into lightdm's own build. Verified end-to-end via a real greeter screenshot (all seven sessions listed, including both Wayland ones) and a full manual login through the real UI reaching a working KDE Plasma Wayland desktop.
1.33.1 Desktop 875.7 KB 56 Download PackageSource Download .tar.gz
lightdm-gtk-greeter
BLFS.
BLFS. The actual GTK login screen lightdm.conf's [Seat:*] greeter-session points at. Uses --with-libxklavier since it turned out lightdm itself hard-requires libxklavier anyway (see lightdm's notes), so it's available here too.
2.0.9 Desktop 248.1 KB 42 Download PackageSource Download .tar.gz
linux
LFS ch10 kernel -- never built until ISO assembly needed a real vmlinuz (linux-headers only extracted sanitized headers, no compilation).
LFS ch10 kernel -- never built until ISO assembly needed a real vmlinuz (linux-headers only extracted sanitized headers, no compilation). Non-interactive config: `make defconfig` + scripts/config fragment edits (verified against the real Kconfig symbol names in this exact source tree, not guessed) + `make olddefconfig`, since `make menuconfig` needs a real TTY we don't have over this automation. Config choices: LFS book's own standard recommendations (cgroups/memcg for systemd, devtmpfs, EFI support) plus live-boot/QEMU-specific additions -- squashfs/overlayfs/iso9660/loop/ahci/ata_piix/virtio-blk built in (=y) so the hand-written initramfs can mount root without needing modprobe; video/USB/extra virtio drivers left as modules (=m), loaded normally post-switch_root by the already-working udev/kmod stack. depends on xfce4-notifyd purely for chain-of-convenience ordering (same pattern as other late additions), not a real dependency. Skips the book's Documentation/ copy (multi-GB, not needed for boot). SQUASHFS_ZSTD + SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU added later, per explicit user request to speed up app launch off the live (compressed, read-only) root -- the original config only had CONFIG_SQUASHFS_ZLIB (gzip), the slowest-to-decompress option, and single-threaded decompression (CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE); build_iso.sh was switched from `-comp gzip` to `-comp zstd` to match. SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU/SINGLE/MULTI is a real Kconfig `choice` block (exactly one selectable) -- confirmed by reading the actual fs/squashfs/Kconfig in this source tree before editing, not guessed. BPF_SYSCALL/BPF_JIT/DEBUG_INFO_BTF/SCHED_CLASS_EXT added later for sched_ext (BPF-pluggable CPU schedulers, e.g. scx_bpfland/scx_lavd), per explicit user request. Confirmed the real dependency chain by reading kernel/Kconfig.preempt and lib/Kconfig.debug directly in this source tree: `config SCHED_CLASS_EXT` depends on `BPF_SYSCALL && BPF_JIT && DEBUG_INFO_BTF`; `DEBUG_INFO_BTF` itself depends on `PAHOLE_VERSION >= 122` (needs the `pahole` tool from the `dwarves` project on PATH during the build to convert DWARF into BTF) and on `DEBUG_INFO` being enabled, which is NOT the default here (`DEBUG_INFO_NONE=y` originally) -- `DEBUG_INFO_NONE` disabled and `DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT` enabled instead (a real Kconfig `choice` block under `lib/Kconfig.debug`, same pattern as the squashfs one) to actually produce DWARF for pahole to convert. This kernel rebuild is sequenced AFTER a new `dwarves` package (see packages/dwarves) so pahole is on PATH when this Makefile invokes it. FUNCTION_TRACER added after scx_bpfland/scx_lavd built+installed but failed to actually attach at runtime (`Error: Failed to attach non-struct_ops BPF programs / Caused by: Device or resource busy (os error 16)`) -- diagnosed by running both binaries directly in a foreground shell instead of via systemd, which surfaced scx_lavd's own `Ftrace is not enabled in the kernel` log line and confirmed against the real built .config that CONFIG_FUNCTION_TRACER was unset. scx's shared common-lib code (the `scx_lib_init_probe` compat probe, used regardless of which scheduler is chosen) attaches BPF fentry/fexit trampoline programs via the kernel's ftrace direct-call infrastructure on x86_64, which requires CONFIG_FUNCTION_TRACER. Confirmed via the real kernel/trace/Kconfig in this source tree that DYNAMIC_FTRACE/DYNAMIC_FTRACE_WITH_REGS/DYNAMIC_FTRACE_WITH_DIRECT_CALLS are all `def_bool y` once FUNCTION_TRACER + the arch's HAVE_* symbols are satisfied, so only FUNCTION_TRACER itself needs to be added here; `make olddefconfig` resolves the rest. CPU_FREQ_DEFAULT_GOV_USERSPACE flipped to CPU_FREQ_DEFAULT_GOV_PERFORMANCE per explicit user request to speed up app launch/desktop responsiveness. Real finding: this x86_64 defconfig had baked in 'userspace' as the default cpufreq governor -- confirmed by reading the actual choice block in drivers/cpufreq/Kconfig, whose own smart c
7.2.12 System 104.8 MB 71 Download PackageSource Download .tar.gz
linuxampNot in ISO
LinuxAmp -- a Winamp-style music player from LinuxDoors.com, created 2026-09-12.
LinuxAmp -- a Winamp-style music player from LinuxDoors.com, created 2026-09-12. Free ($0.00). Not upstream anywhere -- LinuxAmp.py (a large PySide6/Qt6 app using QtMultimedia for audio output) is a hand-authored asset, tarred as a pinned local source (linuxamp-1.0.tar.gz in download/, sha pinned) the same way packages/flashscp and packages/sudo are. This is the installable-package build: it uses the system Python + PySide6 + Qt6 (QtMultimedia included) and the system ffmpeg/ffprobe (packages/ffmpeg) for decoding, tag reading, and cover-frame extraction -- LinuxAmp.py's own find_tool() checks for an AppImage's bundled copy via $APPDIR first and falls back to shutil.which() otherwise, so it resolves the system ffmpeg/ffprobe correctly here with no code changes needed. The lightweight, fully self-contained alternative is LinuxAmp.AppImage on the LinuxDoors AppImage Store (linuxdoors.com/appimages_store), which bundles its own Python, Qt, and a static ffmpeg/ffprobe 7.0.2 in one ~104MB file. build.sh installs LinuxAmp.py to /usr/lib/linuxamp/, a /usr/bin/linuxamp wrapper (python3 that script), a /usr/share/applications/linuxamp.desktop in Categories=AudioVideo;Audio;Player; (Applications > Multimedia), and the app's own real icon set (32/48/64/128/256/512px PNGs, already produced for the AppImage build by make_icon.py) into hicolor + pixmaps, rather than generating a placeholder. numpy is optional at runtime (LinuxAmp.py catches ImportError and falls back to a pure-Python equaliser/spectrum path when it's absent) -- no numpy package exists in this project yet, so a native install runs the fallback path unless numpy is added later; the AppImage bundles its own numpy and always gets the exact path. ship_in_iso=false, matching every other creative/multimedia app in this project (GIMP, Kdenlive, OpenShot, ...). Verified on the .101 fast computer: python3 -m py_compile passes, and PySide6.QtMultimedia + the system ffmpeg/ffprobe are both confirmed present there.
1.0 Audio 303.6 KB 154 Download PackageSource Download .tar.gz
linuxdoors-kernel-config
LinuxDoors Kernel Config -- a PySide6 GUI for toggling optional kernel features (WiFi/network drivers, filesystems, virtualization, security hardening) and triggering a real from-source kernel rebuild to apply them, s...
LinuxDoors Kernel Config -- a PySide6 GUI for toggling optional kernel features (WiFi/network drivers, filesystems, virtualization, security hardening) and triggering a real from-source kernel rebuild to apply them, same intent as a Windows device-manager/driver-toggle panel but for the kernel's own Kconfig options. User-requested, scoped via explicit discussion: real rebuild (not read-only, not a config-only generator), targets end users on any installed system, ships in the base ISO (accepting the real ~275MB qt6-full size cost -- confirmed explicitly rather than assumed). Reuses the EXACT same real infrastructure the package manager's own 'Build from source' path already has, rather than inventing a second one: downloads the real kernel source via POST /api/build-token + GET /api/build-source (the same plain-HTTPS, single-use-token flow), sandbox-compiles as the unprivileged linuxdoors-build user (same sandboxing linuxdoors_pkg_backend.install_from_source already does), and feeds the user's chosen toggles through a new, deliberate extension point in packages/linux/build.sh itself (EXTRA_KERNEL_CONFIG env var, applied via scripts/config right before the existing make olddefconfig call) -- so the baseline config this app builds from is always identical to, and never drifts from, what this project's own official linux package produces. Empty/unset by default, so the engine's own normal build and every ISO build are completely unaffected. Safety property, the single most important design decision: every build this app produces gets a distinct LOCALVERSION suffix (-custom, -custom1, -custom2, ...) picked by checking what already exists in /boot, so the new kernel+modules tree is always installed ALONGSIDE the original, never overwriting it, and a new GRUB menuentry is simply appended (the existing default entry and its index are left untouched). A bad combination of user-selected toggles can therefore never brick the machine's already-working boot -- worst case, the new menu entry itself doesn't boot and the original, unmodified default entry is still right there. Deliberately scoped to installed systems only -- refuses to run on a live-ISO session (checked via /proc/cmdline) since a rebuild there can't persist across reboot anyway, and the live boot path's hand-rolled initramfs is a completely different mechanism this app doesn't attempt to replicate. Deliberately NOT a full menuconfig clone -- a curated, individually-verified list of real, plain in-tree Kconfig symbols only (common WiFi/USB-Ethernet/Bluetooth chipsets, NTFS3/exFAT/Btrfs/XFS/F2FS, KVM+vhost-net, a handful of hardening toggles, SELinux kernel-support-only with an explicit note that LinuxDoors has no policy/userspace tooling for it yet) -- out-of-tree/DKMS things like ZFS or VirtualBox's own vboxdrv are explicitly out of scope, since those need a separate source tree entirely, not a kernel config toggle. Root-elevated via the same su -c + explicit DISPLAY/XAUTHORITY pattern as every other LinuxDoors admin tool (a dedicated -launcher binary, matching Network Settings/Secure SSH/Manage SSH's own established convention) -- a desktop-icon double-click doesn't carry XAUTHORITY and su -c resets HOME to /root, which silently breaks a root GUI's access to the X display without this fix (the same real bug already found and corrected for every other root-elevated launcher this session).
1.0 Libraries 22.6 KB 15 Download PackageSource Download .tar.gz
linuxdoors-powertoys
LinuxDoors PowerToys -- a programmer-authored GTK3 hub of small desktop utilities, modeled on the classic PowerToys-style utility suite (one central hub window listing independent modules).
LinuxDoors PowerToys -- a programmer-authored GTK3 hub of small desktop utilities, modeled on the classic PowerToys-style utility suite (one central hub window listing independent modules). Programmer-authored asset treated as a source tarball, same pattern as packages/sudo and packages/flashscp. Modules in v1: Awake (systemd-inhibit toggle), Always on Top (via the new wmctrl package -- real EWMH _NET_WM_STATE_ABOVE, not a hand-rolled ctypes/Xlib ClientMessage), Color Picker, Screen Ruler, Hosts File Editor (root-elevated via the same su -c + XAUTHORITY pattern already used by every other LinuxDoors admin tool), PowerRename (regex batch rename with a live preview), and Peek (quick image/text/PDF-via-Poppler preview). Deliberately scoped to the modules that port cleanly to X11/GTK3 without needing a registry equivalent, OCR, cross-machine input sharing, or WM-specific keybinding introspection -- all flagged as real, harder v2 candidates, not oversights. ship_in_iso:false -- a Packages-page/pkg install item, not part of the base image. Real bug caught by an actual rendered screenshot before shipping (not guessed): the module-row title labels used the app's blanket dark-background `label { color: #fbeed2 }` CSS rule, but GtkListBoxRow defaults to its own plain white/light background independent of the window's own dark gradient -- cream-on-white was nearly unreadable. Fixed with explicit `.row-title`/`.row-desc` classes and an explicit light row background, matching this project's own established pattern for this exact class of contrast bug (already documented for the pkg-manager/installer's white-entry and button-label issues). Cross-desktop Always-on-Top verified for real, not assumed: rather than cycle all 7 supported window managers through a full lightdm-autologin visual test (very costly), each real WM (xfwm4, marco, mutter, muffin, kwin_x11, openbox, enlightenment_start -- Budgie shares mutter, so it's covered by the GNOME case) was started on its own fresh Xvfb display, a plain GTK test window opened, and the app's exact `wmctrl -r :ACTIVE: -b add,above` call run against it -- verified via a real `xprop -id <win> _NET_WM_STATE` read before and after, confirming `_NET_WM_STATE_ABOVE` genuinely gets set in every case. A real, unrelated wmctrl quirk was found and ruled out along the way: `wmctrl -l` (window *listing*) silently prints nothing under this exact Xvfb harness despite `_NET_CLIENT_LIST` being correctly populated (confirmed via direct xprop reads) -- but the app never uses `-l`, only `-r :ACTIVE:` (reads `_NET_ACTIVE_WINDOW` directly, a separate code path in wmctrl's own source), which was separately confirmed to work correctly in every case.
1.0 Libraries 21.9 KB 97 Download PackageSource Download .tar.gz
linuxdoors-system-statusNot in ISO
LinuxDoors System Status -- a PySide6 system monitor (CPU per-core, memory/swap, file systems, network throughput + a real live connection table, and process control) built in this project's own PySide6/QSS house styl...
LinuxDoors System Status -- a PySide6 system monitor (CPU per-core, memory/swap, file systems, network throughput + a real live connection table, and process control) built in this project's own PySide6/QSS house style, reusing FlashScp's already WCAG-verified light/dark palette architecture (DARK_PALETTE/LIGHT_PALETTE dicts, the same WCAG 2.1 relative-luminance contrast-ratio formula, a --check-contrast self-test flag) rather than deriving a new one. Programmer-authored asset treated as a source tarball, same pattern as packages/sudo, packages/flashscp, and packages/linuxdoors-powertoys. Features: a +/- zoom that scales the whole window's base font size (not per-panel); each section (CPU/Memory/File Systems/Network/Processes) has its own (+)/(-) fold toggle in its header, and keeps updating on the timer underneath whether folded or not, so re-opening one never shows a stale reading; full process control (End Process via SIGTERM, Change Priority via os.setpriority), retrying as root through the same su -c + password-dialog pattern every other LinuxDoors admin tool uses if the plain attempt is refused; a real network connections table (proto/local/remote/state/owning process) via `ss -tulpn`, not just an aggregate throughput graph -- chosen over hand-parsing /proc/net/tcp's hex address format + inode-to-pid mapping, the same 'use a well-tested existing tool' reasoning already applied choosing wmctrl over a hand-rolled X11 client for LinuxDoors PowerToys. Real bugs found and fixed before shipping, each confirmed against an actual screenshot or a real failure, not guessed: (1) `ps`'s nice-value column reports a literal '-' instead of a number for kernel threads and real-time-scheduled processes -- a bare `int(nice)` crashed the whole app on first launch; fixed to fall back to None/'-' display. (2) A genuine QtCharts axis-label bug, found and fixed in three real steps: the Y-axis showed '...' instead of real percentage/throughput numbers on every chart. First suspected (and fixed as a real but insufficient issue) a printf-format escaping bug -- y_label='%' fed into '%d'+y_label produces the invalid trailing-bare-percent format '%d%', which needs '%d%%' to safely emit a literal percent sign. That fix alone didn't resolve it; isolated the real cause by reproducing the identical axis configuration in a bare, minimally-nested test window, where it rendered correctly, proving the bug was about layout/sizing, not the axis setup itself. Root cause: the chart's only height constraint was setMinimumHeight(110), with the default width policy left unconstrained inside a several-levels-deep Section/QVBoxLayout/QScrollArea hierarchy -- with 5 axis tick labels needing real vertical room and no explicit sizePolicy telling Qt to actually claim horizontal space during the scroll area's first layout pass, QtCharts computed its label elision against that undersized initial layout and never revisited it. Fixed with an explicit QSizePolicy.Expanding/Fixed policy and a taller 180px minimum height -- confirmed via a real screenshot showing genuine '0%/25%/50%/75%/100%' labels afterward. (3) A `wmctrl -r NAME` test call (used only during this app's own screenshot-verification tooling, to maximize the test window) silently failed for the same reason already documented for LinuxDoors PowerToys: name-based window lookup shares wmctrl's broken window-listing code path under this exact Xvfb test harness; switched to the already-proven-working `wmctrl -r :ACTIVE:` (reads _NET_ACTIVE_WINDOW directly, a separate code path) instead. Cross-desktop-environment tested for real: launched cleanly (no crash, confirmed via captured stdout/stderr, not just process exit code) under all seven LinuxDoors-supported window managers -- xfwm4 (XFCE), marco (MATE), mutter --x11 (GNOME/Budgie), muffin --x11 (Cinnamon), kwin_x11 (KDE Plasma), openbox (LXQt), and enlightenment_start. Unlike LinuxDoors PowerToys, this app has no window-manager-specific feature (no EWMH tricks of its
1.0 Libraries 29.3 KB 96 Download PackageSource Download .tar.gz
linuxdoors-update-grub
LinuxDoors tool (2026-10-14, v1.45): makes the newest stock LinuxDoors kernel the GRUB default on installed systems, keeping older kernels as fallback entries, Kernel Config custom kernels as their own entries and any...
LinuxDoors tool (2026-10-14, v1.45): makes the newest stock LinuxDoors kernel the GRUB default on installed systems, keeping older kernels as fallback entries, Kernel Config custom kernels as their own entries and any non-LinuxDoors entries unchanged. Only lists kernels whose /lib/modules dir exists; keeps the running kernel as default if it has out-of-tree modules (NVIDIA etc.) the newer one lacks; does nothing on the live ISO or when /etc/linuxdoors/no-auto-kernel exists. Run by the installer, by the package manager after a kernel install, and by linuxdoors-update-grub.service at every boot (vendor-enabled). The linux package depends on it so pkg upgrade pulls it onto older installs.
1.0 Core System 4.3 KB 11 Download PackageSource Download .tar.gz
linuxdoors-vncviewerNot in ISO
linuxdoors-vncviewer -- a small, real, interactive Qt6 VNC client (a hand-authored asset tarred as a source, same pattern as packages/sudo/packages/flashscp), built on top of packages/libvncserver's libvncclient.
linuxdoors-vncviewer -- a small, real, interactive Qt6 VNC client (a hand-authored asset tarred as a source, same pattern as packages/sudo/packages/flashscp), built on top of packages/libvncserver's libvncclient. Written specifically for the GNOME 51 (VNC) x2goclient integration: x2goclient's own patched 'GNOME 51 (VNC)' session type tunnels a local port to the remote host's 127.0.0.1:5900 (gnome-remote-desktop's VNC server, started via linuxdoors-gnome51-vnc -- see packages/gnome-session's own notes) over its existing SSH connection, then spawns this against that local port instead of embedding nxagent's X11 window the way every other x2go session type does. Real, interactive, not just a screenshot tool: a background QThread pumps WaitForMessage/HandleRFBServerMessage and repaints via a queued signal, mouse motion/clicks/wheel are forwarded via SendPointerEvent, and keyboard input via SendKeyEvent using a pragmatic (not fully exhaustive, but covers real everyday desktop use -- arrows/backspace/enter/escape/tab/delete/home/end/pgup/pgdn/F1-F12/modifiers plus all printable text via the Qt-key-event's own Latin-1/Unicode codepoint, which is numerically identical to the corresponding X11 keysym in that range) Qt-key-to-X11-keysym map. Isolated to /opt/gnome51 is NOT needed here -- this is a plain client tool linked against the SHARED qt6-full and libvncserver, no soname/path collision risk with anything. Built + connect-verified for real against a live gnome-remote-desktop VNC server on .101 before being wired into x2goclient. || Real bug found and fixed here (2026-09-19), reported live by a user once mouse/keyboard input actually worked: the visible pointer had a 'shadow with a delay' -- their own real, instant local cursor, plus a second one GNOME Shell was baking directly into the video frames (since nothing had ever asked for real VNC cursor handling), lagging by a full network+frame round-trip. Fixed with the real, standard VNC cursor pseudo-encoding: appData.useRemoteCursor=TRUE plus GotCursorShape/HandleCursorPos callbacks -- libvncclient then requests it automatically during the handshake, a compliant server (gnome-remote-desktop is) stops drawing its own cursor into frame updates, and this client draws the server's cursor shape itself at the LOCALLY-tracked mouse position (repainting on every local mouseMoveEvent, not just on server frame updates), so the pointer is instant with no double image. || LIVE RESIZE FEATURE (2026-09-19), built after a user asked why the resolution couldn't be changed from inside the running GNOME 51 Settings app -- real answer: a headless Mutter virtual monitor (--virtual-monitor=WxH) has exactly one fixed mode for its whole lifetime, confirmed against Mutter's own meta-context-main.c, so there is genuinely nothing else for Settings to list, and no live in-place resize is possible either. The only real fix is to restart the remote gnome-shell/gnome-remote-desktop at a new size (x2goclient's own new 'GNOME 51 (VNC): Change Resolution...' Session-menu action does this, re-running linuxdoors-gnome51-vnc over the same already-open SSH connection) and have THIS viewer reconnect on its own once the new server is ready. Added: VncWidget now retries a dropped connection automatically (VncThread::finishedWithReason -> onThreadFinished -> scheduleReconnect/attemptReconnect, every 1.5s for up to 40 attempts/~60s before finally giving up and showing the old 'Disconnected' dialog), with a 'Reconnecting... (attempt N of 40)' status shown in the empty-framebuffer paintEvent() text; a deliberate window close (closeEvent, m_closing) suppresses reconnecting. || TWO REAL, PRE-EXISTING CONCURRENCY BUGS found and fixed getting this far, not something this feature introduced but something it made vastly more likely to trigger (a resize -> reconnect cycle now happens routinely instead of rarely): (1) resizeCB() reallocated client->frameBuffer to the new size with NO lock at all, while paintEvent() reads client->fram
1.0-1 Libraries 31.3 KB 95 Download PackageSource Download .tar.gz
linux-headers
LFS ch5 sanitized kernel headers for $LFS/usr/include.
LFS ch5 sanitized kernel headers for $LFS/usr/include. No compilation, just header extraction -- gcc-pass1 needs this before glibc can be configured.
7.1.7 Core System 2.0 MB 45 Download PackageSource Download .tar.gz
linuxmoviemakerNot in ISO
LinuxMovieMaker -- a friendly clips/photos/titles/music video editor from LinuxDoors.com.
LinuxMovieMaker -- a friendly clips/photos/titles/music video editor from LinuxDoors.com. Not upstream anywhere -- LinuxMovieMaker.py (a large PySide6/Qt6 app using QtMultimedia for preview playback) is a hand-authored asset, tarred as a pinned local source (linuxmoviemaker-1.0.tar.gz in download/, sha pinned) the same way packages/linuxamp/packages/flashscp/packages/sudo are. The app decodes/composes/exports entirely through ffmpeg (its own find_tool() checks an AppImage's bundled copy via $APPDIR first, falling back to shutil.which() otherwise -- resolving to the system ffmpeg/ffprobe package here with no code changes needed); no imaging or numerical library is required. This is the installable-package build, using the system Python + PySide6 + Qt6 (QtMultimedia included) and the system ffmpeg/ffprobe. The lightweight, fully self-contained alternative is LinuxMovieMaker.AppImage on the LinuxDoors AppImage Store (linuxdoors.com/appimages_store), which bundles its own Python/Qt/ffmpeg in one file. build.sh installs LinuxMovieMaker.py to /usr/lib/linuxmoviemaker/, a /usr/bin/linuxmoviemaker wrapper (python3 that script), a /usr/share/applications/linuxmoviemaker.desktop in Categories=AudioVideo;Video;VideoEditing; (Applications > Multimedia), and the app's own real 512x512 icon (already produced for the AppImage build) into hicolor/512x512/apps + pixmaps, rather than a generated placeholder. ship_in_iso=false, matching every other creative/multimedia app in this project (GIMP, Kdenlive, OpenShot, LinuxAmp, ...).
1.0 Multimedia 366.5 KB 90 Download PackageSource Download .tar.gz
linuxnotetextNot in ISO
The native package build of LinuxNoteText -- a real text/source editor, programmer-authored from Stan Switaj, PySide6 (Python + Qt) around a compiled C++ canvas that wraps real, unmodified Scintilla 5.6.7 + Lexilla 5....
The native package build of LinuxNoteText -- a real text/source editor, programmer-authored from Stan Switaj, PySide6 (Python + Qt) around a compiled C++ canvas that wraps real, unmodified Scintilla 5.6.7 + Lexilla 5.5.4 (the same editing engine Notepad++ is built on). This is the SAME source tree the LinuxNoteText.AppImage on the AppImage Store is built from, packaged as a real, installable LinuxDoors package instead of a self-contained portable bundle -- 'depends' pulls the already-built pyside6/qt6-full stack rather than carrying a second private copy of Qt, unlike the AppImage. Source is the programmer's own project tree (LinuxNoteText.py + linuxnotetext/ + native/ + src/ + plugins/ + five hicolor icon sizes), tarred as a local: asset -- excludes native/build (a stale local build dir), every __pycache__, and vendor/lupa (the AppImage's own bundled cpython-313 Lua binding wheel, which cannot load under this system's real cpython-314 -- see the real fix below). capture_method: destdir, same as every other compiled package here. Real build steps, run inside the chroot: native/CMakeLists.txt's own WidgetGen.py (regenerates ScintillaEdit's Qt bindings) and make_constants.py (Python constants from the real Scintilla/Lexilla headers) run first, exactly as the programmer's own build.sh does; then a plain CMake+Ninja-less make build of the canvas shim against Qt6 Core/Gui/Widgets (find_package(Qt6...), matching this project's qt6-full); the ten real native/prove_*.py self-checks run as a build-time sanity gate, same discipline as the programmer's own build.sh, using QT_QPA_PLATFORM=offscreen since there's no real display inside the chroot. || REAL FIX, not present in the AppImage build: 'lupa' (the Lua 5.5 binding the new Lua-plugin feature needs) is pip-installed FRESH from the real PyPI package index during this build (pip3 install --root=$PKG_DESTDIR --prefix=/usr lupa) rather than using the project's own vendor/lupa/lua55.cpython-313-x86_64-linux-gnu.so -- that vendored .so is compiled against CPython 3.13's ABI (cpython-313 tag) and cannot be imported at all under this system's real Python (3.14.7, confirmed live on the build host) -- a plain import would fail outright. PyPI genuinely publishes a real cp314 manylinux wheel for lupa 2.8 (confirmed by a live pip3 install on the build host, no compile needed, no network workaround required), so the native package gets a correctly-ABI-matched lupa for real, and linuxnotetext/lua_runtime.py's own _load() already tries a plain 'import lupa' before ever falling back to the vendored copy -- so no code change was needed, only the packaging choice of where lupa comes from. ship_in_iso:false, Packages-page/pkg-install only, matching every other native LinuxDoors-authored app in this catalog (FlashScp, LinuxAmp, LinuxDoors PowerToys, LinuxDoors System Status). || 0.3 (2026-10-07): source is the programmer's own 0.3 project tree from 70.20.232.99 (/home/ceo/Desktop/Desktop/Ultrazon_LinuxDoors_Projects/LinuxNoteText), packed the same way as 0.2 (no native/build, __pycache__, vendor/, AppImage/, or *_before_* backups). New in 0.3: the Highlight All Instances of Selection view option (linuxnotetext/window.py + settings.py), Scintilla 5.6.7 + Lexilla 5.5.4 (verified identical, apart from line endings, to the official scintilla567.zip / lexilla554.zip), and a new native/prove_instances.py self-check, added to build.sh's self-check loop. The C++ shim in native/ is unchanged from 0.2.
0.3 Editor 4.5 MB 96 Download PackageSource Download .tar.gz
linux-pam
BLFS postlfs/linux-pam -- added because lightdm hard-requires PAM for authentication (the system was built without PAM since chapter 7, using plain glibc crypt via su/chroot).
BLFS postlfs/linux-pam -- added because lightdm hard-requires PAM for authentication (the system was built without PAM since chapter 7, using plain glibc crypt via su/chroot). Writes the base /etc/pam.d/{system-account,system-auth,system-session,system-password,other} files BLFS documents. shadow and systemd both need to be rebuilt afterward to pick up PAM support -- see their own updated notes. Skips ninja test (needs a live PAM-aware login to exercise). 2026-10-10 1.7.3-1: rebuilt with --libdir=lib -- the 1.7.3 build on .101 (meson defaults to the Debian multiarch libdir there) had installed into /usr/lib/x86_64-linux-gnu, which LinuxDoors never loads from, so the previous version stayed in use.
1.7.3-1 System 469.2 KB 55 Download PackageSource Download .tar.gz
linuxpropaintshopNot in ISO
LinuxProPaintShop -- a layered raster image editor, from Stan Switaj (creator of LinuxDoors).
LinuxProPaintShop -- a layered raster image editor, from Stan Switaj (creator of LinuxDoors). Free. Hand-authored (not upstream anywhere); LinuxProPaintShop.py is tarred as a pinned local source the same way packages/flashscp and packages/sudo are. This is the installable-package build: it uses the system Python + PySide6 + Qt6 (depends: pyside6 -> qt6-full -> qtwebengine). All of the imaging -- layers, blend modes, the brush engine, the filters -- is the program's own code over Qt's QImage/QPainter plus Python's zlib, so no imaging library is needed. build.sh installs LinuxProPaintShop.py to /usr/lib/linuxpropaintshop/, a /usr/bin/linuxpropaintshop wrapper, a linuxpropaintshop.desktop in Categories=Graphics, and the 256px icon. ship_in_iso=false.
1.0 Graphics 500.1 KB 156 Download PackageSource Download .tar.gz
linuxultragrepNot in ISO
LinuxUltraGrep -- a grepWin-style search-and-replace tool from Stan Switaj, created 2026-09-17.
LinuxUltraGrep -- a grepWin-style search-and-replace tool from Stan Switaj, created 2026-09-17. Paid ($2.99, honor system). Not upstream anywhere -- LinuxUltraGrep.py (a PySide6/Qt6 GUI plus a full standalone CLI mode, stdlib-only aside from PySide6) is a hand-authored asset, tarred as a pinned local source (linuxultragrep-1.0.tar.gz in download/, sha pinned) the same way packages/flashscp and packages/linuxamp are. This is the installable-package build: it uses the system Python + PySide6 + Qt6 and the system's own GNU grep (already present via coreutils/grep) as its fast search engine, falling back to its own built-in process-pool Python engine when grep is unavailable or --engine=python is forced -- no ffmpeg-style external decoder dependency here. build.sh installs LinuxUltraGrep.py to /usr/lib/linuxultragrep/, a /usr/bin/linuxultragrep wrapper (python3 that script, also usable as a plain CLI -- `linuxultragrep -r pattern path`), a /usr/share/applications/linuxultragrep.desktop in Categories=Utility;TextTools;Development; (Applications > Accessories/Development), and the app's own real 256px icon (only size available -- same single-size-icon pattern as packages/flashscp). The lightweight, fully self-contained alternative is LinuxUltraGrep.AppImage on the LinuxDoors AppImage Store (linuxdoors.com/appimages_store), which bundles its own Python and Qt in one ~45MB file built from a donor PySide6 runtime. ship_in_iso=false -- deliberately kept off the ISO per explicit request, Packages page / pkg install only, matching every other paid or creative app in this project (LinuxUltraOffice, GIMP, Kdenlive, ...). Verified: python3 -m py_compile passes on the real current source.
1.0 Development 164.3 KB 89 Download PackageSource Download .tar.gz
linuxultraofficeNot in ISO
LinuxUltraOffice -- a deep-rebranded LibreOffice-derived productivity suite for LinuxDoors OS (Writer/Calc/Impress launcher entries now, Draw/Base/Math added to the menu later; all six are already part of this one bui...
LinuxUltraOffice -- a deep-rebranded LibreOffice-derived productivity suite for LinuxDoors OS (Writer/Calc/Impress launcher entries now, Draw/Base/Math added to the menu later; all six are already part of this one build, since LibreOffice ships as a single monolithic suite -- there is no way to build 'just Writer'). Real source verified directly from download.documentfoundation.org (not guessed); sha256 computed for real, not a placeholder. Deep rebrand via LibreOffice's own documented, real configure flags: --with-branding=<dir containing intro.png/intro-highres.png/logo.svg/logo_inverted.svg/logo-sc.svg/logo-sc_inverted.svg/about.svg -- confirmed exact filenames directly from configure.ac's brand_files list, not guessed>, --with-vendor, --with-product-name (confirmed real: 'Define the product name. Default is LibreOffice.'). No Java anywhere in this project -- built with --without-java --without-junit (LibreOffice's own README confirms JDK 17+ is normally required for 'many parts', but it's a real, supported, documented off switch). GTK3-only (matches this project's own XFCE stack); GTK4/Qt5/Qt6/KF5/avahi/evolution2/gstreamer/breakpad/online-update/beanshell+javascript-scripting/ODK/epm all explicitly disabled -- none of those are built anywhere else in this project and none are needed for Writer/Calc/Impress. --enable-python=internal (matches TDF's own real Linux release config -- LO's Python (Pyuno) integration is version/ABI-sensitive; building its own bundled interpreter avoids a real compatibility risk against this project's own separately-built python3.14, at the cost of extra build time). DESTDIR handling verified for real by reading solenv/bin/ooinstall directly -- it does honor $ENV{DESTDIR} (unlike a naive assumption that LibreOffice's own INSTALLDIR-based install target wouldn't cooperate with this project's usual 'make DESTDIR=$PKG_DESTDIR install' convention). Installs under /usr/lib/libreoffice (--with-install-dirname does not actually exist as a real configure flag -- a dead code reference in configure.ac was mistaken for one on the first attempt, a real fixed bug; INSTALLDIRNAME is hardcoded to the lowercased package name and can't be overridden -- harmless, since this internal directory name is invisible to end users), the common real-world distro convention for a self-contained LibreOffice tree, with our own hand-written rebranded wrapper scripts (/usr/bin/linuxultraoffice-writer etc.) and .desktop launchers layered on top in this build.sh (not relying on LO's own generated menu entries, which would still say LibreOffice). Real printing support via --enable-cups once packages/cups existed (added specifically for this, see that package's own notes) with --with-tls=openssl (avoids a new GnuTLS/nettle dependency chain by reusing this project's already-built openssl). --disable-postgresql-sdbc since Base's PostgreSQL connector needs Kerberos 5 (krb5_sendauth), never built here, and Base itself isn't menu-exposed yet anyway. || 26.2.5.2 -> 26.2.6.1 bump (latest bugfix on the 26.2 branch). Two new build fixes, both .101-toolchain-specific, neither present at 26.2.5.2 time: (1) Skia (LibreOffice compiles its bundled Skia with clang, hardcoded) died with "'cstddef' file not found" -- clang's Debian-multiarch heuristic now selects the stub GCC dir /usr/lib/gcc/x86_64-linux-gnu/14 (libgcc/CRT only, no libstdc++ headers), left there by the Chromium-152 toolchain fix, over the real /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.0. Fixed with a tiny clang wrapper forcing --gcc-install-dir at the real GCC tree, wired in as LO_CLANG_CC/CXX (build.sh, guarded on the stub dir existing). (2) bundled curl 8.21.0 failed: its configure link-detects memset_explicit (glibc >=2.39 has the symbol) and #defines HAVE_MEMSET_EXPLICIT, but glibc only DECLARES it under _ISOC23 and curl compiles as gnu11 -> implicit-declaration, a hard error under GCC 14. build.sh now passes --with-system-curl (.101's own curl is 8.21.0, same toolchain, libcurl.p
26.8.1.1 Office 297.0 MB 141 Download PackageSource Download .tar.gz
linuxultraoffice-addonsNot in ISO
LinuxUltraOffice Addons -- adds Draw, Base, and Math to your Applications menu; it's only a few KB because Draw/Base/Math are already fully built into the same soffice binary the main linuxultraoffice package installs...
LinuxUltraOffice Addons -- adds Draw, Base, and Math to your Applications menu; it's only a few KB because Draw/Base/Math are already fully built into the same soffice binary the main linuxultraoffice package installs, so this package is just the launcher scripts, icons, and menu entries, not a second copy of the suite. Requested explicitly after the core Writer/Calc/Impress package shipped. No source download, no recompile: Draw/Base/Math are already fully compiled and present inside the same soffice binary the main linuxultraoffice package installs (LibreOffice ships as one monolithic suite -- see packages/linuxultraoffice/metadata.json's own notes). This package is purely wrapper scripts (/usr/bin/linuxultraoffice-draw/-base/-math, each just 'exec .../soffice --draw' etc., identical pattern to the main package's own writer/calc/impress wrappers), matching .desktop launcher entries, and three new app icons (same visual construction/palette as the website's own app_icon_svg() for these three apps, for brand consistency between linuxultraoffice.com and the OS). Real runtime dependency, not build-time only: the linuxultraoffice package must actually be installed first for these wrappers to have anything to exec -- not enforced by the client-side package manager (its 'depends' field is a build-time-only concept for this project's own engine, the OS-side installer doesn't check it), same as any real Linux package manager without a strict dependency solver would behave if a user skipped a listed dependency. || 26.2.6.3 -> 26.8.0.3 (2026-09-14): version label bumped to match the main linuxultraoffice package's real LibreOffice 26.8.0.3 rebuild -- this package has no compiled code of its own (no source tarball beyond the icon asset, no recompile needed), so the bump is purely a rebuild+relabel for catalog accuracy, not a functional change; the wrapper scripts still just exec whatever soffice binary the main package currently has installed.
26.8.0.3 Office 2.5 KB 66 Download PackageSource Download .tar.gz
llvm
BLFS general/llvm.html.
BLFS general/llvm.html. Foundational piece for the Rust+Firefox chain (user's explicit 'reopen the Rust question for real Firefox' direction). Only clang is enabled under LLVM_ENABLE_PROJECTS (no clang-tools-extra/lld/etc -- not needed by Rust or Firefox). LLVM_TARGETS_TO_BUILD trimmed to 'host;BPF' (book says host;AMDGPU, but this is a QEMU-only x86_64 system -- no AMD GPU target needed; BPF added later, real build failure -- the sched_ext/scx package's BPF-side compilation (`clang -target bpf ...`) failed with "unable to create target: 'No available targets are compatible with triple bpf'" against the original host-only build, since the BPF backend wasn't compiled into clang at all). Tests skipped (23GB/19 SBU extra, never exercised elsewhere in this project either).
22.1.8 Development 253.5 MB 43 Download PackageSource Download .tar.gz
lm-sensors
lm_sensors -- libsensors for hardware monitoring.
lm_sensors -- libsensors for hardware monitoring. libksysguard / ksystemstats sensor plugin needs it. ship_in_iso=true: libsensors.so.5 is a transitive dependency of the shipped Qt6 stack (libQt6Core -> ... -> libsensors), so the bundled FlashPhoto/FlashScp Qt apps and PySide6 fail to import without it.
3.6.2 Libraries 142.6 KB 54 Download PackageSource Download .tar.gz
luaNot in ISO
Lua 5.1.5 -- last of the 5.1 series.
Lua 5.1.5 -- last of the 5.1 series. EFL 1.28 requires a system Lua 5.1 (or 5.2, or luajit) interpreter; 5.4 is not accepted. Plain Makefile build (BLFS lua-5.1 recipe): installs the shared lib + headers + a hand-written lua.pc so pkg-config finds it (upstream ships none). ship_in_iso=false -- only pulled in by EFL/Enlightenment.
5.1.5 Libraries 297.0 KB 30 Download PackageSource Download .tar.gz