diff options
-rw-r--r--[-rwxr-xr-x] | tdescreensaver/kxsconfig/update_hacks.sh | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/tdescreensaver/kxsconfig/update_hacks.sh b/tdescreensaver/kxsconfig/update_hacks.sh index 2f88d1f2..7d4deca7 100755..100644 --- a/tdescreensaver/kxsconfig/update_hacks.sh +++ b/tdescreensaver/kxsconfig/update_hacks.sh @@ -1,18 +1,50 @@ #!/bin/sh -scsvs=`cd /usr/lib/xscreensaver/ && ls -1 | grep -v config` + +# Checks for Xscreensaver directory (may vary on different distributions) +if [ -d /usr/libexec/xscreensaver ]; then + XSDIR=/usr/libexec/xscreensaver +elif [ -d /usr/lib64/xscreensaver ]; then + XSDIR=/usr/lib64/xscreensaver +else + XSDIR=/usr/lib/xscreensaver +fi + +# Gets list of screensavers. Exclude 'config'. +scsvs="" +pushd "${XSDIR}" >/dev/null +for i in *; do + if [ "${i}" != "config" ]; then + scsvs="${scsvs} ${i}" + fi +done +popd >/dev/null + echo $scsvs + +# Removes useless .desktop files, if any +for f in ScreenSavers/*.desktop; do + # Gets the command line for this screensaver + Exec="$(sed -n '/^Exec=kxsconfig / s/.* \(.*\)/\1/' $f)" + if [ ! -x "${XSDIR}/${Exec}" ]; then + echo "Removing ${f}" + rm -f "${f}" + fi +done + +# Creates missing screensavers .desktop files for name in $scsvs; do - if test -f /usr/lib/xscreensaver/$name && test -f /usr/share/xscreensaver/config/$name.xml && test ! -f ScreenSavers/$name.desktop; then + if test -f "${XSDIR}/$name" && test -f "/usr/share/xscreensaver/config/$name.xml" && test ! -f "ScreenSavers/$name.desktop"; then echo "name: $name" label=`grep '<screensaver.*_label' /usr/share/xscreensaver/config/$name.xml | sed -e 's#^.*_label=\"\(.*\)\".*$#\1#'` echo "label: $label" f=ScreenSavers/$name.desktop sed -e "s#@NAME@#$name#; s#@LABEL@#$label#" ScreenSavers/xscreensaver.template > $f - if ldd /usr/lib/xscreensaver/$name 2>&1 | grep libGL; then + if ldd "${XSDIR}/$name" 2>&1 | grep libGL; then sed -e "s,@GL1@,X-TDE-Category=OpenGL Screen Savers,; s,@GL2@,X-TDE-Type=OpenGL," $f > $f.new else grep -v @GL $f > $f.new fi mv $f.new $f fi -done +done + |