Только корень может получить доступ к USB, даже если пользователь принадлежит правильным группам

Моя СОВА cm160 измеритель мощности шла с исходным приложением Windows. Я нашел приложение C для Linux, но он использует sqlite. Это хорошо для образцов нескольких дней, но я собираюсь иметь опрос каждую секунду или два навсегда, таким образом, я переписываю его для использования сервера Пост-ГРЭС (это - FOSS). Это измерит потребление нагревающегося/охлаждающего насоса: 60*60*24*365 = 31 536 000, ~ 31 миллион образцов в течение года.

Единица имеет USB-порт, но даже приложение, я нашел работы, только если пользователь является корнем (или suded).

Это странно, поскольку мой пользователь принадлежит правозащитной группе:

mune@lello:~$ groups mune
mune : mune adm dialout cdrom sudo dip plugdev lpadmin scanner saned sambashare
mune@lello:~$ ll /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 mar  2 16:58 /dev/ttyUSB0

Чтобы отладить и разработать, я использую netbean, и я должен запустить его как корень, потому что программа не получила бы доступ к единице через USB.

Это беспокоит меня: каково это могло быть?

Ubuntu 18.04.4 LTS

Спасибо

1
задан 4 March 2020 в 00:22

2 ответа

Вывод strace является слишком длинным для мини-комментария.

mune@lello:~/work/Domotica/eagle-owl.FM/testpg$ strace cm160
execve("/usr/local/bin/cm160", ["cm160"], 0x7ffe535ecfa0 /* 65 vars */) = 0
brk(NULL)                               = 0x55c7900bb000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=174200, ...}) = 0
mmap(NULL, 174200, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f1a1d4a1000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libusb-0.1.so.4", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\27\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=30944, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a1d49f000
mmap(NULL, 2131264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1a1d09c000
mprotect(0x7f1a1d0a3000, 2093056, PROT_NONE) = 0
mmap(0x7f1a1d2a2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f1a1d2a2000
mmap(0x7f1a1d2a4000, 1344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1a1d2a4000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0
mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1a1ce7d000
mprotect(0x7f1a1ce97000, 2093056, PROT_NONE) = 0
mmap(0x7f1a1d096000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f1a1d096000
mmap(0x7f1a1d098000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1a1d098000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14560, ...}) = 0
mmap(NULL, 2109712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1a1cc79000
mprotect(0x7f1a1cc7c000, 2093056, PROT_NONE) = 0
mmap(0x7f1a1ce7b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f1a1ce7b000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1a1c888000
mprotect(0x7f1a1ca6f000, 2097152, PROT_NONE) = 0
mmap(0x7f1a1cc6f000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f1a1cc6f000
mmap(0x7f1a1cc75000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1a1cc75000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a1d49d000
arch_prctl(ARCH_SET_FS, 0x7f1a1d49db80) = 0
mprotect(0x7f1a1cc6f000, 16384, PROT_READ) = 0
mprotect(0x7f1a1ce7b000, 4096, PROT_READ) = 0
mprotect(0x7f1a1d096000, 4096, PROT_READ) = 0
mprotect(0x7f1a1d2a2000, 4096, PROT_READ) = 0
mprotect(0x55c78f594000, 8192, PROT_READ) = 0
mprotect(0x7f1a1d4cc000, 4096, PROT_READ) = 0
munmap(0x7f1a1d4a1000, 174200)          = 0
set_tid_address(0x7f1a1d49de50)         = 888
set_robust_list(0x7f1a1d49de60, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7f1a1ce82cb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f1a1ce8f890}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f1a1ce82d50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f1a1ce8f890}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
brk(NULL)                               = 0x55c7900bb000
brk(0x55c7900dc000)                     = 0x55c7900dc000
getcwd("/home/mune/work/Domotica/eagle-owl.FM/testpg", 512) = 45
stat("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db", {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
openat(AT_FDCWD, "/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db", O_RDWR|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
lseek(3, 0, SEEK_SET)                   = 0
read(3, "SQLite format 3\0\4\0\1\1\0@  \0\0\0\5\0\0\0\v"..., 100) = 100
fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
access("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db-journal", F_OK) = -1 ENOENT (No such file or directory)
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
access("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db-wal", F_OK) = -1 ENOENT (No such file or directory)
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
lseek(3, 0, SEEK_SET)                   = 0
read(3, "SQLite format 3\0\4\0\1\1\0@  \0\0\0\5\0\0\0\v"..., 1024) = 1024
lseek(3, 9216, SEEK_SET)                = 9216
read(3, "\r\0\0\0\5\1c\0\1c\2\216\2\313\0039\3r\1\262\0\345\0\345\0\0\0\0\0\0\0\0"..., 1024) = 1024
lseek(3, 10240, SEEK_SET)               = 10240
read(3, "\r\0\0\0\4\1]\0\2$\2_\3\301\1]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024
fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl(3, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
access("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db-journal", F_OK) = -1 ENOENT (No such file or directory)
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
lseek(3, 24, SEEK_SET)                  = 24
read(3, "\0\0\0\5\0\0\0\v\0\0\0\0\0\0\0\0", 16) = 16
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
access("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl.db-wal", F_OK) = -1 ENOENT (No such file or directory)
fstat(3, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
fcntl(3, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
getcwd("/home/mune/work/Domotica/eagle-owl.FM/testpg", 512) = 45
stat("/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl_stat.db", {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
openat(AT_FDCWD, "/home/mune/work/Domotica/eagle-owl.FM/testpg/eagleowl_stat.db", O_RDWR|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=11264, ...}) = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "SQLite format 3\0\4\0\1\1\0@  \0\0\0\4\0\0\0\v"..., 100) = 100
brk(0x55c790104000)                     = 0x55c790104000
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "Wait for cm160 device to be conn"..., 38Wait for cm160 device to be connected
) = 38
openat(AT_FDCWD, "/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 5
fstat(5, {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
getdents(5, /* 6 entries */, 32768)     = 144
close(5)                                = 0

0
ответ дан 17 March 2020 в 00:10

РЕШЕННЫЙ

Существуют многие библиотеки USB, не всего один.

Не только для языка (PHP, Лава, C, C++...), но даже для того же языка программирования.

Я просто пользуюсь другой библиотекой, которые предлагают пользовательский доступ к устройствам USBs. (Я также evalueting для перемещения с нуля в Java, поскольку я должен был бы переписать ответ материала DB USB один в C.)

0
ответ дан 17 March 2020 в 00:10

Другие вопросы по тегам:

Похожие вопросы: