diff --git a/earth_wallpaper.sh b/earth_wallpaper.sh
new file mode 100755
index 0000000..0ef240e
--- /dev/null
+++ b/earth_wallpaper.sh
@@ -0,0 +1,183 @@
+#!/bin/bash
+#
+# earth_wallpaper.sh
+#
+# Description: Obtain an image of the planet earth centered over
+# a city, with the night shadow according to the current time and
+# overlay of information
+#
+
+cur_dir=$(dirname "${0}")
+# shellcheck disable=SC1091
+[ -r "${cur_dir}/shared_functions.sh" ] && . "${cur_dir}/shared_functions.sh"
+
+wallpaper_file="${HOME}/wallpaper.jpg"
+wallpaper_file2="/etc/lightdm/background.jpg"
+archive_folder="${HOME}/earth_pics"
+screen_width=1366
+# `convert -list font` to get the list of fonts
+font_name="Bitstream-Vera-Sans"
+gsettings_cmd=$(which gsettings)
+font_name=$("${gsettings_cmd}" get org.gnome.desktop.interface font-name | sed "s/'//g" | sed 's/ [0-9]*$//g')
+check_internet() {
+ default_route=$(/sbin/route -n | egrep "^0.0.0.0")
+ if [ "$default_route" == "" ]; then
+ return 1
+ fi
+ ping -q -c 2 en.wikipedia.org &> /dev/null
+ return $?
+}
+check_internet || exit 1
+
+message "Using font '${font_name}'"
+
+wget_cmd=$(which wget)
+if [ -z ${wget_cmd} ]; then
+ echo "It seems like wget is not installed."
+ exit 3
+fi
+
+city="$1"
+if [[ -z ${city} ]]; then
+ echo "You must indicate a city to center the image."
+ exit 4
+fi
+str_city=$(echo "$city" | sed "s/ /_/g" -)
+message "str_city $str_city"
+wiki_url="https://en.wikipedia.org/wiki/$str_city"
+message "wiki_url $wiki_url"
+wiki_content=$("${wget_cmd}" -q -O - $wiki_url)
+latitude=$(echo $wiki_content | egrep -o "[0-9]{1,2}°[0-9]?[0-9]?′?[0-9]?[0-9]?″?[NS]" | head -n 1)
+message "latitude $latitude"
+longitude=$(echo $wiki_content | egrep -o "[0-9]{1,2}°[0-9]?[0-9]?′?[0-9]?[0-9]?″?[EW]" | head -n 1)
+message "longitude $longitude"
+g_latitude=$(echo $latitude | egrep -o "[0-9]{1,2}°" | sed "s/°//g" - )
+message "g_latitude $g_latitude"
+m_latitude=$(echo $latitude | egrep -o "[0-9]{1,2}′" | sed "s/′//g" - )
+message "m_latitude $m_latitude"
+[[ "$m_latitude" == "" ]] && m_latitude=0
+s_latitude=$(echo $latitude | egrep -o "[0-9]{1,2}″" | sed "s/″//g" - )
+message "s_latitude $s_latitude"
+[[ "$s_latitude" == "" ]] && s_latitude=0
+o_latitude=$(echo $latitude | egrep -o "[NS]")
+if [[ "$o_latitude" == "S" ]]; then
+ o_latitude=South
+else
+ o_latitude=North
+fi
+message "o_latitude $o_latitude"
+gm_latitude=$(echo "scale=2; $m_latitude / 60" | bc)
+message "gm_latitude $gm_latitude"
+gs_latitude=$(echo "scale=2; $m_latitude / 3600" | bc)
+message "gs_latitude $gs_latitude"
+g_latitude=$(echo "scale=2; $g_latitude + $gm_latitude + $gs_latitude" | bc)
+message "g_latitude $g_latitude"
+g_longitude=$(echo $longitude | egrep -o "[0-9]{1,2}°" | sed "s/°//g" - )
+message "g_longitude $g_longitude"
+m_longitude=$(echo $longitude | egrep -o "[0-9]{1,2}′" | sed "s/′//g" - )
+[[ "$m_longitude" == "" ]] && m_longitude=0
+message "m_longitude $m_longitude"
+s_longitude=$(echo $longitude | egrep -o "[0-9]{1,2}″" | sed "s/″//g" - )
+[[ "$s_longitude" == "" ]] && s_longitude=0
+message "s_longitude $s_longitude"
+o_longitude=$(echo $longitude | egrep -o "[EW]")
+if [[ "$o_longitude" == "E" ]]; then
+ o_longitude=East
+else
+ o_longitude=West
+fi
+message "o_longitude $o_longitude"
+gm_longitude=$(echo "scale=2; $m_longitude / 60" | bc)
+message "gm_longitude $gm_longitude"
+gs_longitude=$(echo "scale=2; $m_longitude / 3600" | bc)
+message "gs_longitude $gs_longitude"
+g_longitude=$(echo "scale=2; $g_longitude + $gm_longitude + $gs_longitude" | bc)
+message "g_longitude $g_longitude"
+#url='http://www.fourmilab.ch/cgi-bin/Earth?img=learth.evif&imgsize=1366&dynimg=y&opt=-l&lat=41&ns=North&lon=0&ew=East&alt=35785&tle=&date=0&utc=&jd='
+
+url="http://www.fourmilab.ch/cgi-bin/Earth?img=learth.evif&imgsize=$screen_width&dynimg=y&opt=-l&lat=$g_latitude&ns=$o_latitude&lon=$g_longitude&ew=$o_longitude&alt=35785&tle=&date=0&utc=&jd="
+message "URL $url"
+cur_date=$(date +%Y-%m-%d)
+time=$(date +%H.%M.%S)
+date="$cur_date_$time"
+if [[ -e $wallpaper_file ]]; then
+ rm "${wallpaper_file}" -rf
+fi
+"${wget_cmd}" -q $url -O $wallpaper_file
+error_code=$?
+if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code downloading image from '$url' to '$wallpaper_file'"
+ exit 1
+fi
+if [[ "$o_latitude" == "South" ]]; then
+ g_latitude="-$g_latitude"
+fi
+if [[ "$o_longitude" == "West" ]]; then
+ g_longitude="-$g_longitude"
+fi
+weather_url="http://api.wunderground.com/api/be78b9c2c0dbd00f/conditions/lang:ES/q/$g_latitude,$g_longitude.xml"
+temperature=$("${wget_cmd}" -q -O - "$weather_url" | egrep -o "-?[0-9]*\.?[0-9]?" | sed "s///g" - | sed "s|||g" -)
+text="Image from $cur_date at $time\n$city $temperatureº C"
+convert_cmd=$(which convert)
+if [ ! -x "${convert_cmd}" ]; then
+ apt install imagemagick
+fi
+run_and_log "${convert_cmd}" $wallpaper_file -pointsize 50 -font "${font_name}" -fill "#505050" -gravity SouthEast -annotate +0+0 "$text" $wallpaper_file
+error_code=$?
+if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code adding date to the image"
+fi
+
+mkdir $archive_folder -p
+if pgrep lightdm > /dev/null
+then
+ if [[ -w "$wallpaper_file2" ]]
+ then
+ cp "$wallpaper_file" "$wallpaper_file2"
+ else
+ echo "I'm not able to write to $wallpaper_file2"
+ fi
+fi
+# Store the image
+cp "$wallpaper_file" "$archive_folder/pic_$date.jpg" -rfp
+error_code=$?
+if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code saving a copy of the image"
+fi
+
+# Set the gnome 2 desktop background
+if [ "${gconf_cmd}" != "" ]; then
+ run_and_log "${gconf_cmd}" --type string --set /desktop/gnome/background/picture_options scaled
+ error_code=$?
+ if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code setting option scaled for the wallpaper"
+ fi
+ run_and_log "${gconf_cmd}" --type string --set /desktop/gnome/background/picture_filename "${wallpaper_file}"
+ error_code=$?
+ if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code setting image file as wallpaper in Gnome 2"
+ fi
+fi
+
+if [ "${gsettings_cmd}" != "" ]; then
+ run_and_log "${gsettings_cmd}" set org.gnome.desktop.background picture-uri "file://$wallpaper_file"
+ error_code=$?
+ if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code setting image file as wallpaper in Gnome"
+ fi
+
+ run_and_log "${gsettings_cmd}" set org.gnome.desktop.background picture-options "scaled"
+ run_and_log "${gsettings_cmd}" set org.gnome.desktop.background primary-color '#000000'
+
+ run_and_log "${gsettings_cmd}" set com.canonical.unity-greeter background "$wallpaper_file2"
+fi
+if pgrep gnome-session > /dev/null
+then
+ message "This is Gnome, no XFdesktop to reload."
+else
+ run_and_log xfdesktop --reload 2> /dev/null
+ error_code=$?
+ if [[ "$error_code" != "0" ]]; then
+ echo "Error $error_code reloading xfdesktop" > /dev/null
+ fi
+fi
diff --git a/shared_functions.sh b/shared_functions.sh
new file mode 100755
index 0000000..ebb81c4
--- /dev/null
+++ b/shared_functions.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+
+function message() {
+ red="\e[1;31m"
+ yellow="\e[1;33m"
+ blue="\e[34m"
+ if [ -z "${APP}" ]; then
+ app=$(basename "${0}" .sh)
+ else
+ app="${APP}"
+ fi
+ current_date=$(date '+%Y-%m-%d %H:%M:%S')
+ text="${1}"
+ if [ -n "${text}" ]; then
+ if [ ${#} -gt 1 ]; then
+ print="${2}"
+ shift
+ else
+ print=""
+ fi
+ if [ ${#} -gt 1 ]; then
+ extra_args="${2}"
+ shift
+ subject="${2}"
+ shift
+ recipient="${2}"
+ shift
+ else
+ extra_args=""
+ fi
+ # shellcheck disable=SC2153
+ if [ -z "${LOG_FILE}" ];then
+ if [ -w /var/log ]; then
+ log_file="/var/log/${app}.log"
+ else
+ mkdir -p "${HOME}/log/"
+ log_file="${HOME}/log/${app}.log"
+ fi
+ else
+ log_file="${LOG_FILE}"
+ fi
+ mkdir -p "$(dirname "${log_file}")"
+ if [[ "${print}" =~ [Ww][Aa][Rr][Nn] ]]; then
+ echo -e "${yellow}${current_date} ${text}"
+ else
+ if [[ "${print}" =~ [Ee][Rr][Rr] ]]; then
+ >&2 echo -e "${red}${current_date} ${text}"
+ else
+ if [[ ( -n "${DEBUG}" ) && ( "${DEBUG}" == "true" ) || ( "${DEBUG}" -gt "0" ) ]] || [[ "${print}" =~ [Pp] ]] || [[ "${print}" =~ [Pp][Rr][Ii][Nn][Tt] ]]; then
+ echo -e "${blue}${current_date} ${text}"
+ fi
+ fi
+ fi
+ echo "${current_date} ${text}" >> "${log_file}"
+ logger -t "${app}" "${text}"
+ if [ "${extra_args}" == "to_mail" ]; then
+ echo "${text}" | mail -s "${subject}" "${recipient}"
+ fi
+ fi
+}
+
+function run_and_log() {
+ extra_args=""
+ if [ "${1}" == "to_mail" ]; then
+ extra_args="to_mail"
+ shift
+ subject="${1}"
+ shift
+ recipient="${1}"
+ shift
+ fi
+ CMD=$*
+ message "Running and logging: ${CMD}"
+ if [[ ( -n "${DEBUG}" ) && ( "${DEBUG}" == "true" ) ]]; then
+ temp_file=$(mktemp /tmp/tmp.XXXX.log)
+ message "Debug log file '${temp_file}'"
+ output=$(${CMD} 2>&1 |tee "${temp_file}")
+ else
+ output=$(${CMD} 2>&1)
+ fi
+ return_code="${?}"
+ for line in "${output[@]}"
+ do
+ message "${line}" "${extra_args}" "${subject}" "${recipient}"
+ done <<< "${output[@]}"
+ if [ "${return_code}" != "0" ]; then
+ message "Command run finished with error ${return_code}." "${extra_args}" "${subject}" "${recipient}"
+ else
+ message "Command ran without errors." "${extra_args}" "${subject}" "${recipient}"
+ fi
+}