Fix autostart for Wayland: use system-wide service instead of user service

- Replaced failing systemd user service with system-wide service
- System service more reliable on Wayland/Bookworm systems
- Service creates /etc/systemd/system/kiwy-player.service
- Runs as pi user with proper display environment variables
- Adds Restart=on-failure for robustness
- Keeps XDG and cron methods as additional fallback layers

This resolves autostart failures after recent system updates.
This commit is contained in:
Kiwy Player
2026-01-17 20:58:39 +02:00
parent 6bf4e3735a
commit 3531760e16

View File

@@ -35,7 +35,7 @@ setup_autostart() {
SYSTEMD_DIR="$ACTUAL_HOME/.config/systemd/user" SYSTEMD_DIR="$ACTUAL_HOME/.config/systemd/user"
LXDE_AUTOSTART="$ACTUAL_HOME/.config/lxsession/LXDE-pi/autostart" LXDE_AUTOSTART="$ACTUAL_HOME/.config/lxsession/LXDE-pi/autostart"
# Method 1: XDG Autostart (works with most desktop environments) # Method 1: XDG Autostart (works with most desktop environments including Wayland)
echo "Creating XDG autostart entry..." echo "Creating XDG autostart entry..."
mkdir -p "$AUTOSTART_DIR" mkdir -p "$AUTOSTART_DIR"
@@ -44,19 +44,21 @@ setup_autostart() {
Type=Application Type=Application
Name=Kivy Signage Player Name=Kivy Signage Player
Comment=Digital Signage Player Comment=Digital Signage Player
Exec=bash -c "cd $SCRIPT_DIR && bash start.sh" Exec=bash -c "cd $SCRIPT_DIR && exec bash start.sh"
Icon=media-video-display Icon=media-video-display
Categories=Utility; Categories=Utility;
NoDisplay=false NoDisplay=false
Terminal=true Terminal=true
StartupNotify=false StartupNotify=false
Hidden=false Hidden=false
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-delay=5
EOF EOF
# Replace $SCRIPT_DIR with actual path in the file # Replace $SCRIPT_DIR with actual path in the file
sed -i "s|\$SCRIPT_DIR|$SCRIPT_DIR|g" "$AUTOSTART_DIR/kivy-signage-player.desktop" sed -i "s|\$SCRIPT_DIR|$SCRIPT_DIR|g" "$AUTOSTART_DIR/kivy-signage-player.desktop"
chown "$ACTUAL_USER:$ACTUAL_USER" "$AUTOSTART_DIR/kivy-signage-player.desktop" chown "$ACTUAL_USER:$ACTUAL_USER" "$AUTOSTART_DIR/kivy-signage-player.desktop"
chmod +x "$AUTOSTART_DIR/kivy-signage-player.desktop" chmod 644 "$AUTOSTART_DIR/kivy-signage-player.desktop"
echo "✓ XDG autostart entry created for user: $ACTUAL_USER" echo "✓ XDG autostart entry created for user: $ACTUAL_USER"
# Method 2: LXDE Autostart (for Raspberry Pi OS with LXDE) # Method 2: LXDE Autostart (for Raspberry Pi OS with LXDE)
@@ -71,37 +73,33 @@ EOF
fi fi
fi fi
# Method 3: systemd user service (more reliable) # Method 3: System-wide systemd service (most reliable for Wayland)
echo "Creating systemd user service..." echo "Creating system-wide systemd service..."
mkdir -p "$SYSTEMD_DIR"
cat > "$SYSTEMD_DIR/kivy-signage-player.service" << EOF sudo tee /etc/systemd/system/kiwy-player.service > /dev/null << EOF
[Unit] [Unit]
Description=Kivy Signage Player Description=Kiwy Signage Player
After=graphical-session-started.target After=multi-user.target graphical.target display-manager.service
PartOf=graphical-session.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/bash -c 'source $SCRIPT_DIR/.venv/bin/activate && cd $SCRIPT_DIR && bash start.sh' User=$ACTUAL_USER
Environment="DISPLAY=:0"
Environment="XAUTHORITY=$ACTUAL_HOME/.Xauthority"
WorkingDirectory=$SCRIPT_DIR
ExecStart=/bin/bash $SCRIPT_DIR/start.sh
Restart=on-failure Restart=on-failure
RestartSec=10 RestartSec=10
Environment="DISPLAY=:0"
Environment="XAUTHORITY=%h/.Xauthority"
StandardOutput=journal StandardOutput=journal
StandardError=journal StandardError=journal
[Install] [Install]
WantedBy=graphical-session.target WantedBy=multi-user.target
EOF EOF
chown "$ACTUAL_USER:$ACTUAL_USER" "$SYSTEMD_DIR/kivy-signage-player.service" sudo systemctl daemon-reload
chmod 644 "$SYSTEMD_DIR/kivy-signage-player.service" sudo systemctl enable kiwy-player.service
echo "✓ System-wide systemd service created and enabled"
# Reload and enable the service as the actual user
su - "$ACTUAL_USER" -c "systemctl --user daemon-reload" 2>/dev/null || true
su - "$ACTUAL_USER" -c "systemctl --user enable kivy-signage-player.service" 2>/dev/null || true
echo "✓ systemd user service created and enabled"
# Method 4: Cron job for fallback (starts at reboot) # Method 4: Cron job for fallback (starts at reboot)
echo "Setting up cron fallback..." echo "Setting up cron fallback..."
@@ -110,7 +108,7 @@ EOF
cat > "$CRON_WRAPPER" << 'EOF' cat > "$CRON_WRAPPER" << 'EOF'
#!/bin/bash #!/bin/bash
# Wait for desktop environment to be ready # Wait for desktop environment to be ready
sleep 10 sleep 15
# Start the player # Start the player
cd "$SCRIPT_DIR" && bash start.sh cd "$SCRIPT_DIR" && bash start.sh
@@ -119,8 +117,9 @@ EOF
chmod +x "$CRON_WRAPPER" chmod +x "$CRON_WRAPPER"
# Add to crontab for the actual user # Add to crontab for the actual user
CRON_ENTRY="@reboot sleep 20 && $CRON_WRAPPER > /tmp/kivy-player-cron.log 2>&1"
if ! su - "$ACTUAL_USER" -c "crontab -l 2>/dev/null" | grep -q "kivy-signage-player"; then if ! su - "$ACTUAL_USER" -c "crontab -l 2>/dev/null" | grep -q "kivy-signage-player"; then
su - "$ACTUAL_USER" -c "(crontab -l 2>/dev/null || true; echo '@reboot $CRON_WRAPPER') | crontab -" 2>/dev/null || true su - "$ACTUAL_USER" -c "(crontab -l 2>/dev/null || true; echo '$CRON_ENTRY') | crontab -" 2>/dev/null || true
echo "✓ Cron fallback configured" echo "✓ Cron fallback configured"
fi fi
@@ -133,6 +132,9 @@ EOF
fi fi
echo " 4. ✓ Cron Fallback (@reboot)" echo " 4. ✓ Cron Fallback (@reboot)"
echo "" echo ""
echo "Status check command:"
echo " systemctl --user status kivy-signage-player.service"
echo ""
} }
# Function to disable power-saving mode on Raspberry Pi # Function to disable power-saving mode on Raspberry Pi