Armadilloフォーラム

コンテナからUSBデバイスを使う際の権限について

akira-ignore

2025年8月28日 16時10分

==========
製品型番:AG9130-C03Z
Debian/ABOSバージョン:3.22.1-at.2
カーネルバージョン:5.10.240-1-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
Armadillo-IoT A9EのUSBポートからUSBデバイス(SONY RC-S380)を使おうとしています。
VSCodeでプロジェクトを作成した後、下記の内容を追記しています。

requirement.txt:

nfcpy

app.conf:

set_command sleep infinity
add_args --cap-add=SYS_ADMIN

packages.txt

libusb-dev
python3-usb

Generate development swuを行い、ABOS Webからインストールを実施して正常終了しました。
SSH経由でarmadilloにログインした後、suコマンドでroot権限を獲得した後、podman execコマンドでコンテナにログインしました。
この状態で動作確認を行いましたが、下記のようなエラーが発生しました。

# python3 -m nfc
This is the 1.0.4 version of nfcpy run in Python 3.9.2
on Linux-5.10.240-1-at-aarch64-with-glibc2.31
I'm now searching your system for contactless devices
** found usb:054c:06c1 at usb:001:002 but access is denied
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/nfc/__main__.py", line 60, in main
    clf = nfc.ContactlessFrontend(path)
  File "/usr/local/lib/python3.9/dist-packages/nfc/clf/__init__.py", line 75, in __init__
    if path and not self.open(path):
  File "/usr/local/lib/python3.9/dist-packages/nfc/clf/__init__.py", line 149, in open
    self.device = device.connect(path)
  File "/usr/local/lib/python3.9/dist-packages/nfc/clf/device.py", line 85, in connect
    raise IOError(errno.EACCES, os.strerror(errno.EACCES))
PermissionError: [Errno 13] Permission denied
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.9/dist-packages/nfc/__main__.py", line 214, in <module>
    main(parser.parse_args())
  File "/usr/local/lib/python3.9/dist-packages/nfc/__main__.py", line 66, in main
    usb_device_access_denied(bus, dev, vid, pid, path)
  File "/usr/local/lib/python3.9/dist-packages/nfc/__main__.py", line 101, in usb_device_access_denied
    devinfo = os.stat(devnode)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/bus/usb/001/002'

デバイスへのアクセスの際にAccess deniedになっているので、コンテナの権限設定に問題があるものと思います。設定方法についてお教えいただけますでしょうか。

コメント

at_dominique.m…

2025年8月28日 17時35分

マルティネです。

> add_args --cap-add=SYS_ADMIN
[...]
> devinfo = os.stat(devnode)
> FileNotFoundError: [Errno 2] No such file or directory: '/dev/bus/usb/001/002'

CAP_SYS_ADMIN はとても強い権限ですが、デバイスへのアクセスは別で管理されています。
固定のデバイスでしたら add_device* で追加するとアクセスが許可されますが、
USB のような後で接続できるデバイスに関しては hotplug 機能を使ってください。

コンフィグファイルに「add_hotplugs usb_device」を追加すればアクセスできるようになるかと思います。

名前は以下で確認しました。

# デバイスファイルの major 番号の確認と add_hotplugs で利用できる名前の検索
armadillo:~# ls -l /dev/bus/usb/00*/
[省略]
crw-rw-r-- 1 root root 189, 384 Aug 26 17:49 001
armadillo:~# grep 189 /proc/devices
189 usb_device

よろしくお願いします

> コンフィグファイルに「add_hotplugs usb_device」を追加すればアクセスできるようになるかと思います。

ありがとうございます。お教えいただいたとおりの内容で正常に認識されました。