xprop is not a Debian package name — it's in x11-utils. Also replace
pip3 install with python3-websocket from apt (same library, no pip needed).
This fixes the apt failure that prevented lightdm from being installed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Allows SSH as root during first-boot setup phase so we can run
commands without relying on the Proxmox console for paste.
install-kiosk.sh already disables this after kiosk setup completes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Debian netinstall adds cdrom: to sources.list. With the ISO still
attached in the VM, apt-get update fails on it. Strip it before
running apt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
d-i finish-install/reboot_in_background doesn't suppress the 'Installation
complete, click Continue' dialog in Trixie. Instead, fork a background
reboot from late_command that fires 3s after setup completes, killing the
dialog before it can block. Also removes the redundant reboot_in_background
setting.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes all interactive prompts from install-kiosk.sh. Username fixed
to 'kiosk', display name fixed to 'Kiosk'. Reboots automatically after
setup without waiting for user input.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the username prompt — all installs use 'kiosk' as the system
user. Only the senior's display name is asked during first-boot setup.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces kiosk-firstboot.service (which got SIGHUP'd by getty) with a
simpler approach: configure getty@tty1 to auto-login root, run kiosk-setup
from .bash_profile. Cleaner TTY ownership — no service/getty conflicts.
install-kiosk.sh now removes the auto-login config and kiosk-setup script
on completion so root doesn't auto-login after the kiosk is running.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Conflicts=getty@tty1 ensures systemd releases TTY1 before kiosk-setup
runs interactively. Also add partman/choose_partition select finish to
preseed so disk write confirmation is fully automated.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Close the hamburger panel on outside click/focus via X11 (xinput/xdotool)
without a fullscreen overlay; point home Email to Roundcube; sync
home-screen-index.html in deploy/install; remove credentials.md from git
and document private LAN-only Gitea usage.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Replace google-chrome with /snap/bin/chromium
- Remove --test-type flag (was triggering Google bot detection/CAPTCHA)
- Add --disable-blink-features=AutomationControlled (hides webdriver flag)
- Move profile dir to /home/jgitta/chromium-kiosk (snap can't write to .config)
- Uninstall google-chrome-stable and its apt repo
QMenu has z-order and event-grab issues under Openbox/X11 — the menu was
being created successfully but either appeared behind Chrome or was
dismissed instantly by the mouse-release event.
Replace with BookmarkPanel: a QWidget using Qt.Tool | WindowStaysOnTopHint
| FramelessWindowHint (same flags as the toolbar itself). Since the toolbar
already stays above Chrome, the panel does too. Features:
- Scrollable list of all bookmarks with folder headers
- Closes when clicking anywhere outside
- Manage Bookmarks entry at the bottom
- Toggle open/close on hamburger button
Roundcube autologin fix:
- Added missing session->regenerate_id(false) and session->set_auth_cookie()
calls after login, matching Roundcube's normal login flow in index.php.
Without these, the roundcube_sessauth cookie was never set, causing every
second request to fail with 'session is invalid or expired'.
Hamburger menu fix:
- Added activateWindow() + raise_() + processEvents() before menu.exec_()
to ensure the toolbar window is active before the QMenu event loop starts.
Without this, WA_ShowWithoutActivating prevents focus from being grabbed
and the menu vanishes immediately.
- Added try/except to surface any silent errors.
- Hamburger menu: calculate explicit QPoint position (right-aligned below
toolbar) instead of relying on Qt overflow logic with bottomRight() anchor.
sizeHint() used for width with 360px fallback.
- Roundcube login: clear mail.jgitta.com session cookie from Chrome's
SQLite Cookies DB on every startup so autologin always fires cleanly
instead of showing 'session is invalid or expired'.
Change menu anchor from bottomLeft() to bottomRight() so Qt's built-in
overflow logic flips the menu leftward when the button is near the right
screen edge. All bookmarks now visible.
- PyQt5 floating toolbar (Back, Forward, HOME, Bookmarks) over Google Chrome
- Scrollable bookmarks bar with nested folder dropdown menus
- Chrome DevTools Protocol (CDP) for navigation control
- Home screen with large senior-friendly buttons (Gmail, Google, Weather, News, Facebook, Messenger, YouTube)
- Automatic GPU/ML cache cleanup on every Chrome launch
- Kiosk hardening: TTY switching blocked, keyboard shortcuts intercepted, auto-restart on crash
- System config files and install script included