Wallpaper / Hintergrundbild: Ordner via Bash Script einstellen (kde, plasma)

Gibt es eine Möglichkeit die Ordner für die Diaschau via Script zu ändern?

Da ich einige / viele Wallpaper habe und diese in verschiedenen Ordner sortiert habe, finde ich es recht umständlich diese via Menü umzustellen.

Die Wallpaper liegen bei mir extern auf einer NAS und das einbinden als Hintergrund funktioniert soweit auch via symbolischem link.

Auch habe ich 2 Monitore in betrieb und für jeden eigene Ordner festgelegt.

Ist das Möglich?

System:

Betriebssystem: Manjaro Linux 
KDE-Plasma-Version: 5.27.10
KDE-Frameworks-Version: 5.113.0
Qt-Version: 5.15.12
Kernel-Version: 6.6.10-1-MANJARO (64-bit)
Grafik-Plattform: X11

Als Beispiel
Script 1 Monitor 1 stellt folgende Ordner ein

/NetMounts/NAS01/Bilder/Wallpaper/001
/NetMounts/NAS01/Bilder/Wallpaper/002
/NetMounts/NAS01/Bilder/Wallpaper/003
Wallpaper Wechsel 15 sek
Reihenfolge Zufällig
Skaliert und beschnitten

Script 2 Monitor 1 stellt folgende Ordner ein

/NetMounts/NAS01/Bilder/Wallpaper/004
/NetMounts/NAS01/Bilder/Wallpaper/005
/NetMounts/NAS01/Bilder/Wallpaper/006
Wallpaper Wechsel 15 sek
Reihenfolge Zufällig
Skaliert und beschnitten

Script 3 Monitior 2

/NetMounts/NAS01/Bilder/Wallpaper/007
/NetMounts/NAS01/Bilder/Wallpaper/008
/NetMounts/NAS01/Bilder/Wallpaper/009
Wallpaper Wechsel 15 sek
Reihenfolge A bis Z
Skaliert und beschnitten

Script 4 Monitor 2

/NetMounts/NAS01/Bilder/Wallpaper/010
/NetMounts/NAS01/Bilder/Wallpaper/011
/NetMounts/NAS01/Bilder/Wallpaper/012
Wallpaper Wechsel 15 sek
Reihenfolge A bis Z
Skaliert und beschnitten

Update

Also ich konnte wohl die Config Datei zum ändern finden können

/home/$USER/.config/plasma-org.kde.plasma.desktop-appletsrc

Wenn man nun SildeShow eingestellt hat, ändert sich die die datei in den Abständen in der man Intervall eingestellt hat, das konnte ich mit Kate soweit feststellen.

Nun meine Frage wie kann man per Script die Datei an einer spezifischen stelle ändern?

Hier die Stelle in der Config die ich gerne per Script ändern würde

[Containments][189][Wallpaper][org.kde.slideshow][General]
Image=file:///usr/share/wallpapers/bilder/000129.jpg
SlideInterval=15
SlidePaths=/usr/share/wallpapers/bilder/
SlideshowFoldersFirst=true

Gedanke / Idee 1:

  • Die Datei einlesen
  • Untersuchen nach der Stelle bzw der ersten Zeile ([Containments][189])
  • dann “image=file:…” und “SildePaths=/usr/…” anpassen

Gedanke / Idee 2:

  • Einfach blind die entsprechnden Zeilen anpassen
  • Zeile 195 und 197 in der gesamten Config

Nur wie man das machen kann, konnte ich mir bis jetzt nicht zurecht legen.
Mir fehlt da das Wissen bzw nach was man da suchen muss wie man das macht.

Hallo Micha,
ich habe Probleme zu verstehen, was Du in diesem Zusammenhang skripten möchtest. Normalerweise ruft man ja eine GUI auf und stellt dort ein, in welchem Ordner die gewünschten Hintergründe liegen und wie sowie in welcher Weise sie dargestellt werden sollen: zentriert, gekachelt, aller x Minuten gewechselt usw.
Das einmal eingestellt reicht dann solange, bis man doch mal ein anderes Verzeichnis sehen möchte.
Ist es das, was Du automatisieren möchtest? z.B. Montags das Verzeichnis foo, Dienstags das Verzeichnis bar usw.?
Aber

klingt für mich anders. Da würde ich sagen, nimm deinen Lieblingseditor und ändere die betreffenden Zeilen damit (also eigentlich Idee 1) Wieso bräuchte man dafür ein Skript?
Lässt sich natürlich automatisieren, irgendwas mit schon vorhandenen Lösungen wie nitrogen, oder mit awk oder sed z.B. bei jedem Anmelden das Hintergrundbild/Verzeichnis ändern. Aber wie gesagt, ist es tatsächlich das was Du möchtest?
Wahrscheinlich verstehen andere ja besser als ich, was genau Du möchtest, trotzdem könnte eine genauere Erklärung nicht schaden.

viele Grüsse gosia

PS. Vielleicht ist aber auch das hier was Du suchst?

Mein Problem ist:
Ich möchte nicht immer die selben Ordner in der SildeShow haben.

Und diese dann nach Bedarf auf ein entsprechendes Preset umstellen.

Da ich keine “Preset” Möglichkeiten gefunden habe, muss ich die Ordner die ich gerade nicht möchte manuell entfernen und die ordner die möchte manuell hinzufügen.

Was ich recht mühselig finde, vor allem da plasma direkt /home/$USER/ öffnet, ich aber die Bilder auf meiner NAS liegen habe.

Das Navigieren durch die Ordner wird dann noch zusätzlich erschwert durch den Umstand das dass Aufklappen (Anzeigen) der Unterordner nicht automatisch passiert, wenn man auf das “Pfeil” Symbol klickt.

Was dann wieder zur Folge hat das ich unten im Eingabefeld den Pfad händisch eintragen muss.

Daher die Idee mit dem Script welches die Config Datei entsprechend ändert.

Und um das testen zu können müsste ich erst wissen, wie man eine config oder text datei via script anpassen kann.

Bsp

Preset 1:
Ordner 1
Ordner 4
Ordner 6

Preset 2:
Ordner 2
Ordner 6
Ordner 19

Die “Presets” möchte ich dann per Script manuell umstellen.

Bsp.:
Jetzt habe ich lust auf Preset 1

Führe das Script aus

Das fragt mich dann welches Preset ich möchte.
Dann gebe ich z.b. “1” ein.
Dann stellt das script die Ordner in der Config Datei um und schliest sich dann von selbst.

So ungefähr stelle ich mir das vor.

Von daher sollte ich wie oben erwähnt wissen wie man so etwas machen kann.

Wenn es dafür natürlich schon was in den Repos gibt, das Plasma um die Funktion erweitert, wäre das natürlich der einfachere Weg.

Der Link könnte ggf. noch interessant werden falls es auf dem Weg, den ich gerne versuchen würde, nicht funktioniert.

eine praktikable lösung, sofern ausreichend RAM vorhanden ist:
lege eine ramdisk an (siehe arch-wiki). dann erstellst du einen systemdienst oder eim autostartscript das über einen timer regelmäßig bilder von der ramdisk löscht und andere bilder dafür reinkopiert. das slideshowverzeichnis verknüpfst du auf die ramdisk.

dann für die slideshows der anderen monitore entsprechend weitere ramdisks anlegen.

Hallo Micha,
Verstehe. Du müsstest an plasma-apply-wallpaperimage den Path zum gewünschten Wallpaper übergeben, z.B.
plasma-apply-wallpaperimage Ordner_1
aber nach dem Link Setting Wallpapers for Multiple Monitors through DBus for KDE Plasma · SnailShell hat man mit plasma-apply-wallpaperimage nicht die Möglichkeit, einen konkreten Monitor anzusprechen, “stell das für Monitor 2 ein”. Mit dem dort aufgeführten Skript wallpaper.py ginge das schon. Insofern bräuchte man “nur” einen Wrapper für das dort angeführte Skript, das statt der Wallpaper dein gewünschtes Preset übergibt. “nur” ist hier ein grosses Wort, da ich konkreter nicht werden kann, nicht nur deshalb, weil ich weder Plasma noch mehrere Monitore verwende, und deshalb auch keinen Ansatz zum Testen habe.

Du könntest auch direkt in plasma-org.kde.plasma.desktop-appletsrc die betreffenden Zeilen mit sed ändern, z.B.

sed -i -e 's+\(SlidePaths=\).*+\1NEUER_PATH+' /home/$USER/.config/plasma-org.kde.plasma.desktop-appletsrc

NEUER_PATH ist das gewünschte neue Verzeichnis, aber ich weiss nicht, ob und wie plasma-org.kde.plasma.desktop-appletsrc zwischen verschiedenen Monitoren unterscheidet. Wenn es unterscheidet, müsste man also /plasma-org.kde.plasma.desktop-appletsrc zeilenweise einlesen und jedesmal, wenn die Gruppe für einen neuen Monitor kommt, ebenfalls die nächste Zeile vom gewünschten Profil und den dort eingetragenen Ordner für NEUER_PATH verwenden.
So ganz grob mein Ansatz, vielleicht machbar aber keinesfalls trivial. Vielleicht kann das ja ein Spezialist umsetzen, ich fühle mich nicht dazu in der Lage.

viele Grüsse gosia

PS.
wegen des zeilenweisen Einlesen ist wohl awk besser als sed geeignet, weil dies die Dateien schon von sich aus zeilenweise einliest und Kommandos anhand von Mustern auszulöst…

For Single:

# define the wallpaper
WALL=/home/"$USER"/Pictures/simp.png
# make replacement 
sed -i '/\[Wallpaper\]\[org\.kde\.image\]/!b;n;cImage='"$WALL"'' /home/"$USER"/.config/plasma-org.kde.plasma.desktop-appletsrc
# reload plasma
kquitapp5 plasmashell && nohup kstart5 plasmashell &

For Slides:

# define path
SLIDES=/home"$USER"/Pictures/walls/
# make replacement
sed -i '/\[Wallpaper\]\[org\.kde\.slideshow\]/!b;n;n;cSlidePaths='"$SLIDES"'' /home/"$USER"/.config/plasma-org.kde.plasma.desktop-appletsrc
# reload plasma
kquitapp5 plasmashell && nohup kstart5 plasmashell &

Da es Micha vor allem um die Auswahl von Profilen für die Monitore geht habe ich mich mal umgesehen und bin auf Superpaper
gestossen.
Dort wird in den docs eine Option profile erwähnt:
“–profile”, run Superpaper by starting a specific pre-configured wallpaper profile"

bin dem nicht weiter nachgegangen, aber es klingt doch sehr nach dem von Micha gewünschten Profilen.

viele Grüsse gosia

1 Like