Files
latchd/CHANGELOG.md

3.9 KiB

Changelog

0.1.0 — Unreleased

first public release

What's In

  • tui login screen with username/password fields, session switcher, and status messages
  • supports x11, wayland, and tty sessions
  • pam authentication via cgo (thread-locked for safety)
  • faillock integration — detects lockouts, shows remaining attempts, admin bypass via ctrl+u
  • conway's game of life background rendered at 30 fps with unicode half-block characters
  • spring animation on switcher transitions
  • shake animation on failed login
  • caps lock indicator via ioctl
  • configurable power controls (shutdown/reboot on f1/f2 by default)
  • toml configuration with $VARIABLE substitution
  • preview mode (--preview) to test the login screen without leaving your session
  • utmpx user accounting (glibc only)
  • x11 session setup — xauthority cookies, sigusr1 handshake, server timeout
  • privilege dropping for child processes
  • log piping with 64 mb cap

Recent Fixes

  • utmpx time field portability — replaced hardcoded C.__uint32_t / C.__int32_t casts with a C helper function (auth/utmpx_time.h) that lets the compiler handle type conversion. fixes build failure on systems where ut_tv uses struct timeval instead of the 32/64 compat struct
  • cgo pointer safety for pam — replaced unsafe.Pointer(&h) (Go stack pointer passed to C) with storeHandle/loadHandle helpers that keep the cgo.Handle in C-heap memory. fixes cgo argument has Go pointer to unpinned Go pointer panic on Go 1.22+
  • pam conversation callback — fixed unsafe.Slice using &r (pointer-to-pointer) as the backing array instead of r (the calloc'd response array), which wrote password bytes into random stack memory. also now only responds to PAM_PROMPT_ECHO_OFF/PAM_PROMPT_ECHO_ON messages — info and error messages get nil. fixes pam_unix: auth could not identify password
  • cgo handle lifecycle — moved cgo.Handle and its C-heap backing from Validate (where they were defer-freed on return) into the Credentials struct so they stay alive through OpenSession and until CloseSession. fixes misuse of an invalid Handle panic
  • session spawning — replaced the broken ForkExec (which relaunched the same binary with made-up flags) with a direct session.Spawn call that drops privileges and runs the desktop in-process. fixes flag provided but not defined: -user
  • renamed extra/ fileslemurs.pamlatchd.pam, lemurs.servicelatchd.service
  • readme credits — added a credits section acknowledging lemurs for the extra/ directory structure and session scanning approach
  • makefile enable and update targetsmake enable stops any running DM, disables the aliased display-manager, and enables latchd. make update runs uninstall → git pull → reinstall in one command
  • missing extra/ directory — added extra/config.toml, extra/xsetup.sh, extra/lemurs.pam, and extra/lemurs.service so make install can find them
  • makefile deps target — added make deps to automatically install libpam0g-dev and build-essential, and verify go is present
  • readme overhaul — rewrote for clarity: added "what problem does this solve", "how it works", known issues, simpler install instructions, and proper dependency listing
  • view cleanup — removed the non-functional automata background overlay from View() (the Frame() was never called, and the black-space placeholder caused EEEE garbage characters on some terminals). also removed a hardcoded 80-char width on the top bar so it adapts to the terminal

What's Missing

  • no tests
  • session leader is the latchd process, not the desktop — pam session tracking via systemd-logind may be imperfect
  • not all config options affect the rendering yet
  • occasional terminal state corruption on abrupt exit
  • automata background rendered as tick-only visual (not wired into the view yet)