48 lines
1.6 KiB
Bash
Executable file
48 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
# kick-session -- display-manager session entry for kick.
|
|
#
|
|
# A display manager (lightdm/gdm/sddm/greetd) keeps only one generation of
|
|
# session output (~/.xsession-errors + .old), so crash backtraces and flicker
|
|
# evidence are lost after two logins. This wrapper persists every boot to
|
|
# its own timestamped log and then execs kick, passing all arguments
|
|
# through untouched (screen mode, --panel, tabs, ...). Environment
|
|
# (KICK_MODE, KICK_LOG, ...) passes through equally untouched.
|
|
#
|
|
# Usage (see kick-session.desktop):
|
|
# env KICK_MODE=standalone kick-session [kick args...]
|
|
set -u
|
|
|
|
USER_NAME=${USER:-unknown}
|
|
HOME_DIR=${HOME:-/tmp}
|
|
XDG_HOME=${XDG_DATA_HOME:-$HOME_DIR/.local/share}
|
|
LOGDIR="$XDG_HOME/kick/logs"
|
|
if ! mkdir -p "$LOGDIR" 2>/dev/null; then
|
|
LOGDIR="/tmp/kick-logs-$USER_NAME"
|
|
mkdir -p "$LOGDIR" 2>/dev/null || LOGDIR="/tmp"
|
|
fi
|
|
|
|
STAMP=$(date +%Y%m%d-%H%M%S 2>/dev/null || echo "nodate")
|
|
LOG="$LOGDIR/session-$STAMP-$$.log"
|
|
|
|
# Retention: keep the newest 10 session logs, prune the rest. Runs before
|
|
# the current log exists, so the current boot is never a candidate.
|
|
if [ -d "$LOGDIR" ]; then
|
|
# shellcheck disable=SC2012
|
|
ls -t "$LOGDIR"/session-*.log 2>/dev/null | tail -n +11 | xargs -r rm -f --
|
|
fi
|
|
|
|
if command -v kick >/dev/null 2>&1; then
|
|
KICK_BIN=kick
|
|
else
|
|
echo "kick-session: 'kick' not found in PATH=$PATH" >&2
|
|
exit 127
|
|
fi
|
|
|
|
if exec >"$LOG" 2>&1; then
|
|
echo "kick-session: logging to $LOG"
|
|
echo "kick-session: date (utc): $(date -u +%FT%TZ 2>/dev/null || date)"
|
|
echo "kick-session: args: $*"
|
|
else
|
|
echo "kick-session: cannot write $LOG, keeping session fds" >&2
|
|
fi
|
|
exec "$KICK_BIN" "$@"
|