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:
48
install.sh
48
install.sh
@@ -35,7 +35,7 @@ setup_autostart() {
|
||||
SYSTEMD_DIR="$ACTUAL_HOME/.config/systemd/user"
|
||||
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..."
|
||||
mkdir -p "$AUTOSTART_DIR"
|
||||
|
||||
@@ -44,19 +44,21 @@ setup_autostart() {
|
||||
Type=Application
|
||||
Name=Kivy 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
|
||||
Categories=Utility;
|
||||
NoDisplay=false
|
||||
Terminal=true
|
||||
StartupNotify=false
|
||||
Hidden=false
|
||||
X-GNOME-Autostart-enabled=true
|
||||
X-GNOME-Autostart-delay=5
|
||||
EOF
|
||||
|
||||
# Replace $SCRIPT_DIR with actual path in the file
|
||||
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"
|
||||
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"
|
||||
|
||||
# Method 2: LXDE Autostart (for Raspberry Pi OS with LXDE)
|
||||
@@ -71,37 +73,33 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# Method 3: systemd user service (more reliable)
|
||||
echo "Creating systemd user service..."
|
||||
mkdir -p "$SYSTEMD_DIR"
|
||||
# Method 3: System-wide systemd service (most reliable for Wayland)
|
||||
echo "Creating system-wide systemd service..."
|
||||
|
||||
cat > "$SYSTEMD_DIR/kivy-signage-player.service" << EOF
|
||||
sudo tee /etc/systemd/system/kiwy-player.service > /dev/null << EOF
|
||||
[Unit]
|
||||
Description=Kivy Signage Player
|
||||
After=graphical-session-started.target
|
||||
PartOf=graphical-session.target
|
||||
Description=Kiwy Signage Player
|
||||
After=multi-user.target graphical.target display-manager.service
|
||||
|
||||
[Service]
|
||||
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
|
||||
RestartSec=10
|
||||
Environment="DISPLAY=:0"
|
||||
Environment="XAUTHORITY=%h/.Xauthority"
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
chown "$ACTUAL_USER:$ACTUAL_USER" "$SYSTEMD_DIR/kivy-signage-player.service"
|
||||
chmod 644 "$SYSTEMD_DIR/kivy-signage-player.service"
|
||||
|
||||
# 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"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable kiwy-player.service
|
||||
echo "✓ System-wide systemd service created and enabled"
|
||||
|
||||
# Method 4: Cron job for fallback (starts at reboot)
|
||||
echo "Setting up cron fallback..."
|
||||
@@ -110,7 +108,7 @@ EOF
|
||||
cat > "$CRON_WRAPPER" << 'EOF'
|
||||
#!/bin/bash
|
||||
# Wait for desktop environment to be ready
|
||||
sleep 10
|
||||
sleep 15
|
||||
|
||||
# Start the player
|
||||
cd "$SCRIPT_DIR" && bash start.sh
|
||||
@@ -119,8 +117,9 @@ EOF
|
||||
chmod +x "$CRON_WRAPPER"
|
||||
|
||||
# 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
|
||||
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"
|
||||
fi
|
||||
|
||||
@@ -133,6 +132,9 @@ EOF
|
||||
fi
|
||||
echo " 4. ✓ Cron Fallback (@reboot)"
|
||||
echo ""
|
||||
echo "Status check command:"
|
||||
echo " systemctl --user status kivy-signage-player.service"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Function to disable power-saving mode on Raspberry Pi
|
||||
|
||||
Reference in New Issue
Block a user