LINUX.ORG.RU

Права доступа к сканеру


0

1

Доброго времени суток!

Застопорился на такой банальной проблеме, как работа сканера от пользователя. От рута работает.

# sane-find-scanner -q
found USB scanner (vendor=0x0bda [Generic], product=0x0139 [USB2.0-CRW]) at libusb:003:003
found USB scanner (vendor=0x04a9 [Canon], product=0x2220 [CanoScan]) at libusb:004:014
# scanimage -L
device `plustek:libusb:004:014' is a Canon CanoScan LiDE25 flatbed scanner
# ll /dev/bus/usb/004/014
crw-rw-r-- 1 root lp 189, 397 апр  7 11:46 /dev/bus/usb/004/014
root@sl64:/etc/udev/rules.d#    
$ id
uid=1000(sergey) gid=100(users) группы=100(users),7(lp),10(wheel),11(floppy),17(audio),18(video),19(cdrom),50(ftp),83(plugdev),84(power),86(netdev)
$ scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

В добавок, правило UDEV

$ cat /etc/udev/rules.d/35-sane.rules 
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idProduct}=="2220", MODE="664", GROUP="users"
не срабатывает.

Помогите понять, где я не прав.

★★★★★

а пользователя отнести в группу пользователей сканера тоже надо?

anonymous
()

Перелогиниваться пробовал? Запусти scanimage через strace, посмотри, где спотыкается.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Перелогиниваться пробовал. Через strace запустил, вывод не осилил. Не подскажешь, чего искать в этой куче текста?

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

чего искать в этой куче текста?

EPERM и ENOENT. Первое — это права доступа, второе — отсутствующие файлы, например, когда приложение ожидает файл там, где его нет. Искать с конца.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Совершенно непонятно:

$ strace scanimage -L &> scan.log
$ grep EPERM scan.log
ioperm(0x3bc, 0x3, 0x1) = -1 EPERM (Operation not permitted)
ioperm(0x378, 0x3, 0x1) = -1 EPERM (Operation not permitted)

grep ENOENT scan.log

выдаёт очень большой список. Но, ё-моё! от рута-то работает! Значит все необходимые файлы на месте. От рута поиск EPERM не выдаёт ничего, а поиск ENOENT тоже выдаёт длинный список чего-то.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

Попробуй выполнить

# setcap cap_sys_rawio+ep /usr/bin/scanimage
Это даст бинарнику право работать с портами напрямую.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Не помогло :(

Мне непонятно, почему udev не срабатывает. И почему права на устройство /dev/bus/блаблабла ничего не дают.
Раньше ещё появлялись файлы /proc/bus/usb/блаблабла, но сейчас даже каталога /proc/bus/usb нет.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

Раньше ещё появлялись файлы /proc/bus/usb/блаблабла, но сейчас даже каталога /proc/bus/usb нет.

Это потому что они в /dev/bus/usb переехали. Попробуй подмонтировать на старое место:

# mount -t usbfs none /proc/bus/usb
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat
# mkdir /proc/bus/usb
mkdir: невозможно создать каталог «/proc/bus/usb»: Нет такого файла или каталога
# mount -t usbfs none /proc/bus/usb[br]mount: точка монтирования /proc/bus/usb не существует
# mount -t usbfs none /proc/bus/   
mount: неизвестный тип файловой системы 'usbfs'

И всё же. Где-то же должно быть устройство, файл, на который нужно установить права доступа... Как найти файл, к которому обращается прорамма? Как найти, с каким устройством работает прога от рута?

fractaler ★★★★★
() автор топика
Последнее исправление: fractaler (всего исправлений: 1)
Ответ на: комментарий от fractaler

Как найти файл, к которому обращается прорамма?

Я ж говорил уже, strace. Возможно понадобится использовать strace -f, это включает следование за форками. Вот так:

strace -f -o log-of-strace -e open your-command

можно вывести лог в файл log-of-strace, предварительно оставив только вызовы open.

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous
$ sudo dmesg | tail
[   53.907797] brcmsmac bcma0:0: brcms_ops_bss_info_changed: qos enabled: true (implement)
[   53.907814] wlan0: associated
[   53.907839] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   53.916149] brcmsmac bcma0:0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 1 (implement)
[ 8965.515058] usb 4-1.1: USB disconnect, device number 3
[ 8971.859505] usb 4-1.1: new full-speed USB device number 5 using ehci-pci
[ 8971.945800] usb 4-1.1: New USB device found, idVendor=04a9, idProduct=2220
[ 8971.945811] usb 4-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8971.945817] usb 4-1.1: Product: CanoScan
[ 8971.945822] usb 4-1.1: Manufacturer: Canon
sergey@sl64:~$ sudo scanimage -L
device `plustek:libusb:004:005' is a Canon CanoScan LiDE25 flatbed scanner
$ grep 2220 /etc/udev/rules.d/35-sane.rules 
ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="04a9", SYSFS{idProduct}=="2220", MODE="664", GROUP="users"
$ grep 2220 /lib/udev/rules.d/35-sane.rules
grep: /lib/udev/rules.d/35-sane.rules: Нет такого файла или каталога
$ grep 2220 /lib/udev/rules.d/80-libsane.rules 
ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="2220", MODE="0660", GROUP="users", ENV{libsane_matched}="yes"
$
$ ll /dev/bus/usb/004/005
crw-rw-r-- 1 root lp 189, 388 апр 11 11:42 /dev/bus/usb/004/005

Почему??? Почему группа lp? Причём, пользователь входит в группу lp! И всё равно не получает доступ к сканеру. Может, где-то лежит фирмварь, к которому нужен доступ?

fractaler ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

strace -f -o log-of-strace -e open your-command

Спасибо! Магаполезная команда.

$ grep -i denied log-of-strace | grep 005
2911  open("/var/lock/sane/LCK..libusb:004:005", O_WRONLY|O_CREAT|O_EXCL, 0644) = -1 EACCES (Permission denied)

Вот так оказалось, что программа просто не может создать lock-файл. Для записи в каталог нужно было быть в группе scanner :) Так что я сам себе грабли создал. Ещё раз большое спасибо!

Однако, остаётся непонятно, почему не срабатывают правила UDEV. Если есть идеи — буду рад узнать.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

Однако, остаётся непонятно, почему не срабатывают правила UDEV. Если есть идеи — буду рад узнать.

Пересоздай initrd. Часть правил udev попадает в initrd и читается оттуда.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.