1
0
Fork 0
1 SwayBg PORTING_README
Zenny edited this page 2025-10-27 20:15:43 +01:00

Hyprpaper zu swaybg Port - README

Diese Datei dokumentiert alle Unterschiede, Einschränkungen und Features beim Portieren von hyprpaper zu swaybg.

Wichtiger Hinweis: Keine Config-Datei

Hyprpaper: Verwendet eine Konfigurationsdatei (hyprpaper.conf)

swaybg: Keine Konfigurationsdatei - wird ausschließlich über Kommandozeilen-Parameter gesteuert

Daher wurden Shell-Skripte erstellt, um die hyprpaper-Funktionalität zu replizieren:

  • start-swaybg.sh - Startet swaybg mit deinen Wallpaper-Einstellungen
  • change-wallpaper.sh - Wechselt Wallpaper zur Laufzeit (IPC-Ersatz)

Erfolgreich portierte Features

  • Wallpaper pro Monitor setzen
  • Wallpaper für alle Monitore gleichzeitig setzen
  • Bildpfade (~/Bilder/aesthetic-wallpapers/images/fractal.png)
  • Scaling-Modi (fill, fit, stretch, center, tile)
  • Multi-Monitor-Setup

Architektur-Unterschiede

1. Keine Config-Datei

Hyprpaper:

# hyprpaper.conf
preload = ~/Bilder/wallpaper.png
wallpaper = eDP-1,~/Bilder/wallpaper.png
ipc = on

swaybg: Nur Kommandozeile

swaybg -o eDP-1 -i ~/Bilder/wallpaper.png -m fill &

Lösung: Verwende das start-swaybg.sh Skript als "Config-Ersatz"

Status: Gelöst durch Shell-Skript


2. Preload-Funktion

Hyprpaper:

preload = ~/Bilder/wallpaper.png
wallpaper = eDP-1,~/Bilder/wallpaper.png

Hyprpaper lädt Bilder vorab in den Speicher für schnellere Wallpaper-Wechsel.

swaybg: Kein Preload

  • Bilder werden direkt beim Setzen geladen
  • Kein Caching im Speicher
  • Bei Wallpaper-Wechsel muss swaybg neu gestartet werden

Status: Feature existiert nicht


3. IPC (Inter-Process Communication)

Hyprpaper:

ipc = on

Mit IPC kann hyprpaper zur Laufzeit gesteuert werden:

hyprctl hyprpaper wallpaper "eDP-1,~/Bilder/new-wallpaper.png"
hyprctl hyprpaper preload "~/Bilder/new-wallpaper.png"
hyprctl hyprpaper unload "~/Bilder/old-wallpaper.png"

swaybg: Kein IPC

  • Keine Laufzeit-Steuerung
  • Zum Wechseln muss swaybg neu gestartet werden

Lösung: Verwende das change-wallpaper.sh Skript:

./change-wallpaper.sh eDP-1 ~/Bilder/new-wallpaper.png fill

Status: Ersetzt durch Neustart-Skript


4. Splash Screen

Hyprpaper:

splash = false

Hyprpaper kann einen Splash-Screen beim Start anzeigen.

swaybg: Kein Splash Screen

  • Startet sofort ohne visuelle Rückmeldung
  • Keine Lade-Animation

Status: Feature existiert nicht (ist aber auch nicht nötig)


5. Multiple Instances per Output

Hyprpaper: Eine Instanz für alle Monitore

wallpaper = DP-1,~/Bilder/wallpaper1.png
wallpaper = HDMI-A-2,~/Bilder/wallpaper2.png
wallpaper = DP-2,~/Bilder/wallpaper3.png

swaybg: Separate Instanzen für jeden Monitor

swaybg -o DP-1 -i ~/Bilder/wallpaper1.png -m fill &
swaybg -o HDMI-A-2 -i ~/Bilder/wallpaper2.png -m fill &
swaybg -o DP-2 -i ~/Bilder/wallpaper3.png -m fill &

Oder eine Instanz für alle:

swaybg -o '*' -i ~/Bilder/wallpaper.png -m fill &

Unterschied: Bei swaybg muss für jeden Monitor mit unterschiedlichem Wallpaper eine separate Instanz laufen.

Status: Funktioniert, aber anders strukturiert


6. Unload-Funktion

Hyprpaper: Bilder können aus dem Speicher entfernt werden

hyprctl hyprpaper unload "~/Bilder/old-wallpaper.png"

swaybg: Kein Unload

  • Prozess läuft, bis er beendet wird
  • Speicher wird beim Beenden freigegeben

Status: Nicht relevant (kein Preload = kein Unload nötig)


Skalierungs-Modi

Beide unterstützen ähnliche Scaling-Modi:

Hyprpaper swaybg Beschreibung
fill fill Skaliert und beschneidet, um zu füllen
fit fit Skaliert, um zu passen (mit Balken)
stretch stretch Streckt auf volle Größe
center center Zentriert ohne Skalierung
tile tile Kachelt das Bild
- solid_color Nur Hintergrundfarbe, kein Bild

Status: Vollständig kompatibel


Monitor-Auswahl

Hyprpaper:

wallpaper = eDP-1,~/Bilder/wallpaper.png

swaybg:

swaybg -o eDP-1 -i ~/Bilder/wallpaper.png -m fill &

Wildcard für alle Monitore:

Hyprpaper: Nicht direkt unterstützt (muss für jeden Monitor einzeln gesetzt werden)

swaybg:

swaybg -o '*' -i ~/Bilder/wallpaper.png -m fill &

Status: swaybg ist hier flexibler mit dem * Wildcard


Verwendung der Skripte

Start-Skript (Autostart)

Das start-swaybg.sh Skript ersetzt die hyprpaper.conf:

# Ausführbar machen (bereits erledigt)
chmod +x ~/path/to/start-swaybg.sh

# Manuell starten
~/path/to/start-swaybg.sh

# In niri config.kdl einbinden:
spawn-at-startup "/home/zenn/opt/projects/niri/swaybg/start-swaybg.sh"

# Oder mit vollem Pfad:
spawn-sh-at-startup "$HOME/opt/projects/niri/swaybg/start-swaybg.sh"

Wallpaper zur Laufzeit wechseln

Das change-wallpaper.sh Skript ersetzt hyprpapers IPC:

# Wallpaper für einen Monitor wechseln
./change-wallpaper.sh eDP-1 ~/Bilder/new-wallpaper.png fill

# Wallpaper für alle Monitore wechseln
./change-wallpaper.sh '*' ~/Bilder/new-wallpaper.png fill

# Mit verschiedenen Scaling-Modi
./change-wallpaper.sh eDP-1 ~/Bilder/wallpaper.png fit
./change-wallpaper.sh eDP-1 ~/Bilder/wallpaper.png center
./change-wallpaper.sh eDP-1 ~/Bilder/wallpaper.png tile

Skript-Syntax

./change-wallpaper.sh [output] [image-path] [mode]

# Parameter:
#   output      - Monitor-Name (z.B. eDP-1) oder '*' für alle
#   image-path  - Vollständiger Pfad zum Bild
#   mode        - fill, fit, stretch, center, tile (Standard: fill)

Integration in niri config.kdl

Option 1: Skript beim Start ausführen

// In der niri config.kdl Datei:
spawn-at-startup "/home/zenn/opt/projects/niri/swaybg/start-swaybg.sh"

Option 2: Direkter swaybg-Aufruf

// Einzelnes Wallpaper für alle Monitore
spawn-sh-at-startup "swaybg -o '*' -i ~/Bilder/aesthetic-wallpapers/images/fractal.png -m fill &"

// Oder für jeden Monitor einzeln:
spawn-sh-at-startup "swaybg -o eDP-1 -i ~/Bilder/aesthetic-wallpapers/images/fractal.png -m fill &"
spawn-sh-at-startup "swaybg -o DP-1 -i ~/Bilder/aesthetic-wallpapers/images/lofi_cat.png -m fill &"
spawn-sh-at-startup "swaybg -o HDMI-A-2 -i ~/Bilder/aesthetic-wallpapers/images/lofi_cat.png -m fill &"

Option 3: Keybinding für Wallpaper-Wechsel

binds {
    // Wallpaper wechseln mit Mod+W
    Mod+Shift+W { spawn-sh "/home/zenn/opt/projects/niri/swaybg/change-wallpaper.sh '*' ~/Bilder/new-wallpaper.png fill"; }
}

Deine portierte Konfiguration

Hyprpaper (Original):

preload = ~/Bilder/aesthetic-wallpapers/images/fractal.png
wallpaper = eDP-1,~/Bilder/aesthetic-wallpapers/images/fractal.png
splash = false
ipc = on

swaybg (Portiert - im start-swaybg.sh):

#!/bin/bash
killall swaybg 2>/dev/null
sleep 0.5
swaybg -o eDP-1 \
       -i ~/Bilder/aesthetic-wallpapers/images/fractal.png \
       -m fill &

Alternativen zu swaybg

Falls dir die Limitierungen von swaybg nicht gefallen:

1. wpaperd (empfohlen)

  • Config-Datei basiert (ähnlich wie hyprpaper)
  • Unterstützt dynamische Wallpaper
  • Bessere Speicherverwaltung
  • Hotreload der Config
