Linux での USB プリンターの権限
症状: スキャンするとプリンターは表示されるのに、印刷するとアクセスエラーまたは権限エラーで失敗する。
原因
Linux では、ルールで別途指定しない限り USB デバイスは root のものになるため、自分の権限で動いているアプリからは開けません。カーネル自身のプリンタードライバーが、すでにそのデバイスを確保している場合もあります。
対処方法
-
プリンターのベンダー ID とプロダクト ID を調べます。
lsusbお使いのプリンターの行を探してください。ID は
IDの後ろにある 4 文字の値 2 つで、たとえば04b8:0e28のようになっています。 -
ID を自分のものに置き換えて、ルールファイルを作成します。
sudo tee /etc/udev/rules.d/99-receipt-printer.rules <<'RULE'SUBSYSTEM=="usb", ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0e28", MODE="0666"RULE -
ルールを再読み込みして適用し直します。
sudo udevadm control --reload-rules && sudo udevadm trigger -
プリンターを抜いて差し直し、アプリを再起動します。テストページを印刷してください。
アプリは sudo ではなく、通常のユーザーとして実行してください。root でしか効かないルールでは意味がありません。
それでも解決しない場合
トラブル画面でセットアップレポートをコピーを使い、お使いのプリンターの lsusb の行を添えてメッセージに貼り付けてください。