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

Wilhelm wilhelm.meier at fh-kl.de
Thu Oct 13 05:10:36 UTC 2016


Looking at your log file it seems that action "globaltest" isn't
installed. There may be 2 reasons for this:

1) the regex doenst't match

2) there is no trigger definition for the action

HtH


Am 12.10.2016 um 23:48 schrieb matt clark:
> 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
> <mailto: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)
> 
> 


-- 
Wilhelm




More information about the sane-devel mailing list