A mój skaner działa i /etc/rc.d/scanner (moje wypociny).
Jakoś zawsze mnie to zniechęcało, żeby zainstalować skaner. Może dlatego że miałem jakieś dziwne how-to, wczoraj zacząłem instalować skaner z urządzenia wielofunkcyjnego Lexmark X73 (drukarka działa bezproblemowo). Na początek:
Jak się zainstalowało, to uruchamiam z roota, jakieś pierwsze wyszukiwania skanera
i wykryło go. Wchodzę na usera, też wykryło. Odpalam ze swojego konta xsane, a tu błąd, nie ma urządzenia, brak dostępu albo coś tam innego (było podane kilka możliwości). Odpalam z roota i jest, działa. No to już wiem, że coś nie tak z prawami dostępu. Poszukałem trochę w googlach i znalazłem archowe how-to w wersji Polskiej. Robie jak trzeba, ale nie działa. I tu zaczeły się klocki. Szukałem, cudowałem i nic. Okazało się, że skaner bierze nie z /dev/??? ale z /proc/bus/usb/???/???. A że udev operuje na /dev/, a za /proc/bus/usb jest odpowiedzialny hotplug. Szkoda, że tyle cudowałem z tym, zanim się tego dowiedziałem z forum.slackware.pl.
Dodawałem grupy, edytowałem reguły udeva, nic - kompletnie. Co prawda jakieś tam pliki z /dev dostawały prawa takie jak ustawiłem w udev, ale to nic nie dawało. Cały czas od kiedy wiedziałem, że to /proc/bus/usb/???/??? miałem alternatywę w stylu:
/etc/rc.localchmod 664 /proc/bus/usb/???/??? && chgrp scanner /proc/bus/usb/???/???
tylko że tą alternatywę sobie zostawiałem na ostateczność, bo chciałem to przez udeva zrobić. W momencie kiedy przeczytałem, że udevem tego nie zrobie to mój plan b stał się planem a. Jako, że trzeba było to załatwić skryptem startowym, to pozwoliłem sobie napisać skrypt do nadawanai praw dla odpowiednich plikół skanera w bashu.
/etc/conf.d/scanner
-
# New group name
-
GROUP=scanner
-
# Default group name
-
GROUPD=root
/etc/rc.d/scanner
-
#!/bin/bash
-
. /etc/rc.conf
-
. /etc/rc.d/functions
-
# config
-
if [ -e /etc/conf.d/scanner ]; then
-
. /etc/conf.d/scanner
-
else
-
echo "Could not load configuration file!"
-
echo "Using default configuration."
-
GROUP="users"
-
GROUPD="root"
-
fi
-
CONN=`sane-find-scanner | grep libusb | wc -l`
-
if [ $CONN -gt 0 ]; then
-
PORT=`sane-find-scanner | grep libusb | cut -d : -f 2`
-
LINE=`sane-find-scanner | grep libusb | cut -d : -f 3`
-
PORTS_CMD=`sane-find-scanner | grep libusb | cut -d : -f 2 | cut -d ' ' -f $CONN`
-
LINES_CMD=`sane-find-scanner | grep libusb | cut -d : -f 3 | cut -d ' ' -f $CONN`
-
fi
-
case "$1" in
-
start)
-
stat_busy "Starting share scanner"
-
if [ $CONN -lt 1 ]; then
-
stat_fail
-
echo "No scanners found!"
-
elif [ $CONN == 1 ]; then
-
chmod g+rw /proc/bus/usb/$PORT/$LINE && chgrp $GROUP /proc/bus/usb/$PORT/$LINE
-
if [ $? -gt 0 ]; then
-
stat_fail
-
else
-
stat_done
-
fi
-
elif [ $CONN -gt 1 ]; then
-
I=0
-
for PORTS in $PORTS_CMD; do
-
array=($PORTS $I)
-
I=$[$I + 1]
-
X=0
-
for LINES in $LINES_CMD; do
-
if [ $X == ${array[1]} ]; then
-
chmod g+rw /proc/bus/usb/${array[0]}/$LINES && chgrp $GROUP /proc/bus/usb/${array[0]}/$LINES
-
if [ $? -gt 0 ]; then
-
stat_fail
-
else
-
stat_done
-
fi
-
fi
-
X=$[$X + 1]
-
done
-
done
-
fi
-
;;
-
stop)
-
stat_busy "Stopping share scanner"
-
if [ $CONN -lt 1 ]; then
-
stat_fail
-
echo "No scanners found!"
-
elif [ $CONN == 1 ]; then
-
chgrp $GROUPD /proc/bus/usb/$PORT/$LINE
-
if [ $? -gt 0 ]; then
-
stat_fail
-
else
-
stat_done
-
fi
-
elif [ $CONN -gt 1 ]; then
-
I=0
-
for PORTS in $PORTS_CMD; do
-
array=($PORTS $I)
-
I=$[$I + 1]
-
X=0
-
for LINES in $LINES_CMD; do
-
if [ $X == ${array[1]} ]; then
-
chgrp $GROUPD /proc/bus/usb/${array[0]}/$LINES
-
-
if [ $? -gt 0 ]; then
-
stat_fail
-
else
-
stat_done
-
fi
-
fi
-
X=$[$X + 1]
-
done
-
done
-
fi
-
;;
-
*)
-
echo "usage: $0 {start|stop}"
-
esac
-
exit 0
Skrypt sam wyszukuje skanery, nadaje prawa rw (zapis+odczyt) dla grupy GROUP (z pliku /etc/conf.d/scanner). Działa u mnie wyśmienicie, sprawdzałem na kilku skanerach też działa. Także myślę, że powinno być ok.
Po co napisałem ten skrypt? Czasami jest tak, że komputer chodzi sobie, a skaner się odpina od USB i wtedy zmienia się port (zależy) i linia (ja to tak nazwałem, co to dokłanie jest to nie wiem). Defaultowo jest powiedzmy /proc/bus/usb/004/003 (dla mojego skanera), ale kiedy odepne go od USB, podepne za chwilę ponownie to już mam /proc/bus/usb/004/011 (przykład) - właśnie dlatego powstał ten skrypt. W celu zautomatyzowania tego procesu, żeby się nie martwić. W każdej chwili można zdjąć prawa wywołując /etc/rc.d/scanner stop.


Ostatnie odpowiedzi
10 tygodni 6 dni temu
37 tygodni 6 dni temu
47 tygodni 1 dzień temu
1 rok 1 tydzień temu
1 rok 7 tygodni temu
1 rok 7 tygodni temu
1 rok 13 tygodni temu
1 rok 13 tygodni temu
1 rok 28 tygodni temu
1 rok 28 tygodni temu