Block > Bildschirmhintergruende

 9 min (1755 Wörter, 9931 Zeichen)

Hinweis

Dieser Eintrag ist älter als 3 Jahre und entspricht vermutlich nicht mehr dem neuesten Stand der Technik/Realität.

Frueher habe ich mir meine Hintergruende immer aus dem Netz runtergeladen (z.B. von ewallpapers.eu , interfacelift.com , wallpaperswide.com , hdwallpapers.in , deviantart.com oder wallhaven.cc ), dann mit einem Skript fuer meine beiden Monitore zurechtgebastelt, konkateniert und anzeigen lassen (Befehl fuer GNOME2 hier).
Die hier genannten Quellen koennen je Bild eine unterschiedliche Lizenz haben.

Christoph zeigt hier noch einen anderen Weg auf, um per Skript auch die Hintergruende automatisch und zufaellig runterzuladen.

Nach einer Weile bin ich auf den Geschmack von minimalistischen (zu finden z.B. auf simpledesktops.com und minimalwall.com ) und explizit freien (z.B. auf publicdomainpictures.net und republicdomain.com ) Hintergruenden gekommen.

Auf eine neue Idee gebracht hat mich David Revoy mit diesem Bild . Er verwendet naemlich u.a. G’MIC (siehe Angabe ganz unten im letzten Bild), was ich bisher noch nicht kannte.
David ist uebrigens grossartig, da er nur Open Source Software und mit Linux kompatible Hardware einsetzt . Die Gruende dafuer schreibt er hier auf.

Nach dem Studieren der Website bin ich auf G’MIC Online gestossen und hab mal alle Filter durchprobiert. Angetan haben es mir dann die Filter “Gradient [corners]” unter Rendering, “Plasma” ebenfalls unter Rendering und “Turbulence” unter Patterns. Diese Filter funktionieren auch ohne eine Bild, da sie mit Zufallswerten selber etwas darstellen koennen.
Es dauerte aber eine Zeit lang, bis ich feststellte, dass die normalen Funktionen von GMIC nicht ausreichen, um solch ein Bild zu erstellen. Die Manpage (man gmic) war mir mit den Optionen bei gradient eher eine geringere Hilfe.
Zum Glueck fand ich nach einiger Rumprobiererei G’MIC fuer GIMP .
Mit dieser Anleitung gelang es mir dann, die Befehle zu notieren, mit denen mir das G’MIC-Plugin fuer GIMP solch schoene Hintergruende generiert.
In GIMP befinden sich die obigen Filter allerdings an einer anderen Stelle: “Gradient [corners]” unter Colors, “Plasma” und “Turbulence” unter Patterns.

Jedenfalls bastelte ich mir damit ein Skript , was Hintergruende fuer alle (horizontal aufgestellten) Monitore generiert, konkateniert und anzeigt. Somit kann per Cronjob z.B. jede Stunde ein neuer Hintergrund erscheinen 😊

  create_wallpaper.sh

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/bin/bash

###
# adjust these variables
root="$HOME/pics/wallpaper"
name=$(date +%s)
log="/tmp/$(basename "$0").log"
###

###
# Dependencies
# feh, gmic + gimp-plugin-gmic, imagemagick
command -v feh >/dev/null 2>&1 || { echo >&2 "I require \"feh\" but it's not installed. Aborting."; exit 1; }
command -v gmic >/dev/null 2>&1 || { echo >&2 "I require \"gmic\" but it's not installed. Aborting."; exit 1; }
command -v montage >/dev/null 2>&1 || { echo >&2 "I require \"imagemagick\" but it's not installed. Aborting."; exit 1; }
###

###
# TODO:
# * order of monitors (now: ascending resolution), i.e. via xrandr the
#   position of a monitor
# * montage does not work if the monitors are not in one row
#   (horizontal)
# * other programs to set the background (feh does not work with
#   GNOME, KDE, ...)
#   http://askubuntu.com/questions/72549/how-to-determine-which-window-manager-is-running
# * what if shuf > border values? (0.0 < plasma:alpha < 5.0, with shuf it could be 5.37)
###

###
# Variables
turbulence=1 # standard
plasma=0
gradient=0
rand=0
debug=99 # nothing?
mode="turbulence" # standard
setit=0
###

###
# Functions
function usage() {
cat << !
Usage: $0 [-g|-p|-t] [-r] [-s]
	-g: Use gradient as mode
	-p: Use plasma as mode
	-t: Use turbulence as mode (default)

	-r: generate a random wallpaper for each monitor

	-s: set the wallpaper
!
}


## gradient
# command: gmic $width,$height,$depth,$spectrum -gimp_corner_gradient $ulr,$ulg,$ulb,$ula,$urr,$urg,$urb,$ura,$blr,$blg,$blb,$bla,$brr,$brg,$brb,$bra -o gradient.png
# example: gmic 1920,1080,1,3 -gimp_corner_gradient 255,255,255,128,255,0,0,255,0,255,0,255,0,0,255,255 -o gradient.png

# width: width
# height: height
# depth: normally 1
# spectrum: normally 3
# up left: rgba (0-255 each)
# up right: rgba (0-255 each)
# bottom left: rgba (0-255 each)
# bottom right: rgba (0-255 each)

# beautiful
shuffle_gradient="$(shuf -i 75-255 -n 12 | sed '3~3 a 255' | tr '\n' ',' | sed 's/,$//')"
# normal
# shuffle_gradient="$(shuf -i 0-255 -n 12 | sed '3~3 a 255' | tr '\n' ',' | sed 's/,$//')"
function shuffle_gradient() {
	if [[ "$rand" == 1 ]] ; then
		shuffle_gradient="$(shuf -i 75-255 -n 12 | sed '3~3 a 255' | tr '\n' ',' | sed 's/,$//')"
	fi
}

## turbulence
# command: gmic $width,$height,$depth,$spectrum -gimp_turbulence $radius,$octaves,$damping_per_octave,$difference_mixing,$mode -o turbulence.png
# example: gmic 1920,1080,1,3 -gimp_turbulence 618.54,6,4.43,0,3 -o turbulence.png
# 
# width: width
# height: height
# depth: normally 1
# spectrum: normally 3
# radius: 1 - 1024
# octaves: 1 - 12
# damping per octave: 1.0 - 10.0
# difference mixing: -10.0 - 10.0
# mode: turbulence (0), turbulence 2 (1), fractal noise (2), fractured clouds (3), stardust (4), pea soup (5)

# beautiful
shuffle_turbulence="$(shuf -i 50-1024 -n 1),$(shuf -i 1-12 -n 1),$(shuf -i 5-10 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-10 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-3 -n 1)"
# normal
# shuffle_turbulence="$(shuf -i 1-1024 -n 1),$(shuf -i 1-12 -n 1),$(shuf -i 1-10 -n 1).$(shuf -i 0-9 -n 2 -z),$(echo "$(shuf -i 0-20 -n 1)-10"|bc).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-5 -n 1)"
function shuffle_turbulence() {
	if [[ "$rand" == 1 ]] ; then
		shuffle_turbulence="$(shuf -i 50-1024 -n 1),$(shuf -i 1-12 -n 1),$(shuf -i 5-10 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-10 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-3 -n 1)"
	fi
}
##

## plasma
# command: gmic $width,$height,$depth,$spectrum -gimp_plasma $alpha,$beta,$scale,$randomize,$transparency,$r,$g,$b -o plasma.png
# example: gmic 1920,1080,1,3 -gimp_plasma 3.98058,8.73786,10,0,0,128,128,128 -o plasma.png

# width: width
# height: height
# depth: normally 1
# spectrum: normally 3
# alpha: 0.0 - 5.0
# beta: 0.0 - 100.0
# scale: 2 - 10
# randomize: 0 or 1
# transparency: 0 or 1
# color: rgb (0 - 255 each)

# beautiful
shuffle_plasma="0.00,0.00,$(shuf -i 9-10 -n 1),1,0,$(shuf -i 75-255 -n 3 | tr '\n' ',' | sed 's/,$//')"
# normal
# shuffle_plasma="$(shuf -i 0-5 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 0-100 -n 1).$(shuf -i 0-9 -n 2 -z),$(shuf -i 2-10 -n 1),$(shuf -i 0-1 -n 1),0,$(shuf -i 0-255 -n 3 | tr '\n' ',' | sed 's/,$//')"
function shuffle_plasma() {
	if [[ "$rand" == 1 ]] ; then
		shuffle_plasma="0.00,0.00,$(shuf -i 9-10 -n 1),1,0,$(shuf -i 75-255 -n 3 | tr '\n' ',' | sed 's/,$//')"
	fi
}

function gradient() {
	shuffle_gradient
	gmic -v -"$debug" "$(sed 's/x/,/' <<<"$res"),1,3" \
		-gimp_corner_gradient "$shuffle_gradient" -o \
		"$root/$res/$mode-$name.png"
}

function plasma() {
	shuffle_plasma
	gmic -v -"$debug" "$(sed 's/x/,/' <<<"$res"),1,3" \
		-gimp_plasma "$shuffle_plasma" -o \
		"$root/$res/$mode-$name.png"
}

function turbulence() {
	shuffle_turbulence
	gmic -v -"$debug" "$(sed 's/x/,/' <<<"$res"),1,3" \
		-gimp_turbulence "$shuffle_turbulence" -o \
		"$root/$res/$mode-$name.png"
}
###

###
# Get and set parameters
while getopts tpgrs OPT ; do
	case "$OPT" in
		t) turbulence=1 ; mode="turbulence" ;;
		p) plasma=1 ; mode="plasma" ;;
		g) gradient=1 ; mode="gradient" ;;
		r) rand=1 ;;
		s) setit=1 ;;
		?) usage ; exit 1 ;;
	esac
done
###

# display size
all=""
while read -r res line ; do
	[ ! -d "$root/$res" ] && mkdir -p "$root/$res"
	if [ "$gradient" -eq 1 ] ; then
		gradient
	elif [ "$plasma" -eq 1 ] ; then
		plasma
	else
		turbulence
	fi
	# swap order here, if you have multiple monitors ordered by
	# descending resolution, i.e. big monitor on the left, little one
	# on the right
	out="shuffle_$mode"
	echo "$name:$mode:${!out}" >> "$log"
	all="$all $root/$res/$mode-$name.png"
done < <(xrandr | grep "\*" | sort -nr)

# montage (only if more than one screen is connected)
cur=$(xrandr | head -1 |  tr -d ' ' | cut -d\, -f 2 | sed 's/current//')
[ ! -d "$root/$cur" ] && mkdir "$root/$cur"
if [[ $(xrandr | grep -c "\ connected") -gt 1 ]] ; then
	montage -background black -mode Concatenate \
		"$all" "$root/$cur/$mode-$name.png"
fi

# set the background with feh, if parameter is given
[ "$setit" -eq 1 ] && feh --bg-tile "$root/$cur/$mode-$name.png"

Die Werte im Skript sollten nur schoene Hintergruende zaubern, ich wollte keine dunklen Farben oder sehr wirre Hintergruende, sind aber natuerlich anpassbar.
Um den neuen Hintergrund direkt anzuzeigen nutze ich feh , allerdings wird fuer KDE, GNOME, usw. ggf. ein anderer Befehl benoetigt (siehe hier ).

Ein weiterer Anwendungsfall: mit obigem Skript je 10 Hintergruende erstellen und dann mit diesem Skript und folgendem Cronjob stuendlich eins davon anzeigen lassen (crontab -e ausfuehren und am Ende @hourly /path/to/script/change_wallpaper.sh einfuegen).

  change_wallpaper.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# change me
root="$HOME/pics/wallpaper"

# dependency
command -v feh >/dev/null 2>&1 || { echo >&2 "$0 error: missing dependency (\"feh\")"; exit 1; }

# reason for this here: http://yhaupenthal.org/1265597121.htm
export DISPLAY=:0.0

# get the resolution of all monitors together
res=$(xrandr | head -1 |  tr -d ' ' | cut -d\, -f 2 | sed 's/current//')
src="$root/$res"
if [[ ! -d "$src" ]] ; then
        echo >&2 "$0 error: no such folder (\"$src\")"
        exit 1
else
        # how many files in $src
        lines=$(ls "$src" | wc -l)
        # get a random number
        rand=$(shuf -i 1-"$lines" -n 1)
        # get the pic belonging to the number
        pic=$(ls "$src" | sed -n "${rand}p")

        # show it with feh
        feh --bg-tile "$src/$pic"
fi

Hier noch ein paar Beispiele:

Gradient mit unterschiedlichen Werten
Gradient mit unterschiedlichen Werten
Gradient mit denselben Werten
Gradient mit denselben Werten
Plasma
Plasma
Turbulence
Turbulence

Randnotiz:

Bloglovin hat alle meine Feeds drin, und um den jeweiligen Blog zu “claimen” muss ein Link im Feed drin sein. Ich wollte keinen Beitrag extra darueber schreiben, da es ja nix mit Linux zu tun hat, daher nun hier nur am Rande: Follow my blog with Bloglovin


 Indien: Packliste und Apps

Beitraginfos

 2014-12-10, 22:46:12
 2023-09-30, 18:22:59
  gimp, linux, osbn, wallpaper
 Permalink

Ähnliche Beiträge