# ~/.config/wpaperd/config.toml
[eDP-1]
path = "~/Bilder/aesthetic-wallpapers/images/fractal.png"
mode = "fill"

2. swww (Wayland Wallpaper Daemon)

  • IPC-Unterstützung
  • Animierte Wallpaper
  • Smooth Transitions zwischen Wallpapern
  • Ähnlicher zu hyprpaper
swww init
swww img ~/Bilder/aesthetic-wallpapers/images/fractal.png

3. mpvpaper (für Videos/GIFs)

  • Kann Videos als Wallpaper abspielen
  • Ideal für animated wallpapers

Vergleichstabelle: hyprpaper vs. swaybg

Feature Hyprpaper swaybg wpaperd swww
Config-Datei ⚠️ (daemon)
IPC ⚠️
Preload
Multi-Monitor
Scaling-Modi
Live-Reload
Animationen
Speicher-Effizienz Mittel Gut Sehr gut Mittel
Einfachheit Mittel Sehr einfach Mittel Komplex

Legende:

  • Vollständig unterstützt
  • ⚠️ Teilweise unterstützt oder anders
  • Nicht unterstützt

Empfehlung

Für deine Anforderungen:

  1. swaybg (aktuell): Einfach, stabil, tut was es soll

    • Gut für statische Wallpaper
    • Minimaler Overhead
    • Keine IPC
    • Keine Config-Datei
  2. wpaperd (empfohlen): Beste hyprpaper-Alternative

    • Config-Datei wie hyprpaper
    • Bessere Speicherverwaltung
    • Hotreload
    • ⚠️ Noch in aktiver Entwicklung
  3. swww (für Power-User): Wenn du IPC und Animationen willst

    • IPC wie hyprpaper
    • Smooth transitions
    • Animated wallpapers
    • Komplexer Setup

Installation von Alternativen

wpaperd

# Arch Linux
yay -S wpaperd

# Config erstellen
mkdir -p ~/.config/wpaperd
cat > ~/.config/wpaperd/config.toml << 'EOF'
[eDP-1]
path = "~/Bilder/aesthetic-wallpapers/images/fractal.png"
mode = "fill"

# Für Desktop-Monitore:
# [DP-1]
# path = "~/Bilder/aesthetic-wallpapers/images/lofi_cat.png"
# mode = "fill"
EOF

# In niri starten:
spawn-at-startup "wpaperd"

swww

# Arch Linux
yay -S swww

# In niri starten:
spawn-at-startup "swww-daemon"

# Wallpaper setzen:
spawn-sh-at-startup "sleep 1 && swww img ~/Bilder/aesthetic-wallpapers/images/fractal.png"

Troubleshooting

swaybg startet nicht

# Check ob swaybg installiert ist
which swaybg

# Manuell testen
swaybg -o '*' -i ~/Bilder/aesthetic-wallpapers/images/fractal.png -m fill

# Logs checken
journalctl --user -u niri -f

Wallpaper wird nicht angezeigt

# Bildpfad validieren
ls -lh ~/Bilder/aesthetic-wallpapers/images/fractal.png

# Ausgabe-Namen checken
niri msg outputs

# Mit korrektem Output-Namen neu versuchen
swaybg -o <OUTPUT-NAME> -i ~/Bilder/wallpaper.png -m fill

Mehrere swaybg-Instanzen

# Alle beenden
killall swaybg

# Oder spezifisch nach PID
ps aux | grep swaybg
kill <PID>

Skript funktioniert nicht

# Ausführbar machen
chmod +x start-swaybg.sh
chmod +x change-wallpaper.sh

# Testen
./start-swaybg.sh
echo $?  # sollte 0 sein bei Erfolg

Nützliche Kommandos

# swaybg für alle Monitore mit gleichem Wallpaper
swaybg -o '*' -i ~/path/to/wallpaper.png -m fill &

# Nur Hintergrundfarbe (ohne Bild)
swaybg -o '*' -c '#808080' -m solid_color &

# Verschiedene Wallpaper pro Monitor
swaybg -o eDP-1 -i ~/wallpaper1.png -m fill &
swaybg -o HDMI-A-2 -i ~/wallpaper2.png -m fill &

# swaybg beenden
killall swaybg

# Laufende Instanzen anzeigen
ps aux | grep swaybg

Weitere Ressourcen


Generiert am: 2025-10-27 Von: Hyprpaper → swaybg Config Converter Empfehlung: Für einfache statische Wallpaper ist swaybg perfekt. Für mehr Features (IPC, Config-Datei), schaue dir wpaperd oder swww an.