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

Rolf Bensch rolf at bensch-online.de
Thu Oct 13 20:16:34 UTC 2016


Hi Matt,

Have you tested that your scanner resp. the backend sends data @ a push
button event?

Please test on the console:
(1) push any button
(2) $ SANE_DEBUG_PIXMA=11 scanimage -A
(3) check the response; I'm especially interested in following lines:

  Buttons:
    --button-update
        Update button state
[pixma] INTR T=1.343 len=32
[pixma]  00000000:00 20 00 00 00 00 00 00  00 00 00 00 00 00 00 00
[pixma]  00000010:00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
[pixma]
    --button-1 <int> [1] [read-only]
        Button 1
    --button-2 <int> [0] [read-only]
        Button 2
    --original <int> [0] [read-only]
        Type of original to scan
    --target <int> [2] [read-only]
        Target operation type
    --scan-resolution <int> [0] [read-only]
        Scan resolution

Please repeat (1) ... (3) for all scan buttons.

Maybe you need to test your scanner USB connected to the pc. I haven't
tested push buttons wireless yet.

If you don't get lines starting with [pixma], your scanner has no button
support from SANE.

If you get lines starting with [pixma] with more data as shown above (I
have a different scanner) and without data output below at the
parameters --button-1 ... --scan-resolution, what I suppose, then please
send me your "Buttons:" logs and I'll fix the backend code.

Hope this helps.

Cheers,
Rolf

Am 13.10.2016 um 13:23 schrieb Wilhelm:
> Oh, mixed the values ...
>
>          action btest {
>                  filter = "^button.*"
>                  numerical-trigger {
>                          from-value = 0
>                          to-value   = 1
>                  }
>                  desc   = "Scan to file"
>                  script = "test.script"
>          }
>
>
> Am 13.10.2016 um 11:16 schrieb Wilhelm:
>> Matt, you need something like this in your config:
>>
>>         action btest {
>>                 filter = "^button.*"
>>                 numerical-trigger {
>>                         from-value = 1
>>                         to-value   = 0
>>                 }
>>                 desc   = "Scan to file"
>>                 script = "test.script"
>>         }
>>
>> --
>>  Wilhelm
>>
>> Am 13.10.2016 um 09:09 schrieb matt clark:
>>> Thanks Wilhelm.  I had changed that while trying to debug the problem,
>>> not sure why this would be a problem.  Have reverted to the
>>> scanbd.conf from source, with modifications to sane.d directory and
>>> comment out the unnecessary manufacturer scanner.d profiles.  revised
>>> config is attached - apologies for the length of code.
>>>
>>> ---
>>>
>>> /*
>>>  * $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 = 7
>>>
>>>         # 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/sbin/saned"
>>>         saned_opt  = {} # string-list
>>> saned_env  = { "SANE_CONFIG_DIR=/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 {
>>>                 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 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 = "^message.*"
>>>                 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)
>>>
>>>
>>> On Thu, Oct 13, 2016 at 4:10 PM, Wilhelm <wilhelm.meier at fh-kl.de> wrote:
>>>> 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
>>
>





More information about the sane-devel mailing list