Skip to content

Instantly share code, notes, and snippets.

@NeySlim
Created April 29, 2025 20:33
Show Gist options
  • Save NeySlim/26edce911dc1630999aa35ee5799df68 to your computer and use it in GitHub Desktop.
Save NeySlim/26edce911dc1630999aa35ee5799df68 to your computer and use it in GitHub Desktop.
Sunshine monitor and wake up on incoming connection for multiple DEs
#!/bin/bash
# Define paths
SCRIPT_DIR="$HOME/.local/bin"
SERVICE_DIR="$HOME/.config/systemd/user"
SCRIPT_PATH="$SCRIPT_DIR/monitor-wakeup.sh"
SERVICE_PATH="$SERVICE_DIR/monitor-wakeup.service"
# Create directories
mkdir -p "$SCRIPT_DIR"
mkdir -p "$SERVICE_DIR"
# Create the monitoring script
cat <<EOF > "$SCRIPT_PATH"
#!/bin/bash
# Detect the desktop environment
DE=$(echo \$XDG_CURRENT_DESKTOP | tr '[:upper:]' '[:lower:]')
# Function to wake up the monitor
wake_monitor() {
case "\$DE" in
kde)
qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.wakeup
echo "Monitor awakened via KDE Power Management."
;;
gnome)
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.ScreenSaver.SetActive false
echo "Monitor awakened via GNOME Power Management."
;;
xfce)
xset dpms force on
echo "Monitor awakened via XFCE Power Management."
;;
cinnamon)
gdbus call --session --dest org.cinnamon.ScreenSaver --object-path /org/cinnamon/ScreenSaver --method org.cinnamon.ScreenSaver.SetActive false
echo "Monitor awakened via Cinnamon Power Management."
;;
mate)
gdbus call --session --dest org.mate.ScreenSaver --object-path /org/mate/ScreenSaver --method org.mate.ScreenSaver.SetActive false
echo "Monitor awakened via MATE Power Management."
;;
sway)
swaymsg output '*' dpms on
echo "Monitor awakened via Sway."
;;
*)
echo "Unsupported desktop environment: \$DE"
;;
esac
}
# Monitor system logs
journalctl -f | while read line; do
if [[ "\$line" == *"Error: Couldn't find monitor [0]"* ]]; then
wake_monitor
fi
done
EOF
# Set execution permissions
chmod +x "$SCRIPT_PATH"
# Create the systemd service file
cat <<EOF > "$SERVICE_PATH"
[Unit]
Description=Monitor Wakeup Service (User)
After=graphical.target
[Service]
ExecStart=%h/.local/bin/monitor-wakeup.sh
Restart=always
[Install]
WantedBy=default.target
EOF
# Reload systemd and enable the service
systemctl --user daemon-reload
systemctl --user enable monitor-wakeup.service
systemctl --user start monitor-wakeup.service
echo "✅ Installation complete! The service is now running and supports KDE, GNOME, XFCE, Cinnamon, Mate, and Sway."
@NeySlim
Copy link
Author

NeySlim commented Apr 29, 2025

Installation Instructions:
Save this script as install-monitor-service.sh.

Make it executable:

chmod +x install-monitor-service.sh

Run it:

./install-monitor-service.sh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment