Sane a arrêté de détecter le scanner USB

0

Mon scanner (fonction scanner de l’imprimante multifonction MX860) était reconnu à l’aide du sane-find-scanner commande ou en utilisant scanimage -L. Il travaillait avec Simple Scan, le scanimage utilité, et sane-backend (avec C ++). Soudainement, il a cessé de fonctionner - le périphérique n'est plus reconnu par sane sous Linux.

J'utilise un double démarrage Lubuntu 18.04 / Windows 10. Windows 10 reconnaît toujours le scanner.

C'est arrivé quand j'utilisais sane-backend en C ++, mais je ne sais pas comment cela aurait pu causer l'erreur - je ne pense pas que le code aurait pu nuire à la reconnaissance du scanner. L’imprimante est définitivement prise en charge par sane, et elle est correctement connectée à l’alimentation et connectée via un câble USB à mon ordinateur.

Si vous pensez que c'est peut-être le coupable, voici le code C ++. Il lit à partir du scanner et enregistre les données dans un fichier image PNM. Cela fonctionnait bien jusqu'au outFile.open() a soudainement commencé à retourner le statut de Invalid argument, qui est quand scanimage -L cessé de reconnaître le scanner.

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;

Des pensées?

Jonathan Lam
la source
La première étape consiste à vérifier si des mises à jour ou de nouvelles configurations l’ont interrompue. du tout en utilisant lsusb (pourrait vouloir courir lsusb | grep MX860 pour gagner du temps) et s’il le reconnaît, essayez alors une clé USB Linux en direct pour voir si Sane fonctionne là-bas. Si c'est le cas, vous avez probablement rompu avec une nouvelle configuration, si elle apparaît dans lsusb, alors vous savez que Linux le voit, mais pas Sane.
QuickishFM
lsusb donne Bus 001 Device 007: ID 04a9:1735 Canon, Inc., il est donc reconnu par Linux et la fonction d’impression fonctionne toujours lorsqu’elle est connectée par USB. Est-ce que cela vous indique quelque chose?
Jonathan Lam
Bonne idée avec la clé USB en direct - je vais essayer.
Jonathan Lam
C'est un bon signe - le périphérique USB s'interface correctement avec Linux et confirmé avec le fonctionnement de l'imprimante. Il semble à partir d'ici que la discordance soit entre saine et le scanner. Si vous n'avez rien sauvegardé dans les bibliothèques / config sane, essayez peut-être de réinstaller Sane et voyez s'il corrige le problème tel qu'il était. Un liveUSB teste également si sane fonctionne comme il devrait avoir une configuration "vanille".
QuickishFM
@QuickishFM Je n'ai pas de liveUSB sous la main mais j'ai essayé de purger les bibliothèques sane et de les réinstaller ( scanimage vient avec le système d'exploitation, donc je ne l'ai pas supprimé). Toujours pas de chance. Peut brûler un liveUSB bientôt pour essayer
Jonathan Lam

Réponses:

1

Je l'ai découvert quelques heures plus tard. En sortie de scanimage -L il y avait le texte suivant:

# 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.

j'ai installé libusb ( apt install libusb-1.0-0-dev ) et refait sane-backends ( ./configure && make && sudo make install dans le répertoire sane-backends).

Cela a résolu le problème. Cependant, je ne sais pas pourquoi le script a fonctionné en premier lieu sans libusb installé avant.

Jonathan Lam
la source