Сане перестал обнаруживать USB-сканер

Мой сканер (функция сканера многофункционального принтера 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 ответ

Решение

Я узнал об этом несколько часов спустя. На выходе 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 установлен раньше

Другие вопросы по тегам