echo "${*}" 1>&2
}
-# Test for root
-if [ ${UID} -ne 0 ] ; then
- echo "This script must be run as root, relaunching with sudo:"
- sudo bash "$0" "$@"
- exit $?
-fi
-
# Set default options that may be overridden by passed options below
Model="generic"
Driver="postscript"
shift # past argument or value
done
+# Make sure we have sudo powers when we need it
+if ! sudo -k; then
+ printerror "This script requires sudo to function"
+ exit 1
+fi
+
+# But don't run as super user, otherwise we can't access the keyring
+if [ ${UID} -eq 0 ]; then
+ if [ "${Plaintext}" != "YES" ]; then
+ printerror "Please run this script as your normal user, we will prompt you for your sudo password when needed. Or you can use the --plaintext option"
+ exit 1
+ fi
+fi
+
+echo "Please provide sudo password, as some parts of this script requires it"
+if ! sudo true; then
+ printerror "Sorry, this script requires working sudo privileges to function"
+ exit 1
+fi
+
# Test for supported OS
Uname=$(uname | tr "[:upper:]" "[:lower:]")
if [ "${Uname}" != "darwin" ] && [ "${Uname}" != "linux" ] && [ "${Force}" != "YES" ]; then
fi
# Test for CUPS
-if ! command -v lpadmin > /dev/null 2>&1; then
+if ! sudo bash -c "command -v lpadmin" > /dev/null 2>&1; then
printerror "You must have CUPS installed to add printers. Please install CUPS."
exit 1
fi
if command -v zypper >/dev/null 2>&1; then
if [ "${Driver}" = "postscript" ]; then
if [ "${Model}" = "ricoh" ]; then
- if ! rpm -q OpenPrintingPPDs-postscript >/dev/null 2>&1; then
+ if ! sudo rpm -q OpenPrintingPPDs-postscript >/dev/null 2>&1; then
printerror "You don't seem to have the correct printer drivers installed, please run:"
printerror " sudo zypper install OpenPrintingPPDs-postscript"
printerror "first, or use the generic driver instead."
DriverPath="Postscript.ppd.gz"
fi
else
- if ! rpm -q OpenPrintingPPDs-ghostscript >/dev/null 2>&1; then
+ if ! sudo rpm -q OpenPrintingPPDs-ghostscript >/dev/null 2>&1; then
printerror "You don't seem to have the correct printer drivers installed, please run:"
printerror " sudo zypper install OpenPrintingPPDs-ghostscript"
printerror "first, or use the generic driver instead."
if [ "${Model}" = "ricoh" ]; then
# This should match Fedora and other modern rpm based systems that have dnf as the primary package manager
if command -v dnf >/dev/null 2>&1; then
- if ! rpm -q foomatic-db-ppds 2>&1; then
+ if ! sudo rpm -q foomatic-db-ppds 2>&1; then
printerror "You don't seem to have the correct printer drivers installed, please run:"
printerror " sudo dnf install foomatic-db-ppds"
printerror "first, or use the generic driver instead."
fi
# This should match CentOS, RHEL and other RHEL based distros that have yum as the primary package manager
if command -v yum >/dev/null 2>&1; then
- if ! rpm -q foomatic-db-ppds >/dev/null 2>&1; then
+ if ! sudo rpm -q foomatic-db-ppds >/dev/null 2>&1; then
printerror "You don't seem to have the correct printer drivers installed, please run:"
printerror " sudo yum install foomatic-db-ppds"
printerror "first, or use the generic driver instead."
fi
# This should match Debian, Ubuntu and most if not all derivates that use dpkg as the primary package manager
if command -v dpkg >/dev/null 2>&1; then
- if ! dpkg -s openprinting-ppds > /dev/null 2>&1; then
+ if ! sudo dpkg -s openprinting-ppds > /dev/null 2>&1; then
printerror "You must have the correct printer drivers installed, please run:"
printerror " sudo apt-get install openprinting-ppds"
printerror "first, or use the generic driver instead."
fi
# Finally we can add the printer, let's remove any existing printer share with the same name first
-lpadmin -x ${QueueName} > /dev/null 2&>1
+sudo lpadmin -x ${QueueName} > /dev/null 2>&1
# The Linux way
if [ "${Uname}" = "linux" ]; then
PrinterShare="smb://${Workgroup}/${PrintServer}/${PrintFile}"
AuthInfo="username,password"
fi
- if ! lpadmin -p ${QueueName} \
+ if ! sudo lpadmin -p ${QueueName} \
-D "FollowMe print queue at NTNU" \
+ -L "Many locations" \
-v "${PrinterShare}" \
-m "${DriverPath}" \
-o auth-info-required="$AuthInfo" \
# The OSX way
if [ "${Uname}" = "darwin" ]; then
- if ! lpadmin -p ${QueueName} \
+ if ! sudo lpadmin -p ${QueueName} \
-D "FollowMe print queue at NTNU" \
+ -L "Many locations" \
-v "smb://${PrintServer}/${PrintFile}" \
-m "${DriverPath}" \
-o printer-is-shared=false -o printer-op-policy=authenticated \
exit 1
fi
- cupsenable "${QueueName}"
- cupsaccept "${QueueName}"
+ sudo cupsenable "${QueueName}"
+ sudo cupsaccept "${QueueName}"
# Add credentials to the keychain if they are missing
# Shamelessly stolen^W^WBorrowed from https://github.com/Orakeltjenesten/scripts/blob/33abfb353524f449f0bbdee27adb2f1f0a9756a2/print/ntnuprint-mac.sh
fi
# Set correct paper size and enable the duplexer option
-if ! lpadmin -p ${QueueName} -o PageSize=A4 -o Option1=True; then
+if ! sudo lpadmin -p ${QueueName} -o PageSize=A4 -o Option1=True; then
printerror "Could not set default options on the print queue ${QueueName}. See above error for details."
exit 1
fi
# Set as default
-if ! lpadmin -d ${QueueName}; then
+if ! sudo lpadmin -d ${QueueName}; then
printerror "Could not set the print queue ${QueueName} as default printer. See above error for details."
exit 1
fi