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?
lsusb
(pourrait vouloir courirlsusb | 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.lsusb
donneBus 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?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 essayerRéponses:
Je l'ai découvert quelques heures plus tard. En sortie de
scanimage -L
il y avait le texte suivant:j'ai installé
libusb
(apt install libusb-1.0-0-dev
) et refaitsane-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.la source