diff --git a/install.sh b/install.sh index b89373e..98e6d66 100644 --- a/install.sh +++ b/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