| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #!/bin/sh
- # mjdev desktop wayland session
- # started by the display manager via /usr/share/wayland-sessions/mjdev.desktop
- export XDG_CURRENT_DESKTOP=mjdev
- export XDG_SESSION_TYPE=wayland
- export MOZ_ENABLE_WAYLAND=1
- export QT_QPA_PLATFORM="wayland;xcb"
- export _JAVA_AWT_WM_NONREPARENTING=1
- # allow wlroots to start on llvmpipe (software GL). On real hardware mesa uses the
- # GPU and this is ignored; in a VM / headless box without GPU passthrough mesa falls
- # back to llvmpipe and wlroots otherwise refuses to create a renderer ("Software
- # rendering detected, please use WLR_RENDERER_ALLOW_SOFTWARE") and the compositor
- # exits immediately -> black screen + tty1 autologin crash-loop.
- export WLR_RENDERER_ALLOW_SOFTWARE=1
- # NOTE: SKIKO_RENDER_API is intentionally NOT set here. The compositor (mjdevc) detects at runtime
- # whether it got a hardware or software GL renderer and exports SKIKO_RENDER_API=SOFTWARE for the
- # shell only when GL is software (VM / no GPU) — so real GPUs use hardware GL automatically.
- # desktop shell binary - deb/appimage install location, gradle dev fallback
- SHELL_CMD="/opt/mjdev-desktop/bin/mjdev-desktop"
- if [ ! -x "$SHELL_CMD" ]; then
- SHELL_CMD="$HOME/.local/bin/mjdev-desktop"
- fi
- # compositor binary - /usr/bin (deb) or /usr/local/bin (manual install)
- MJDEVC="$(command -v mjdevc 2>/dev/null)"
- if [ -z "$MJDEVC" ]; then
- MJDEVC="/usr/bin/mjdevc"
- fi
- # clean up the activation environment the compositor exported into the
- # persistent systemd --user manager. with KillUserProcesses=no (the distro
- # default) that manager survives logout, so leaving a stale WAYLAND_DISPLAY /
- # DISPLAY behind poisons the next login - of any session, not just ours.
- # run on every exit path (normal exit, crash, signal) - no exec, so we get here.
- cleanup() {
- systemctl --user unset-environment \
- WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE \
- 2>/dev/null || true
- }
- trap cleanup EXIT HUP INT TERM
- # log the compositor + shell output so a failed start is diagnosable (otherwise the
- # tty1 session just dies to a black screen with no trace). keep the previous run.
- LOG_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/mjdev-desktop"
- mkdir -p "$LOG_DIR"
- [ -f "$LOG_DIR/session.log" ] && mv -f "$LOG_DIR/session.log" "$LOG_DIR/session.log.1"
- "$MJDEVC" --session --shell-cmd "$SHELL_CMD" >"$LOG_DIR/session.log" 2>&1
|