56 lines
2.0 KiB
Plaintext
56 lines
2.0 KiB
Plaintext
|
|
#!/usr/bin/env bash
|
||
|
|
# Open a command in the user's available terminal emulator, with logging.
|
||
|
|
# Usage: backtunnel-open-term <cmd> [args...]
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
LOG_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/backtunnel"
|
||
|
|
[[ -d "$LOG_DIR" ]] || mkdir -p "$LOG_DIR"
|
||
|
|
LOG_FILE="${LOG_DIR}/servicemenu.$(date +%Y%m%d-%H%M%S).log"
|
||
|
|
|
||
|
|
# Simple rotation: keep the last 10 files
|
||
|
|
ls -1t "$LOG_DIR"/servicemenu.*.log 2>/dev/null | awk 'NR>10{print}' | xargs -r rm -f
|
||
|
|
|
||
|
|
cmd=( "$@" )
|
||
|
|
{
|
||
|
|
echo "=== BackTunnel servicemenu ==="
|
||
|
|
echo "Time: $(date -Is)"
|
||
|
|
echo "PWD: $(pwd)"
|
||
|
|
echo "User: $(id -un) (uid=$(id -u))"
|
||
|
|
echo "Cmd: ${cmd[*]}"
|
||
|
|
echo "Env: BACKTUNNEL_DEBUG=${BACKTUNNEL_DEBUG:-} SHELL=${SHELL:-} DISPLAY=${DISPLAY:-}"
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Prefer Konsole on KDE sessions; otherwise probe common terminals
|
||
|
|
detect_term() {
|
||
|
|
if [[ -n "${KDE_FULL_SESSION:-}" ]] && command -v konsole >/dev/null 2>&1; then
|
||
|
|
echo "konsole"; return
|
||
|
|
fi
|
||
|
|
for t in kitty alacritty kgx gnome-terminal tilix xfce4-terminal konsole xterm; do
|
||
|
|
if command -v "$t" >/dev/null 2>&1; then echo "$t"; return; fi
|
||
|
|
done
|
||
|
|
echo "" # none
|
||
|
|
}
|
||
|
|
|
||
|
|
term="$(detect_term)"
|
||
|
|
echo "Chosen terminal: ${term:-<none>}"; echo
|
||
|
|
|
||
|
|
# Run command in terminal (use hold/noclose if supported)
|
||
|
|
case "$term" in
|
||
|
|
konsole) exec konsole --noclose -e "${cmd[@]}" ;;
|
||
|
|
kitty) exec kitty -e "${cmd[@]}" ;;
|
||
|
|
alacritty) exec alacritty -e "${cmd[@]}" ;;
|
||
|
|
gnome-terminal) exec gnome-terminal -- bash -lc "exec \"${cmd[0]}\" ${cmd[@]:1}" ;;
|
||
|
|
kgx) exec kgx -- bash -lc "exec \"${cmd[0]}\" ${cmd[@]:1}" ;; # GNOME Console
|
||
|
|
tilix) exec tilix -e "${cmd[@]}" ;;
|
||
|
|
xfce4-terminal) exec xfce4-terminal -e "${cmd[@]}" ;;
|
||
|
|
xterm) exec xterm -hold -e "${cmd[@]}" ;;
|
||
|
|
*)
|
||
|
|
echo "No terminal emulator found. Running in background (nohup)."
|
||
|
|
nohup "${cmd[@]}" >/dev/null 2>&1 &
|
||
|
|
echo "Started in background (pid=$!)."
|
||
|
|
echo "Log: $LOG_FILE"
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
} | tee -a "$LOG_FILE"
|