Skip to content

Instantly share code, notes, and snippets.

@stbuehler
Created April 14, 2016 07:53
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stbuehler/bbeceabc9c8ab6696287c3ec586ac66e to your computer and use it in GitHub Desktop.
Save stbuehler/bbeceabc9c8ab6696287c3ec586ac66e to your computer and use it in GitHub Desktop.
#!/bin/sh
# Find model names current PPDs were installed from
set -e
tmpdir=$(mktemp --tmpdir -d cups-ppd-source-XXXXXXX)
trap 'rm -rf "${tmpdir}"' EXIT
ppd_updater () {
local driverregexp="$1"
local gennicknameregexp="$2"
local pkg="$3"
[ ! -z "$gennicknameregexp" ] && \
gennicknameregexp="; $gennicknameregexp"
gennicknameregexp='s/\s*\(recommended\)//'"$gennicknameregexp"
grep -E $driverregexp "${tmpdir}/all_drivers" > "${tmpdir}/pkg_drivers" || :
cd /etc/cups/ppd
for ppd in *.ppd; do
[ -r "$ppd" ] || continue
queue=${ppd%.ppd}
nickname=`grep '\*NickName:' "$ppd" | cut -d '"' -f 2 | perl -p -e 's/\n$//' | perl -p -e "$gennicknameregexp"`
regex_nickname=`printf '%s' "${nickname}" | perl -p -e 's/(\W)/\\\\$1/g'`
lang=`grep '\*LanguageVersion:' "$ppd" | cut -d ' ' -f 2 | perl -e 'print lc(<>)' | perl -p -e 's/[\r\n]//gs'`
cat "${tmpdir}/pkg_drivers" | perl -p -e "$gennicknameregexp; s/\n*$/\n/s" | grep -E '^\S+\s+.*'"${regex_nickname}"'$' | cut -d ' ' -f 1 > "${tmpdir}/ppd_possible_uris"
if [ -s "${tmpdir}/ppd_possible_uris" ]; then
echo >&2 "Possible PPD URIs for ${queue} (nickname '${nickname}', lang='${lang}', pkg='${pkg}'):"
cat "${tmpdir}/ppd_possible_uris"
fi
done
return 0
}
lpinfo -h /var/run/cups/cups.sock -m > "${tmpdir}/all_drivers"
ppd_updater 'lsb/usr/cups-included/|drv:///sample.drv/' 's/,\s*\d+\.\d+[\d\.]*$//i' '<cups included>'
for driverfile in `ls /usr/share/cups/ppd-updaters`; do
. "/usr/share/cups/ppd-updaters/${driverfile}"
ppd_updater "${DRIVER_REGEXP}" "${GENNICKNAME_REGEXP}" "${driverfile%.ppd-updater}"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment