再起動するたびに、接続されたスキャナの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
スクリプトの内容は必要ありません。