97 lines
3.5 KiB
Bash
Executable File
97 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# set-regreet-background.sh — set a specific image as the ReGreet greeter's background
|
|
# =============================================================================
|
|
# ReGreet reads its background from the path fixed in /etc/greetd/regreet.toml
|
|
# ([background] path = /usr/share/backgrounds/lightdm-greeter-bg.png — the name
|
|
# is shared with the old lightdm greeter, both point at the same file). Normally
|
|
# that file is kept in sync with your desktop wallpaper by the
|
|
# lightdm-greeter-wallpaper.path unit (see etc-lightdm/). This tool overrides it
|
|
# with a specific image of your choosing instead.
|
|
#
|
|
# NOTE: if lightdm-greeter-wallpaper.path is enabled, it will overwrite this
|
|
# choice the next time you change your desktop wallpaper via the picker. This
|
|
# script warns you when that unit is active; disable it
|
|
# (systemctl disable --now lightdm-greeter-wallpaper.path) if you want the
|
|
# greeter background to stay pinned regardless of desktop wallpaper changes.
|
|
#
|
|
# Usage:
|
|
# set-regreet-background.sh <image> [--dry-run] [--help]
|
|
# -n, --dry-run Print what would happen; change nothing
|
|
# -h, --help Show this help and exit
|
|
# =============================================================================
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SETUP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
source "$SETUP_DIR/modules/lib/logging.sh"
|
|
|
|
DEST="/usr/share/backgrounds/lightdm-greeter-bg.png"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
set-regreet-background.sh — set a specific image as the ReGreet greeter's background
|
|
|
|
Usage:
|
|
set-regreet-background.sh <image> [--dry-run] [--help]
|
|
-n, --dry-run Print what would happen; change nothing
|
|
-h, --help Show this help and exit
|
|
EOF
|
|
}
|
|
|
|
IMG=""
|
|
DRY_RUN=0
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-n|--dry-run) DRY_RUN=1 ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
-*) err "Unknown argument: $1"; echo "Try --help." >&2; exit 2 ;;
|
|
*) IMG="$1" ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ -z "$IMG" ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
[[ -f "$IMG" ]] || { err "Not found: $IMG"; exit 1; }
|
|
[[ -r "$IMG" ]] || { err "Not readable: $IMG"; exit 1; }
|
|
|
|
if command -v identify &>/dev/null && ! identify -format '%m' "$IMG" &>/dev/null; then
|
|
err "Not a readable image: $IMG"
|
|
exit 1
|
|
fi
|
|
|
|
run() {
|
|
if (( DRY_RUN )); then
|
|
printf '[dry-run] would run: %s\n' "$*"
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
# ReGreet loads the image by content, not by extension, but re-encode to a real
|
|
# PNG at DEST's fixed name so the file matches what it claims to be.
|
|
log "Setting ReGreet background to $IMG..."
|
|
if command -v magick &>/dev/null; then
|
|
TMP_BG="$(mktemp /tmp/regreet-bg.XXXXXX.png)"
|
|
trap 'rm -f "$TMP_BG"' EXIT
|
|
magick "$IMG" "$TMP_BG"
|
|
run sudo install -Dm644 "$TMP_BG" "$DEST"
|
|
else
|
|
warn "ImageMagick not found — copying the image as-is (extension will not match content)."
|
|
run sudo install -Dm644 "$IMG" "$DEST"
|
|
fi
|
|
|
|
if systemctl is-active --quiet lightdm-greeter-wallpaper.path 2>/dev/null; then
|
|
warn "lightdm-greeter-wallpaper.path is active — this background will be overwritten the next time your desktop wallpaper changes."
|
|
warn "To pin it permanently: sudo systemctl disable --now lightdm-greeter-wallpaper.path"
|
|
fi
|
|
|
|
if (( DRY_RUN )); then
|
|
log "Dry run complete — no changes were made."
|
|
else
|
|
log "ReGreet background set. It will show on the next greeter start (reboot, or restart greetd.service)."
|
|
fi
|