I want to automatically get my printer to scan documents on a set interval, so that I can swap out and scan my documents without needing to click a button on my computer every time. I also need the ability to save documents to a certain image format and quality. Preferably, I would like to be able to do this from a bash script, so that it should work on any distro. How do I do this?


I have created a script just for this purpose. https://github.com/aaronfranke/Linux-tools/blob/master/all-distros/autoscan.sh

Edit the variables at the top before running. You must specify your printer's address, which can be found by running scanimage -L. You can also specify a time interval, a format, and quality (PPI). The script will save your scanned images to a random 6-character filename.

Note: This script requires the scanimage and mogrify commands to be installed.


# autoscan.sh - A script for automatically scanning from a printer/scanner and saving to a random file.

# Must be set to your printer's address. Use `scanimage -L` to get a list of printers.

# Optional variables, feel free to adjust.
TIME=30     # TIME (in seconds), should be at least 10.
FORMAT=jpg  # FORMAT must be understood by mogrify. Ex: jpg, png, tiff, bmp.
QUALITY=200 # QUALITY must be supported by your printer. Common ones are 300, 200, 150, and 75.

if [ ! -f /usr/bin/scanimage ]; then
    echo "This script requires the \`scanimage\` command, which was not found. Exiting. "
    exit 1
if [ ! -f /usr/bin/mogrify ]; then
    echo "This script requires the \`mogrify\` command from the \`imagemagick\` package, which was not found. Exiting. "
    exit 2

echo " "
echo "Computer will start automatically scanning in a few seconds... "
sleep 5

while true; do
    FILENAME=$(mktemp -u XXXXXX)
    echo " "
    echo "Scanning and saving to $FILENAME.$FORMAT... "
    scanimage -d $PRINTER --mode Color --resolution $QUALITY --format tiff > $FILENAME.tiff 2>/dev/null
    mogrify -format $FORMAT $FILENAME.tiff
    rm $FILENAME.tiff
    echo " "
    echo "Done scanning $FILENAME.$FORMAT, waiting $TIME seconds for next scan... "
    sleep $SLTIME
    echo " "
    echo "5... "
    sleep 1
    echo "4... "
    sleep 1
    echo "3... "
    sleep 1
    echo "2... "
    sleep 1
    echo "1... "
    sleep 1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.