staging.inyokaproject.org

Hintergrund-Diaschau - Skript

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

Mr._Lotte

Anmeldungsdatum:
25. August 2010

Beiträge: Zähle...

Hi,

Mich hat schon lange mal Interessiert, wie das bei Ubuntu mit den Bilderwechsel funktioniert. Wie das zum Beispiel bei der Diaschau Weltraum bei den Hintergrundbildern der Fall ist.

Nach langen suchen, hab ich herausgefunden, dass das ganze in einer xml - Datei steckt. Nun wollte ich natürlich ein Programm/Skript haben welches mir automatisch die xml - Datei erstellt, kam aber zu keinem zufriedenstellenden Ergebnis. Also hab ich mich selbst daran gesetzt und mir ein kleine bash - Datei geschrieben: (hab ihn auch noch mal im Anhang)

  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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#!/bin/bash



# erstellt eine xml - Datei für die Automatische Hintergrundbilder


# Hilfeausgabe

if echo "$1" | grep -q "^\-h$" ||  echo "$1" | grep -q "^\-\-help$"; then

	echo

	echo Erstellt eine xml - Datei die für die Hintergrund Diaschau, in Ubuntu, ihre Verwendung finden kann.

	echo

	echo -e "\e[1;4mÜbersicht:\e[0m"

	echo -e "$0 [\e[1m-b\e[0m \e[1mSEC\e[0m \e[1m-d\e[0m \e[1mDATE\e[0m \e[1m-q\e[0m \e[1m-s\e[0m \e[1mSEC\e[0m] \e[1mDEST\e[0m \e[1mFILE\e[0m [\e[1mFILE\e[0m ...]"

	echo -e "$0 \e[1m-h\e[0m"

	echo -e "$0 \e[1m--help\e[0m"

	echo

	echo -e "\e[1;4mArgument:\e[0m"

	echo -e '\t \e[1mDEST\e[0m\t Beschreibt den Namen der Ausgabedatei. Wenn sie schon existiert wird sie überschrieben.'

	echo -e '\t \e[1mFILE\e[0m\t Beschreibt die einzelnen Dateien.'

	echo -e '\t \e[1m-b\e[0m \e[1mSEC\e[0m\n\t\t Wie lange eine Überblendung dauern soll in Sekunden (Standart: 1.5 Sekunden)'

	echo -e '\t \e[1m-d\e[0m \e[1mDATE\e[0m\n\t\t Gibt das Datum und Zeit (JJJJ-MM-DD#hh:mm:ss) bis auf die Sekunde genau an, wann der Bilderwechsel beginnen soll. Standard ist das aktuelle Datum.'

	echo -e '\t \e[1m-q\e[0m\n\t\t Es wird keine Ausgabe im Terminal gemacht.'

	echo -e '\t \e[1m-s\e[0m \e[1mSEC\e[0m\n\t\t Wie lange ein Bild angezeigt werden soll dauern soll in Sekunden (Standard: 20 Minuten)'

	echo -e '\t \e[1m-h\e[0m, \e[1m--help\e[0m\n\t\t Hilfe wird angezeigt mit der Parameter Liste'

	echo

	echo -e "\e[1;4mNützlich Befehlskombinationen:\e[0m"

	echo -en "\t"

	echo "ls -1 ~/Bilder | sed 'i\n ~\/Bilder\/' | tr -d '\n' | xargs $0 out.xml"

	echo -e '\t\t Alle Dateien aus einem entfernten Verzeichnis (z.B. ~/Bilder) als FILE Parameter übernehmen. '

	echo -en "\t"

	echo "ls -b | $0 out.xml"

	echo -e '\t\t Alle Dateien des Aktuellen Ordners. Das -b damit eventuelle Leerzeichen geslasht werden.'

else

	# Vordefinitionen

	JJJJ=$(date +%Y)

	MM=$(date +%m)

	DD=$(date +%d)

	hh=$(date +%H)

	mm=$(date +%M)

	ss=$(date +%S)

	b=1.5

	s=1200

	DESTFILE=""

	FILE=""

	FILETEMP=""

	

	# Parametercheck

	argb=0

	d=0

	q=0

	args=0

	DEST=0

	FirstFILE=0

	

	

	for para in "$@"; do

		# Parameterabfrage

		if echo "$para" | grep -q "^\-[bdqs]*$"; then

			if [ $DEST -eq 1 ] ; then if [ $q -eq 0 ] ; then echo FEHLER: Argument wurden an falscher Stelle geschrieben. 1>&2; fi; exit 1; fi

			if echo "$para" | grep -q "b"; then argb=1; fi

			if echo "$para" | grep -q "d"; then d=1; fi

			if echo "$para" | grep -q "q"; then q=1; fi

			if echo "$para" | grep -q "s"; then args=1; fi

		elif [ $argb -eq 1 ] ; then

			if echo "$para" | egrep -q "^[0-9]+(\.[0-9]+)?$"; then

				b=$para

				argb=0

			else

				if [ $q -eq 0 ] ; then echo FEHLER: Argument -b wurde ein falscher Wert übergeben - \"$para\" 1>&2; fi

				exit 1

			fi

		elif [ $args -eq 1 ] ; then

			if echo "$para" | egrep -q "^[0-9]+(\.[0-9]+)?$"; then

				s=$para

				args=0

			else

				if [ $q -eq 0 ] ; then echo FEHLER: Argument -s wurde ein falscher Wert übergeben - \"$para\" 1>&2; fi

				exit 1

			fi

		elif [ $d -eq 1 ] ; then

			if echo "$para" | egrep -q "^[0-9]{4}-[0-9]{2}-[0-9]{2}#[0-9]{2}:[0-9]{2}:[0-9]{2}$"; then

				JJJJ=${arg:0:4}

				MM=${arg:5:2}

				DD=${arg:8:2}

				hh=${arg:11:2}

				mm=${arg:14:2}

				ss=${arg:17:2}

				d=0

			else

				if [ $q -eq 0 ] ; then echo FEHLER: Argument -d wurde ein falscher Wert übergeben - \"$para\" 1>&2; fi

				exit 1

			fi

		else # Dateien überprüfen -> da keine weiteren Parameter erwartet werden

			if [ $q -eq 0 ] ; then

				if [ $DEST -eq 0 ] ; then

					echo -e "\n\t Parameter wurden gesetzt."

				else

					echo -e "\t Datei \e[1m$para\e[0m wird hinzugefügt."

				fi

			fi

			if [ -e "$para" -o $DEST -eq 0 ] ; then

				para=$(readlink -m "$para")

				# Schreibe in die Ausgabedatei

				if [ $DEST -eq 0 ] ; then

					touch "$para"

					DESTFILE="$para"

					FILETEMP="<background>\n  <starttime>\n    <year>$JJJJ</year>\n    <month>$MM</month>\n    <day>$DD</day>\n    <hour>$hh</hour>\n    <minute>$mm</minute>\n    <second>$ss</second>\n  </starttime>"

					DEST=1;

				else

					# Schreibe die einzelnen Dateien ins File

					if [ $FirstFILE -eq 0 ] ; then

						FirstFILE=1

						FILE="$para"

					else

						FILETEMP="$FILETEMP\n    <to>$para</to>\n  </transition>"

					fi

					FILETEMP="$FILETEMP\n  <static>\n    <duration>$s</duration>\n    <file>$para</file>\n  </static>\n  <transition>\n    <duration>$b</duration>\n    <from>$para</from>"

				fi

			else

				if [ $q -eq 0 ] ; then echo FEHLER: Datei existiert nicht - \"$para\" 1>&2; fi

				exit 1

			fi

		fi

	done

	if [ $q -eq 0 ] ; then echo -e "\t Schreibe in Ausgabedatei: \e[1m$DESTFILE\e[0m\n"; fi

	echo -e "$FILETEMP\n    <to>$FILE</to>\n  </transition>\n</background>" > $DESTFILE

fi

exit

Bei mir hat es bis jetzt Funktioniert und hoffe auf nun auf positives Feedback. 😉

Wenn jemand Probleme oder Verbesserungsvorschläge hat sind sie gerne Willkommen.

Viele Grüße

Mr. Lotte

background-xml.bash (4.6 KiB)
Download background-xml.bash

Midhas

Avatar von Midhas

Anmeldungsdatum:
16. Dezember 2005

Beiträge: 238

Will nicht meckern, aber das nächste Mal vielleicht http://paste.ubuntu.com verwenden.

Antworten |