%20%2Fdev%2Fbus%2Fusb%20%E9%9D%9E%E3%83%AB%E3%83%BC%E3%83%88%20ioctl%20%E3%81%8C%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F.png)
Ubuntu 10.10 (マーベリック)。
garmin_save_runs プログラム (garmin-forerunner-tools パッケージの一部) を通常のユーザーとして実行すると問題が発生しますが、sudo で実行すると機能します。非 sudo 実行は Ubuntu 10.04 (Lucid) では機能していましたが、パッケージはあまり変更されていないため、アップグレードに伴って一部の権限が変更されたと思われます。
プログラムを sudo として実行することで回避できることが分かりました: $ sudo setcap CAP_DAC_OVERRIDE=ep /usr/bin/garmin_save_runs
今、私は疑問に思っています:
- この問題の原因は Lucid から Maverick への変更点にありますか?
- 私の setcap ソリューションは良いものでしょうか?
- プログラムに問題があるのでしょうか?
strace 抜粋:
open("/dev/bus/usb/001/010", O_RDWR) = -1 EACCES (Permission denied)
open("/dev/bus/usb/001/010", O_RDONLY) = 3
ioctl(3, USBDEVFS_IOCTL or USBDEVFS_IOCTL32, 0x7ffffabef170) = -1 EPERM (Operation not permitted)
close(3) = 0
open("/dev/bus/usb/001/002", O_RDWR) = -1 EACCES (Permission denied)
open("/dev/bus/usb/001/002", O_RDONLY) = 3
ioctl(3, USBDEVFS_IOCTL or USBDEVFS_IOCTL32, 0x7ffffabef170) = -1 EPERM (Operation not permitted)
close(3) = 0
open("/dev/bus/usb/001/001", O_RDWR) = -1 EACCES (Permission denied)
open("/dev/bus/usb/001/001", O_RDONLY) = 3
ioctl(3, USBDEVFS_IOCTL or USBDEVFS_IOCTL32, 0x7ffffabef170) = -1 EPERM (Operation not permitted)
close(3) = 0