재부팅할 때마다 연결된 스캐너의 USB 포트 할당이 올바르지 않습니다. 내 목표는 재부팅 시 실행되는 스크립트를 생성하여 상호 작용을 제거하는 것입니다.
포트 할당을 수동으로 수정하는 방법은 다음과 같습니다.
1) lsusb -d 04f9:0272 #the output identifies the correct ports of the scanner
2) sudo chmod a+w /dev/bus/usb/001/002 #scanner now works
다음 스크립트는 변수를 생성하지만 "해당 파일 또는 디렉터리가 없습니다"라는 메시지와 함께 chmod가 실패합니다.
buss=$(lsusb -d 04f9:0272 |awk '{print $2}')
devis=$(lsusb -d 04f9:0272 |awk '{print $4}')
sudo chmod a+w /dev/bus/usb/$buss/$devis
$buss 또는 $devis를 echo하면 올바른 값이 표시됩니다. 이 프로세스를 자동화하려면 더 많은 작업이 필요하다는 것을 알고 있습니다.
답변1
문제는 lsusb
출력의 특정 형식일 수 있습니다.
% usbid=1d6b:0001
% lsusb -d $usbid | awk '{ print "/dev/bus/usb/" $2 "/" $4 }'
/dev/bus/usb/001/001:
끝에 추가 콜론을 기록해 두십시오. 다행히 awk나 쉘에서 쉽게 제거할 수 있습니다. 다음은 awk 예입니다.
% usbid=1d6b:0001
% lsusb -d $usbid | awk '{ a = $4; sub(/:$/, "", a); print "/dev/bus/usb/" $2 "/" a }'
/dev/bus/usb/001/001
답변2
lsusb
출력에서 장치 번호 뒤에 콜론이 포함된다는 점을 제외하면 제대로 작동하는 것 같습니다 .
$ lsusb -d 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
따라서 devis
변수에는 해당 내용이 포함되며 최종 결과는 /dev/bus/usb/001/001:
콜론을 사용하여 해당 내용에 액세스하려고 하는 것입니다.
접미사 제거 확장을 사용하여 다음과 같이 후행 콜론을 제거할 수 있습니다.
devis=${devis%:}
셸 awk
에서( 없이) 이 작업을 수행하는 또 다른 방법 read
은 lsusb
.lsusb
프로세스 대체가 있는 쉘에서:
read x buss x devis x < <(lsusb -d 04f9:0272)
devis=${devis%:}
chmod +w "/dev/bus/usb/$buss/$devis"
또는 파이프를 사용하십시오.
lsusb -d 04f9:0272 | {
read x buss x devis x
devis=${devis%:}
chmod +w "/dev/bus/usb/$buss/$devis"
}
답변3
ls -l
주석에서 장치의 출력을 제공합니다.
crw-rw-r-- 1 root lp 189, 1 Jul 24 18:48 /dev/bus/usb/001/002
사용자와 그룹에 이미 읽기/쓰기 액세스 권한이 있음을 알 수 있습니다. 따라서 그룹에 사용자를 추가하는 경우 lp
스크립트 콘텐츠가 필요하지 않습니다.