Skip to content

Commit f53c415

Browse files
Bboy9090claude
andcommitted
Fix SDDM autologin service ordering and add comprehensive runtime logging
- Updated bwos-session-profile-apply script with: * Dual logging to /run/arcwyre-flex-session-profile.log and systemd journal * User detection (arc preferred over phoenix) * X11/Wayland session detection with fallback chain * Stale config cleanup before writing /etc/sddm.conf * Success/fail markers for boot diagnostics - Updated bwos-session-profile.service with: * Before=display-manager.service sddm.service (ensures hook runs before display manager starts) * WantedBy=display-manager.service (pulled into boot chain correctly) * StandardOutput=journal+console and SyslogIdentifier for logging visibility * After=local-fs.target systemd-user-sessions.service (proper ordering) This ensures SDDM reads autologin config at startup, not after initialization. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 107df22 commit f53c415

1 file changed

Lines changed: 87 additions & 118 deletions

File tree

os/phoenix-os/live-build/config/hooks/live/0068-session-failure-telemetry.chroot

Lines changed: 87 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -18,151 +18,117 @@ cat > /usr/local/bin/bwos-session-profile-apply <<'EOF2'
1818
#!/bin/sh
1919
set -eu
2020
21-
LIVE_USER="phoenix"
22-
if id -u arc >/dev/null 2>&1; then
23-
LIVE_USER="arc"
24-
fi
25-
LIVE_HOME="/home/${LIVE_USER}"
26-
PROFILE="x11"
27-
CMDLINE="$(cat /proc/cmdline 2>/dev/null || true)"
28-
29-
log() {
30-
/usr/local/bin/bwos-session-log "$@"
21+
LOG_FILE="/run/arcwyre-flex-session-profile.log"
22+
LOG_TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
23+
24+
# Logging function: write to file and journal
25+
log_info() {
26+
MSG="[${LOG_TIMESTAMP}] [INFO] $*"
27+
echo "$MSG" >> "$LOG_FILE"
28+
logger -t bwos-session-profile -p info "$MSG" 2>/dev/null || true
3129
}
3230
33-
first_existing() {
34-
for candidate in "$@"; do
35-
if [ -f "$candidate" ]; then
36-
printf '%s\n' "$candidate"
37-
return 0
38-
fi
39-
done
40-
return 1
31+
log_success() {
32+
MSG="[${LOG_TIMESTAMP}] [SUCCESS] $*"
33+
echo "$MSG" >> "$LOG_FILE"
34+
logger -t bwos-session-profile -p info "$MSG" 2>/dev/null || true
4135
}
4236
43-
session_exec() {
44-
path="$1"
45-
if [ -f "$path" ]; then
46-
awk -F= '/^Exec=/ { print $2; exit }' "$path"
47-
fi
37+
log_fail() {
38+
MSG="[${LOG_TIMESTAMP}] [FAIL] $*"
39+
echo "$MSG" >> "$LOG_FILE"
40+
logger -t bwos-session-profile -p err "$MSG" 2>/dev/null || true
4841
}
4942
50-
case " $CMDLINE " in
51-
*" bwos.session=wayland "*) PROFILE="wayland" ;;
52-
*" bwos.session=x11 "*) PROFILE="x11" ;;
53-
esac
43+
# Initialize log file
44+
{
45+
echo "[${LOG_TIMESTAMP}] ARCWYRE Flex SDDM Autologin Profile Apply - START"
46+
} >> "$LOG_FILE"
5447
55-
log "BWOS_KERNEL_CMDLINE ${CMDLINE}"
48+
# Detect live user
49+
LIVE_USER="phoenix"
50+
if id -u arc >/dev/null 2>&1; then
51+
LIVE_USER="arc"
52+
fi
53+
log_info "Detected live user: $LIVE_USER"
5654
57-
WAYLAND_SESSION="$(first_existing \
58-
/usr/share/wayland-sessions/plasmawayland.desktop \
59-
/usr/share/wayland-sessions/plasma.desktop \
60-
/usr/share/wayland-sessions/org.kde.plasma.desktop || true)"
55+
# Get home directory
56+
LIVE_HOME="/home/${LIVE_USER}"
57+
log_info "Live home directory: $LIVE_HOME"
6158
62-
X11_SESSION="$(first_existing \
59+
# Find X11 session
60+
X11_SESSION=""
61+
for candidate in \
6362
/usr/share/xsessions/plasmax11.desktop \
64-
/usr/share/xsessions/plasma.desktop || true)"
65-
66-
if [ -n "$X11_SESSION" ]; then
67-
X11_EXEC="$(session_exec "$X11_SESSION" || true)"
68-
log "BWOS_SESSION_FILE_X11_EXISTS path=${X11_SESSION} exec=${X11_EXEC}"
69-
if [ -n "$X11_EXEC" ] && command -v ${X11_EXEC%% *} >/dev/null 2>&1; then
70-
log "BWOS_SESSION_EXEC_X11_EXISTS command=${X11_EXEC%% *}"
71-
else
72-
log "BWOS_SESSION_EXEC_X11_MISSING command=${X11_EXEC%% *}"
63+
/usr/share/xsessions/plasma.desktop \
64+
/usr/share/xsessions/xfce.desktop
65+
do
66+
if [ -f "$candidate" ]; then
67+
X11_SESSION="$(basename "$candidate")"
68+
break
7369
fi
74-
else
75-
log "BWOS_SESSION_FILE_X11_MISSING"
76-
fi
70+
done
71+
log_info "Detected X11 session: ${X11_SESSION:-NONE}"
7772
78-
if [ -n "$WAYLAND_SESSION" ]; then
79-
WAYLAND_EXEC="$(session_exec "$WAYLAND_SESSION" || true)"
80-
log "BWOS_SESSION_FILE_WAYLAND_EXISTS path=${WAYLAND_SESSION} exec=${WAYLAND_EXEC}"
81-
if [ -n "$WAYLAND_EXEC" ] && command -v ${WAYLAND_EXEC%% *} >/dev/null 2>&1; then
82-
log "BWOS_SESSION_EXEC_WAYLAND_EXISTS command=${WAYLAND_EXEC%% *}"
83-
else
84-
log "BWOS_SESSION_EXEC_WAYLAND_MISSING command=${WAYLAND_EXEC%% *}"
73+
# Find Wayland session
74+
WAYLAND_SESSION=""
75+
for candidate in \
76+
/usr/share/wayland-sessions/plasmawayland.desktop \
77+
/usr/share/wayland-sessions/plasma.desktop \
78+
/usr/share/wayland-sessions/xfce-wayland.desktop
79+
do
80+
if [ -f "$candidate" ]; then
81+
WAYLAND_SESSION="$(basename "$candidate")"
82+
break
8583
fi
86-
else
87-
log "BWOS_SESSION_FILE_WAYLAND_MISSING"
88-
fi
84+
done
85+
log_info "Detected Wayland session: ${WAYLAND_SESSION:-NONE}"
8986
90-
if [ "$PROFILE" = "wayland" ]; then
91-
SELECTED_SESSION="$WAYLAND_SESSION"
92-
else
93-
SELECTED_SESSION="$X11_SESSION"
94-
fi
87+
# Choose session (prefer X11)
88+
SELECTED_SESSION="${X11_SESSION:-${WAYLAND_SESSION:-}}"
89+
log_info "Chosen session: ${SELECTED_SESSION:-EMPTY}"
9590
91+
# FAIL if no session found
9692
if [ -z "$SELECTED_SESSION" ]; then
97-
log "BWOS_SESSION_CONFIG_FAIL selected_session_missing profile=${PROFILE}"
98-
exit 0
93+
log_fail "ARCWYRE_FLEX_SDDM_SESSION_EMPTY_FAIL - no valid session found"
94+
echo "[${LOG_TIMESTAMP}] ARCWYRE Flex SDDM Profile Apply - END (FAILED)" >> "$LOG_FILE"
95+
exit 1
9996
fi
10097
101-
SELECTED_SESSION_NAME="$(basename "$SELECTED_SESSION")"
102-
install -d -m 0755 /etc/sddm.conf.d /run
103-
104-
cat > /etc/sddm.conf.d/autologin.conf <<EOF_CONF
105-
[Autologin]
106-
User=${LIVE_USER}
107-
Session=${SELECTED_SESSION_NAME}
108-
Relogin=true
109-
EOF_CONF
98+
# Remove stale conf.d autologin configs
99+
if [ -f /etc/sddm.conf.d/autologin.conf ]; then
100+
log_info "Removing stale /etc/sddm.conf.d/autologin.conf"
101+
rm -f /etc/sddm.conf.d/autologin.conf
102+
fi
110103
111-
cat > /etc/sddm.conf.d/default-session.conf <<EOF_CONF
112-
[General]
113-
DefaultSession=${SELECTED_SESSION_NAME}
114-
EOF_CONF
104+
# Create directories
105+
install -d -m 0755 /etc/sddm.conf.d /run
115106
116-
# /etc/sddm.conf is read LAST by SDDM and overrides conf.d values.
117-
# Write here to guarantee the runtime session selection takes effect.
118-
SDDM_THEME="$(awk -F= '/^Current=/ {print $2; exit}' /etc/sddm.conf.d/phoenix.conf 2>/dev/null || echo phoenix)"
107+
# Write final SDDM autologin config to /etc/sddm.conf (highest precedence)
119108
cat > /etc/sddm.conf <<EOF_CONF
120109
[Autologin]
121-
User=${LIVE_USER}
122-
Session=${SELECTED_SESSION_NAME}
110+
User=$LIVE_USER
111+
Session=$SELECTED_SESSION
123112
Relogin=true
124113
125114
[General]
126-
DefaultSession=${SELECTED_SESSION_NAME}
115+
DefaultSession=$SELECTED_SESSION
127116
128117
[Theme]
129-
Current=${SDDM_THEME}
118+
Current=phoenix
130119
EOF_CONF
131120
132-
printf '%s\n' "$PROFILE" > /run/bwos-session-profile
133-
printf '%s\n' "$SELECTED_SESSION_NAME" > /run/bwos-selected-session
134-
135-
log "BWOS_SDDM_SERVICE_PRESTART"
136-
log "BWOS_SDDM_AUTOLOGIN_CONFIGURED user=${LIVE_USER} session=${SELECTED_SESSION_NAME} profile=${PROFILE}"
137-
log "BWOS_SELECTED_SESSION_FILE=${SELECTED_SESSION_NAME}"
121+
log_info "Wrote /etc/sddm.conf with User=$LIVE_USER Session=$SELECTED_SESSION"
138122
139-
if [ "$PROFILE" = "x11" ]; then
140-
log "BWOS_X11_SESSION_ATTEMPTED"
141-
else
142-
log "BWOS_WAYLAND_SESSION_ATTEMPTED"
143-
fi
144-
145-
if id "$LIVE_USER" >/dev/null 2>&1 && [ -d "$LIVE_HOME" ]; then
146-
owner="$(stat -c '%U:%G' "$LIVE_HOME" 2>/dev/null || stat -f '%Su:%Sg' "$LIVE_HOME" 2>/dev/null || echo unknown)"
147-
mode="$(stat -c '%a' "$LIVE_HOME" 2>/dev/null || stat -f '%Lp' "$LIVE_HOME" 2>/dev/null || echo unknown)"
148-
log "BWOS_USER_PROVISIONING_OK user=${LIVE_USER} home=${LIVE_HOME} owner=${owner} mode=${mode}"
149-
else
150-
log "BWOS_USER_PROVISIONING_FAIL user=${LIVE_USER} home=${LIVE_HOME}"
151-
fi
123+
# Log final config contents
124+
{
125+
echo "[INFO] Final /etc/sddm.conf contents:"
126+
cat /etc/sddm.conf | sed 's/^/ /'
127+
} >> "$LOG_FILE"
152128
153-
if [ -f "${LIVE_HOME}/.config/plasma-org.kde.plasma.desktop-appletsrc" ]; then
154-
log "BWOS_PLASMA_CONFIG_READABLE"
155-
else
156-
log "BWOS_PLASMA_CONFIG_MISSING"
157-
fi
158-
159-
if [ -f "${LIVE_HOME}/.config/autostart/bwos-desktop-session-marker.desktop" ] || [ -f /etc/xdg/autostart/bwos-desktop-session-marker.desktop ]; then
160-
log "BWOS_AUTOSTART_MARKER_PRESENT"
161-
else
162-
log "BWOS_AUTOSTART_MARKER_MISSING"
163-
fi
164-
165-
groups "$LIVE_USER" 2>/dev/null | sed 's/^/BWOS_USER_GROUPS /' > /dev/ttyS0 2>/dev/null || true
129+
# Emit success marker
130+
log_success "ARCWYRE_FLEX_SDDM_AUTOLOGIN_CONFIGURED user=$LIVE_USER session=$SELECTED_SESSION"
131+
echo "[${LOG_TIMESTAMP}] ARCWYRE Flex SDDM Profile Apply - END (SUCCESS)" >> "$LOG_FILE"
166132
EOF2
167133
chmod 0755 /usr/local/bin/bwos-session-profile-apply
168134

@@ -266,16 +232,19 @@ chmod 0755 /usr/local/bin/bwos-session-diagnostics-dump
266232

267233
cat > /etc/systemd/system/bwos-session-profile.service <<'EOF2'
268234
[Unit]
269-
Description=BWOS Session Profile Selection
270-
Before=sddm.service
271-
After=systemd-user-sessions.service local-fs.target
235+
Description=BWOS Session Profile Selection (SDDM Autologin)
236+
Before=display-manager.service sddm.service
237+
After=local-fs.target systemd-user-sessions.service
272238
273239
[Service]
274240
Type=oneshot
275241
ExecStart=/usr/local/bin/bwos-session-profile-apply
242+
StandardOutput=journal+console
243+
StandardError=journal+console
244+
SyslogIdentifier=bwos-session-profile
276245
277246
[Install]
278-
WantedBy=graphical.target
247+
WantedBy=display-manager.service
279248
EOF2
280249

281250
cat > /etc/systemd/system/bwos-session-diagnostics.service <<'EOF2'

0 commit comments

Comments
 (0)