Created
May 8, 2026 07:09
-
-
Save vinitkumar/aaf3e86709deaa3cfea1e89f6ad68951 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -euo pipefail | |
| OUT="active-user-debug-$(hostname)-$(date +%Y%m%d-%H%M%S).log" | |
| exec > >(tee "$OUT") 2>&1 | |
| echo "=== Host Info ===" | |
| date -Is | |
| hostnamectl || true | |
| echo "kernel: $(uname -a)" | |
| echo "whoami: $(whoami)" | |
| echo "id: $(id)" | |
| echo | |
| echo "=== Binary Presence ===" | |
| command -v loginctl || true | |
| command -v who || true | |
| command -v jq || true | |
| echo | |
| echo "=== who ===" | |
| who || true | |
| echo | |
| echo "=== loginctl list-sessions (table) ===" | |
| loginctl list-sessions || true | |
| echo | |
| echo "=== loginctl list-sessions (json) ===" | |
| SESS_JSON="$(loginctl list-sessions --output=json 2>/dev/null || true)" | |
| echo "$SESS_JSON" | |
| echo | |
| echo "=== Per-session details (raw) ===" | |
| if [[ -n "${SESS_JSON}" ]] && command -v jq >/dev/null 2>&1; then | |
| echo "$SESS_JSON" | jq -c '.[]' | while read -r s; do | |
| sid="$(echo "$s" | jq -r '.session // empty')" | |
| user="$(echo "$s" | jq -r '.user // empty')" | |
| tty="$(echo "$s" | jq -r '.tty // empty')" | |
| seat="$(echo "$s" | jq -r '.seat // empty')" | |
| echo "--- session=$sid user=$user tty=$tty seat=$seat ---" | |
| loginctl show-session "$sid" \ | |
| --property=Id \ | |
| --property=Name \ | |
| --property=User \ | |
| --property=Active \ | |
| --property=State \ | |
| --property=Remote \ | |
| --property=Type \ | |
| --property=Class \ | |
| --property=Seat \ | |
| --property=TTY \ | |
| --property=Display \ | |
| --property=Leader || true | |
| echo | |
| done | |
| else | |
| echo "No JSON sessions or jq missing." | |
| fi | |
| echo "=== Emulate current LoggedInUsers logic ===" | |
| CURRENT_MATCH="" | |
| if [[ -n "${SESS_JSON}" ]] && command -v jq >/dev/null 2>&1; then | |
| while IFS= read -r s; do | |
| sid="$(echo "$s" | jq -r '.session // empty')" | |
| user="$(echo "$s" | jq -r '.user // empty')" | |
| tty="$(echo "$s" | jq -r '.tty // empty')" | |
| seat="$(echo "$s" | jq -r '.seat // empty')" | |
| # Mirrors app/models/logged_in_users.rb console_session? | |
| is_console="false" | |
| if [[ -n "$seat" ]]; then | |
| if [[ -z "$tty" || "$tty" == tty* ]]; then | |
| is_console="true" | |
| fi | |
| fi | |
| if [[ "$is_console" == "true" ]]; then | |
| info="$(loginctl show-session "$sid" --property=Active --property=Name 2>/dev/null || true)" | |
| if echo "$info" | grep -Eq '^Active=(yes|Yes)$'; then | |
| CURRENT_MATCH="$user" | |
| echo "matched_current_logic_session=$sid user=$user" | |
| break | |
| fi | |
| fi | |
| done < <(echo "$SESS_JSON" | jq -c '.[]') | |
| fi | |
| echo "current_logic_active_display_user='${CURRENT_MATCH}'" | |
| echo | |
| echo "=== Emulate robust logic (Active=yes OR State=active) ===" | |
| ROBUST_MATCH="" | |
| if [[ -n "${SESS_JSON}" ]] && command -v jq >/dev/null 2>&1; then | |
| while IFS= read -r s; do | |
| sid="$(echo "$s" | jq -r '.session // empty')" | |
| user="$(echo "$s" | jq -r '.user // empty')" | |
| seat="$(echo "$s" | jq -r '.seat // empty')" | |
| tty="$(echo "$s" | jq -r '.tty // empty')" | |
| if [[ -n "$seat" || -n "$tty" ]]; then | |
| info="$(loginctl show-session "$sid" --property=Active --property=State --property=Name --property=Remote 2>/dev/null || true)" | |
| active="$(echo "$info" | awk -F= '/^Active=/{print tolower($2)}')" | |
| state="$(echo "$info" | awk -F= '/^State=/{print tolower($2)}')" | |
| remote="$(echo "$info" | awk -F= '/^Remote=/{print tolower($2)}')" | |
| name="$(echo "$info" | awk -F= '/^Name=/{print $2}')" | |
| if [[ "$name" == "$user" && "$remote" != "yes" && ( "$active" == "yes" || "$state" == "active" ) ]]; then | |
| ROBUST_MATCH="$user" | |
| echo "matched_robust_logic_session=$sid user=$user active=$active state=$state remote=$remote" | |
| break | |
| fi | |
| fi | |
| done < <(echo "$SESS_JSON" | jq -c '.[]') | |
| fi | |
| echo "robust_logic_active_display_user='${ROBUST_MATCH}'" | |
| echo | |
| echo "=== done ===" | |
| echo "saved_log=$OUT" |
Author
vinitkumar
commented
May 8, 2026
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment