[sane-devel] [Scanbd] Set up for Canon PIXMA multifunction scanner - no button response

matt clark liquefry at gmail.com
Wed Oct 12 21:48:57 UTC 2016


Here's the original message again, removing the formatting from the
original forum website version that didn't seem to work.  Lots of the
original content went missing. Sorry for the double post if it did work for
you originally.  I've also added my config file to the end of this message,
so it's huge.
---
I've had a Canon MG8150 attached to my network for ages and decided to hook
it up to my network box (Fedora 23), basically hoping to automatically save
scans to my network drive when I press the scan button on the machine.

I followed various articles around the place to try and set this up but I
seem to have failed.  Here's a summary of where I'm up to - would love some
help troubleshooting the problem:

- Have installed sane-backends-devel via dnf, and scanbd 1.4.4 from source
(using default configure / gmake approach, no options).
- Copied the /etc/sane.d/* files to /usr/local/etc/scanbd/sane.d/
- added a symbolic link from /etc/scanbd to /usr/local/etc/scanbd just in
case anything refers to that.  I prefer working in usr to etc directly.
- Changed /etc/sane.d/saned.conf to only allow localhost
- Changed /usr/local/etc/scanbd/sane.d/saned.conf to allow all local
network clients
- Changed /etc/sane.d/net.conf to have 2 lines, connect_timeout = 3 and
localhost
- Changed /etc/sane.d/dll.conf to have only net
- Changed /etc/local/etc/scanbd/sane.d/dll.conf to comment out net, and
remove the unnecessary references (just kept pixma)
- Saved scanbd_dbus to /etc/dbus-1/system.d/scandb_dbus.conf
- Create systemd files /usr/lib/systemd/system/scanbd.service and
scanbm.socket.  Only change is to add the revised sane.d config directory.

scanbd.service:

[Unit]
Description=Scanner button polling Service

[Service]
Type=simple
ExecStart=/usr/local/sbin/scanbd -f -c /usr/local/etc/scanbd/scanbd.conf
#ExecReload=?
Environment=SANE_CONFIG_DIR=/usr/local/etc/scanbd/sane.d
StandardInput=null
StandardOutput=syslog
StandardError=syslog
#NotifyAccess=?

[Install]
WantedBy=multi-user.target
Also=scanbm.socket
Alias=dbus-de.kmux.scanbd.server.service

My scanbd.conf file is default, with some minor amendments.  See the bottom
of the message for full copy.


When the scanner is started either manually or via the service, it appears
to work ok but never picks up a button press.  The log always seems to show
a value of zero for the button polling response.

Outputs:
Test printer exists and is connected:
[matt at localhost scanbd]$ lsusb
Bus 002 Device 003: ID 04a9:174b Canon, Inc.

Test scanimage can find printer:
[matt at localhost scanbd]$ SANE_CONFIG_DIR=/usr/local/etc/scanbd/sane.d
scanimage -L
device `pixma:MG8100_192.168.1.49' is a CANON Canon PIXMA MG8100
multi-function peripheral

Scanimage can also send test greyscale.tiff to the network drive.

sane-find-scanner also finds the scanner, albeit only if signed in as root.
[matt at localhost scanbd]$ sudo sane-find-scanner
found USB scanner (vendor=0x04a9 [Canon], product=0x174b [MG8100 series])
at libusb:002:003

I've saved the log from scanbd to pastebin because it's huge.
http://pastebin.com/T6RHVsdV

I dont know if there's anything interesting in all that.  I couldn't find
any errors. At the end of the log you can see that it just repeats a
polling cycle, but the values for the buttons never change no matter how
much I press them.

Has anyone got any thoughts on how I could get this working?

Finally, added conf files as requested by Wilhelm:

[matt at localhost scanbd]$ cat /usr/local/etc/scanbd/scanbd.conf
/*
 * $Id: scanbd.conf 213 2015-10-05 06:52:50Z wimalopaan $
 *
 *  scanbd - KMUX scanner button daemon
 *
 *  Copyright (C) 2008 - 2015  Wilhelm Meier (wilhelm.meier at fh-kl.de)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
 */


# global settings
global {
        # turn on debugging

        # log to console
        debug   = true

        # debug logging
        # 1=error, 2=warn, 3=info, 4-7=debug
        debug-level = 4

        # drop priviliges to this user
        #=============================
        # Linux (most distributions use the saned user):
        # user    = saned
        # ArchLinux (ArchLinux doesn't have saned user)
        # user    = daemon
        # *BSD
        # user    = root
        user    = saned

        # Group to be used
        #=================
        # Linux (most distributions use the lp group to access scanners)
        # group   = lp
        # ArchLinux (ArchLinux uses the scanner group)
        # group = scanner
        #
        # *BSD (no group lp here, use daemon instead)
        # group   = daemon # root
        #
        group   = lp

        # the saned executable for manager-mode
        saned   = "/usr/local/sbin/saned"
        saned_opt  = {} # string-list
saned_env  = { "SANE_CONFIG_DIR=/usr/local/etc/scanbd/sane.d" } # list of
environment vars for saned

        # Scriptdir specifies where scanbd normally looks for scripts.
        # The scriptdir option can be defined as:
        #   - a path relative to the configuations (<path>/etc/scanbd)
directory
        #   - an abosolute path
        # Examples:
        # scriptdir = scripts
        # sets scriptdir to <path>/etc/scanbd/scripts.
        # scriptdir = /some/path
        # sets scriptdir to the specified absolute path
        # Default scriptdir is <path>/etc/scanbd, this is normally
appropriate
scriptdir = /etc/scanbd/scripts

        # Scripts to execute upon device insertion/removal.
        # It can be necessary to load firmware into the device when it is
first
        # inserted. For example, scanbuttond backend does not know how to
load
        # scanner firmware, and it can be rectified by making a custom
script.
        # A simple command like "scanimage -L" in an example insert.script
        # invokes saned and it loads the appropriate firmware if necessary.
        # These scripts receive environmental variables named in the
"environment" subsection:
        # SCANBD_DEVICE - device name (fixed string "dbus device" for dbus
notification)
        # SCANBD_ACTION - "insert" or "remove", so one script can be used.
        # device_insert_script = "insert.script"
        # device_remove_script =

        # scanbuttond_backends_dir sets the path where scanbd looks for the
scanbuttond backends
# It can be defined as relative path, starting from the scanbd config
directory or
        # as an absolute path
        # Default is <libdir>/scanbd/scanbutond/backends
        # Example
# scanbuttond_backends_dir = "/usr/local/lib/scanbd/scanbuttond/backends"

        # poll timeout in [ms]
        # (for polling the devices)
        timeout = 500

        pidfile = "/var/run/scanbd.pid"

        # env-vars for the scripts
        environment {
                # pass the device label as below in this env-var
                device = "SCANBD_DEVICE"
                # pass the action label as below in this env-var
                action = "SCANBD_ACTION"
        }

        # function definitions
        # values of the options are simply passed via env-vars

        function function_knob {
                filter = "^message.*"
                desc   = "The value of the function knob / wheel / selector"
                env    = "SCANBD_FUNCTION"
        }
        function function_mode {
                filter = "^mode.*"
                desc   = "Color mode"
                env    = "SCANBD_FUNCTION_MODE"
        }

        multiple_actions = true # allow multiple actions per option (up to
the total amount of options)

        # action definitions
        # if the filter matches and the value changes
        # from from-value to to-value,
        # <script> is executed
        # <script> is the full pathname (do not include any parameters)
        # if parameters are needed, write a script

        # since we can have only at most one action for each option, the
action-script
        # can use the function definition (see above) to distinguish
different tasks
        # (e.g. use the env-var SCANBD_FUNCTION defined above)

#       action scan-color {
#              filter = ".*button-1.*"
#              desc   = "Button-1"
#
#              # script must be an absolute pathname to the action script
without arguments
#              script = "example.script"
#       }
#       action scan-bw {
#              filter = ".*button-2.*"
#              desc   = "Button-2"
#
#             # script must be an absolute pathname to the action script
without arguments
#              script = "example.script"
#       }
        action scan {
                filter = "^scan.*"
                numerical-trigger {
                        from-value = 1
                        to-value   = 0
                }
                desc   = "Scan to file"
                # script must be an relative path starting from scriptdir
(see above),
                # or an absolute pathname.
                # It must contain the path to the action script without
arguments
                # Absolute path example: script = "/some/path/foo.script
                script = "test.script"
        }
        action email {
                filter = "^email$"
                string-trigger {
                        from-value  = ""
                        to-value    = "^email.*"
                }
                desc   = "Scan to email"
                # script must be an relative path starting from scriptdir
(see above),
                # or an absolute pathname.
                # It must contain the path to the action script without
arguments
                # Absolute path example: script = "/some/path/foo.script
                script = "test.script"
        }
#        action copy {
#                filter = "^copy$"
#                string-trigger {
#                        from-value  = ""
#                        to-value    = "^copy.*"
#                }
#                desc   = "Copy to printer"
#                # script must be an relative path starting from scriptdir
(see above),
#                # or an absolute pathname.
#                # It must contain the path to the action script without
arguments
#                # Absolute path example: script = "/some/path/foo.script
#                script = "test.script"
#        }
#        action pdf {
#                filter = "^file$"
#                numerical-trigger {
#                        from-value = 1
#                        to-value   = 0
#                }
#                desc   = "Scan to PDF"
#                script = "test.script"
#        }
#        action preview {
#                filter = "^preview$"
#                numerical-trigger {
#                        from-value = 1
#                        to-value   = 0
#                }
#                desc   = "Preview"
#                # script must be an relative path starting from scriptdir
(see above),
#                # or an absolute pathname.
#                # It must contain the path to the action script without
arguments
#                # Absolute path example: script = "/some/path/foo.script
#                script = "test.script"
#        }
        action globaltest {
                filter = "^button-1.*"
                desc   = "Test (print all env vars)"
                # script must be an relative path starting from scriptdir
(see above),
                # or an absolute pathname.
                # It must contain the path to the action script without
arguments
                # Absolute path example: script = "/some/path/foo.script
                script = "test.script"
        }
}

# include
# include another file at this point. This may only occur outside general
and devices blocks.
# an include statement may be relative to the direcory where scanbd.conf is
located or absolute
# include("scanner.d/myscanner.conf")
# include("/my/long/path/myscanner.conf")

# devices
# each device can have actions and functions, you can disable not relevant
devices
#include(scanner.d/avision.conf)
#include(scanner.d/fujitsu.conf)
#include(scanner.d/hp.conf)
include(scanner.d/pixma.conf)
#include(scanner.d/snapscan.conf)
#include(scanner.d/canon.conf)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/sane-devel/attachments/20161013/7a48106d/attachment-0001.html>


More information about the sane-devel mailing list