blob: 06e532ab6c4ed7b8329ff52693bed7bdf8f55f4f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#!/bin/bash
set -euo pipefail
# WSL Systemd Fix Script
# Run this once per WSL restart to enable systemd user sessions
# Detect if running on WSL
if [[ ! -f /proc/version ]] || ! grep -qi microsoft /proc/version; then
echo "Not running on WSL - nothing to do"
exit 0
fi
USER_ID=$(id -u)
USER_NAME=$(id -un)
USER_GROUP=$(id -gn)
RUNTIME_DIR="/run/user/${USER_ID}"
echo "=== WSL Systemd User Session Setup ==="
echo "User: ${USER_NAME} (UID: ${USER_ID})"
echo "Runtime directory: ${RUNTIME_DIR}"
echo ""
# Check if already set up
if [[ -d "${RUNTIME_DIR}" ]] && [[ -S "${RUNTIME_DIR}/bus" ]]; then
echo "Runtime directory already exists and dbus socket is present."
echo "Setting environment variables..."
export XDG_RUNTIME_DIR="${RUNTIME_DIR}"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${RUNTIME_DIR}/bus"
echo ""
echo "Environment set. You can now use: make status, make backup-now, etc."
exit 0
fi
# Create runtime directory (requires sudo)
if [[ ! -d "${RUNTIME_DIR}" ]]; then
echo "Creating runtime directory (requires sudo)..."
sudo mkdir -p "${RUNTIME_DIR}"
sudo chmod 700 "${RUNTIME_DIR}"
sudo chown "${USER_NAME}:${USER_GROUP}" "${RUNTIME_DIR}"
echo "✓ Runtime directory created"
fi
# Start user systemd service (requires sudo)
echo "Starting systemd user session (requires sudo)..."
sudo systemctl start "user@${USER_ID}.service" 2>/dev/null || true
echo "✓ Systemd user session started"
# Wait a moment for dbus socket to be created
echo "Waiting for dbus socket..."
for i in {1..10}; do
if [[ -S "${RUNTIME_DIR}/bus" ]]; then
break
fi
sleep 0.5
done
if [[ ! -S "${RUNTIME_DIR}/bus" ]]; then
echo "Warning: dbus socket not found, systemd may not be fully initialized"
fi
# Set environment variables
export XDG_RUNTIME_DIR="${RUNTIME_DIR}"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${RUNTIME_DIR}/bus"
# Reload systemd daemon
systemctl --user daemon-reexec 2>/dev/null || true
echo ""
echo "=== Setup Complete ==="
echo "Environment variables set for current session:"
echo " XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}"
echo " DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}"
echo ""
echo "You can now use: make status, make backup-now, make check-now, etc."
echo ""
echo "Note: Run 'make fix-wsl' again after each WSL restart."
|