Sane 停止检测 USB 扫描仪

Sane 停止检测 USB 扫描仪

sane-find-scanner我的扫描仪(MX860 多功能打印机的扫描仪功能)使用命令或使用被识别scanimage -L。它与 Simple Scan、scanimage实用程序和sane-backend(使用 C++)一起工作。突然它停止工作 - Linux 上的 sane 不再识别该设备。

我正在使用双启动的 Lubuntu 18.04/Windows 10。Windows 10 仍然可以识别该扫描仪。

我在使用sane-backendC++ 时也遇到过这种情况,但我不确定这如何导致错误——我认为代码不会破坏扫描仪的识别。该打印机肯定受 sane 支持,并且已安全连接到电源并通过 USB 电缆连接到我的计算机。

如果您认为这可能是罪魁祸首,以下是 C++ 代码。它从扫描仪读取数据并将数据保存到 PNM 图像文件中。它一直运行良好,直到outFile.open()突然开始返回状态Invalid argument,即scanimage -L停止识别扫描仪。

unsigned char data[50000];
int maxLength = 50000;
int length;

std::ofstream outFile;
outFile.open("./out/test.pnm");

SANE_Handle handle;
SANE_Parameters parm;
SANE_Status openStatus = sane_open("pixma:04A91735_10C369", &handle);
SANE_Status paramStatus = sane_get_parameters(handle, &parm);
SANE_Status startStatus = sane_start(handle);
SANE_Status readStatus;

// write header of PNM file
outFile << "P6\n# SANE data follows\n" << parm.pixels_per_line << " " << parm.lines << "\n" << ((parm.depth <= 8) ? 255 : 65535) << "\n";

do {
  readStatus = sane_read(handle, data, maxLength, &length);
  outFile.write((const char *) data, length);
} while(readStatus == SANE_STATUS_GOOD);
sane_close(handle);
outFile.close();

// debugging
std::cout << sane_strstatus(openStatus) << std::endl;
std::cout << sane_strstatus(paramStatus) << std::endl;
std::cout << sane_strstatus(startStatus) << std::endl;
std::cout << sane_strstatus(readStatus) << " " << length << std::endl;

有什么想法吗?

答案1

几个小时后我发现了这一点。输出中scanimage -L有以下文本:

# No USB scanners found. If you expected something different, make sure that
# you have loaded a kernel driver for your USB host controller and have setup
# the USB system correctly. See man sane-usb for details.
# SANE has been built without libusb support. This may be a reason
# for not detecting USB scanners. Read README for more details.

我安装了libusb( )并在 sane-backends 目录中apt install libusb-1.0-0-dev重新制作了sane-backends() 。./configure && make && sudo make install

这解决了问题。但是,我不知道为什么该脚本在没有libusb安装之前就能运行。

相关内容