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"
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user