Мой сканер (функция сканера многофункционального принтера MX860) распознавался с помощью команды sane-find-scanner или scanimage -L . Он работал с Simple Scan, утилитой scanimage и sane-backend (с C++). Внезапно он перестал работать - устройство больше не распознается в Linux.

Я использую Lubuntu 18.04/Windows 10 с двойной загрузкой. Windows 10 по-прежнему распознает сканер.

Это произошло, когда я использовал sane-backend в C++, но я не уверен, как это могло вызвать ошибку - я не думаю, что код мог нарушить распознавание сканера. Принтер определенно поддерживается в здравом уме, он надежно подключен к источнику питания и подключен через 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 ответ1

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 (apt install libusb-1.0-0-dev) и заново сделал sane-backends (./configure && make && sudo make install в каталоге sane-backends).

Это решило проблему. Тем не менее, я не знаю, почему скрипт работал в первую очередь без установленной libusb .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .