$ kcmshell kamera libusb couldn't open USB device /dev/bus/usb/001/001: Permission denied. libusb requires write access to USB device nodes. KCrash: Application 'kcmshell' crashing... [KCrash handler] #5 0xb7bb9369 in usb_get_descriptor () from /usr/lib/libusb-0.1.so.4 #6 0xb7c3069f in ?? () from /usr/lib/libgphoto2_port/0.8.0/usb.so #7 0x00000000 in ?? ()
Можно показать права на /dev/bus/usb/001/001 и окружающие каталоги? И еще вывод команды id для пользователя, под которым идет работа. Похоже, у пользователя нет прав доступа к этому устройству, надо соответствующий блок настройки прав для udev добавить.
Ну, до обновления libusb этого не было. А kamera в любом случае пользует только libgphoto2
(In reply to comment #1) > Можно показать права на /dev/bus/usb/001/001 и окружающие каталоги? $ l -R /dev/bus/usb/ /dev/bus/usb/: итого 0 drwxr-xr-x 2 root root 80 Сен 19 20:50 002/ drwxr-xr-x 2 root root 60 Сен 19 20:50 001/ drwxr-xr-x 4 root root 80 Сен 11 20:59 ./ drwxr-xr-x 3 root root 60 Сен 11 20:59 ../ /dev/bus/usb/002: итого 0 drwxr-xr-x 2 root root 80 Сен 19 20:50 ./ drwxr-xr-x 4 root root 80 Сен 11 20:59 ../ crw-r--r-- 1 root root 189, 128 Сен 11 20:59 001 crw-r--r-- 1 root root 189, 129 Сен 11 16:59 002 /dev/bus/usb/001: итого 0 drwxr-xr-x 2 root root 60 Сен 19 20:50 ./ drwxr-xr-x 4 root root 80 Сен 11 20:59 ../ crw-r--r-- 1 root root 189, 0 Сен 11 20:59 001 > И еще вывод команды id для пользователя, под которым идет работа. $ id uid=500(zerg) gid=500(zerg) группы=10(wheel),19(proc),22(cdrom),36(scanner),67(camera),71(floppy),74(hashman),80(cdwriter),81(audio),83(radio),104(xgrp),500(zerg),526(zerg_h1a),527(zerg_h1b),544(vboxusers) У меня падает
Дело в том, что это поведение libusb 0.1 некорректно по отношению к тому, что можно сделать с устройствами USB на шине. Поведение исправлено в 0.9.3 и libusb-compat, а приложения будем исправлять. Код плагина usb в libgphoto некорректен -- он не должен падать от недоступности прав для сканирования шины. Другие приложения, использующие новую libusb-compat 0.1, не падают. Плагин надо исправлять и я это сделаю.
Итак, нашел: libgphoto2-2.4.2/libgphoto2_port/usb/libusb.c: 782 devh = usb_open (dev); 783 /* get string descriptor at 0xEE */ 784 ret = usb_get_descriptor (devh, 0x03, 0xee, buf, sizeof(buf)); usb_open() может вернуть NULL, если не удалось открыть устройство. Дальше usb_get_descriptor ожидает, что devh будет непустым, вот эту ситуацию нужно обрабатывать. Простейшее исправление будет if (!devh) return 0;
Created attachment 2942 [details] Patch to fix NULL-pointer dereference Приблизительное исправление (not tested).
Спасибо. Я пересобрал libgphoto2 с патчем, падения прекратились. Однако все равно ругается, что ей нужен доступ на запись. В ближайшем будущем наверное надо повесить багу в апстрим.
(In reply to comment #7) > Спасибо. > Я пересобрал libgphoto2 с патчем, падения прекратились. > Однако все равно ругается, что ей нужен доступ на запись. > В ближайшем будущем наверное надо повесить багу в апстрим. > Он будет ругаться, это нормально, это предупреждение. В апстрим нужно только этот патч отправить. Чтобы совсем избавиться совсем от предупреждения, нужно полностью переписать код libgphoto2_port/usb/libusb.c на использование нового libusb-1. Я бы поставил эту задачу в более низкий приоритет, который станет важен где-то к концу года, когда выйдет libusb-1 1.0.
Пофиксил же, а отметиться забыл. Fixed.