如何为制造商不再支持的打印机编写自己的打印机驱动程序



这个问题几乎说明了一切。我基本上想创建一个与我当前的MacOS(Catalina(兼容的驱动程序。我面临的问题是,我的打印机(带扫描仪(目前只能扫描页面并打印出来。我希望能够使用扫描仪保存扫描文档的图像。

老实说,我不确定编写驱动程序是否是最好的方法,但制造商(佳能(已经没有这个旧扫描仪的驱动程序了。但它和我们拿到它的那天一样有效,所以我真的不想把这个扔掉再买一个新的。

更新:目前遇到以下问题:

rabdelazin@rabdelazim Downloads % device=$(sane-find-scanner | awk '/Canon/{print $NF}')
rabdelazin@rabdelazim Downloads % echo $device                                          
libusb:020:029
rabdelazin@rabdelazim Downloads % scanimage --device Canon:$device -x 210 -y 297 --mode color --resolution 240 --format=tiff --depth 8 > ~/Downloads/scan.tiff       
scanimage: open of device Canon:libusb:020:029 failed: Operation not supported

我在macOS上有一张EPSON Perfection 4990照片,所以我无法为您提供佳能的完整代码和示例,但它可能会让您入门。我一生都在终端中度过,而不是使用GUI做任何事情,所以我只需以全分辨率扫描平台的整个区域,然后在必要时使用ImageMagick或Photoshop做我需要的任何事情。

因此,为了让它继续运行,我从这里安装了自制程序。然后我安装了一些软件包:

brew install libusb
brew install sane-backends

然后我可以找到我的扫描仪:

sane-find-scanner

样本输出

found USB scanner (vendor=0x04b8 [EPSON], product=0x012a [EPSON Scanner]) at libusb:003:002

现在你需要这一行的最后一个单词,libusb:003:002部分,在我的EPSON中,我使用:

sane-find-scanner | awk '/EPSON/{print $NF}'

你需要看到你得到了什么,并稍微适应。

样本输出

libusb:003:002

因此,为了扫描,我在一个名为devicebash变量中捕获它,并执行以下操作:

device=$(sane-find-scanner | awk '/EPSON/{print $NF}')
scanimage --device epson:$device -x 210 -y 297 --mode color --resolution 240 --format=tiff --depth 8 > ~/Desktop/scan.tif

我把所有的东西放在一个名为scanbash脚本中,如下所示:

#/bin/bash
TMP="$HOME/Desktop/scan.tif"
# Find libusb device name
device=$(sane-find-scanner | awk '/EPSON|HP/{print $NF}')
if [ -z $device ]; then
echo ERROR: Unable to find libusb device
exit 1
fi
echo Found scanner at: $device
# Now scan full-size, colour, hi res
scanimage --device epson:$device -x 210 -y 297 --mode color --resolution 240 --format=tiff --depth 8 > "$TMP"
# Check we got a file
if [ ! -s "$TMP" ]; then
echo ERROR: Empty scan
exit 1
fi

我的脚本最后还有一些可选的ImageMagick内容来创建一个Web可用的JPEG,如果您添加了这些内容,则需要执行以下操作:

brew install imagemagick

然后将其添加到上面的脚本中:

# Copy the file to User's Desktop and number nicely...
# ... save as hi-res 16-bit TIF
# ... and medium res, medium quality JPG for web use
cd ~/Desktop
i=0
while :; do
base=$(printf "scan-%03d" $i)
if [ ! -f "${base}.jpg" ]; then
cp "$TMP" "${base}.tif"
convert "$TMP" -resize 2000x2000 -quality 85% "${base}.jpg"
break
fi
((i++))
done

以下是我发现在解决所有问题时有用的一些资源。您可以使用调试scanimage程序

SANE_DEBUG_SNAPSCAN=128 scanimage -L

这个资源很有用。

你可以得到这样的帮助:

scanimage --help -d epson

注意,您也可以使用Raspberry Pi或类似的小型、低成本Linux机器作为"扫描器服务器">。基本上,您可以通过USB将扫描仪连接到树莓派,并在树莓派上运行SANE。一旦你让它工作起来,你就可以在Raspberry Pi上运行saned,这是一个守护程序服务,它在网络上监听其他请求扫描的设备(如Mac(。它使用Linux SANE驱动程序进行扫描,并通过以太网将图像发回Mac(或其他(客户端。我知道你不喜欢这个选项,但未来可能会有读者。。。

关键词:macOS、OSX、扫描、扫描仪、扫描、EPSON、佳能、HP、libusb、SANE、SANE后端

经过大量的尝试和错误,我终于想出了一个解决方案。

TL;DR:我用树莓皮做了一个打印服务器,安装了杯子,并将打印机设置为通过服务器共享。工作起来很有魅力!

它花了相当多的调查,但作为恢复一台旧笔记本电脑的一部分,我通过安装Ubuntu 20.04让它运行起来。为了好玩,我决定试着用笔记本电脑打印一些东西。我不得不安装CUPS,也许还有其他一些软件包,但它确实有效。这让我想到,我应该做一个知道如何与打印机通信的打印服务器,这样所有其他机器都可以来来往往,但我的打印机应该仍然可以工作。

最新更新