Сане перестал обнаруживать 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
установлен раньше