采用NUT管理UPS导致libusb1: Could not open any HID devices:
采用NUT管理UPS导致libusb1: Could not open any HID devices: insufficient permissions on everything No matching HID UPS found 无权限问题的解决。
nut服务,Network UPS Tools, 是管理ups设备,并和ups通讯并建立网络服务的一个工具,Nut兼容很多的流行的 ups系统。大多数NAS系统上的ups监控也是基于安装NUT服务实现的。在采用树莓派2b(6.12lite os)作为ups监控管理时,发现这个问题。
安装NUT服务后,通过sudo nut-scanner -U查找ups的usb连接位置,可以反馈如下信息:
[nutdev1]
driver = "usbhid-ups"
port = "auto"
vendorid = "0463"
productid = "FFFF"
product = "Ellipse ECO"
serial = "000000000"
vendor = "EATON"
bus = "002"
device = "003"
busport = "006"
说明树莓派已经通过usb发现了连接的ups,ups设备为伊顿的Ellipse ECO 650。
然后编辑/etc/nut/ups.conf文件
注释此行:
maxretry = 3 # Generally this is just the number of retries.
# So the name of my UPS is 'eaton650' now
[eaton650]
driver = usbhid-ups # From nut-scanner
port = auto
desc = "eaton 650" # Just a string for yourself, should be human readable
编辑/etc/nut/nut.conf文件
MODE=netserver
准备开启nut服务。到目前为止一切都正常,也和教程一致。然后就需要开启nut的驱动服务了。输入指令:
sudo upsdrvctl start
结果显示:
upsyy@ups-server:~$ sudo upsdrvctl start
Network UPS Tools - UPS driver controller 2.8.1
Network UPS Tools - Generic HID driver 0.52 (2.8.1)
USB communication driver (libusb 1.0) 0.46
libusb1: Could not open any HID devices: insufficient permissions on everything
No matching HID UPS found
这里报告不能打开HID设备,没有权限。
需要进行一下修改:
首先用:ls -l /dev/bus/usb/002查看usb接口的权限,我的显示:
total 0
crw-rw-r-- 1 root root 189, 128 Nov 23 22:46 001
crw-rw-r-- 1 root root 189, 129 Nov 23 22:46 002
crw-rw-r-- 1 root root 189, 130 Nov 23 23:41 003
注意002是我机器的usb插槽,要与nut-scanner扫描出的bus=002一致。
其中003设备(就是连接ups的usb端口)组权限属于root。
用一下方法更改:
sudo vim /etc/udev/rules.d/62-nut-usbups.rules
在相关文件夹下建立一个规则文件,如果没有就新建一个。
插入内容:
ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="664", GROUP="nut"
注意idVendor 0463和idProduct ffff需要按照你的ups相关信息填写,nut-scanner会扫描出来。
然用:
sudo udevadm control --reload-rules
sudo udevadm trigger
这两个指令让规则生效。再ls -l /dev/bus/usb/002查看,以变为:
total 0
crw-rw-r-- 1 root root 189, 128 Nov 23 23:42 001
crw-rw-r-- 1 root root 189, 129 Nov 23 23:42 002
crw-rw-r-- 1 root nut 189, 130 Nov 23 23:42 003
设备003已有nut组了。
然后重新编辑/etc/nut/ups.conf文件,插入:
[eaton650]
driver = usbhid-ups # From nut-scanner
port = auto
desc = "eaton 650" # Just a string for yourself, should be human readable
product = "Ellipse ECO"
vendor = "EATON"
bus = "002" #指定正确的总线序号
device = "003" #并指定设备号
再次,启动nut驱动服务:
sudo upsdrvctl start
就一切正常了。
这里 device = "003" #并指定设备号带来一个问题就是Linux系统的usb设备号是会变的,当你开机时拔下usb线再插上,系统就会分配一个新的设备号,或者你换了原来的usb端口也会改变。如果ups.conf文件,不做更改还会发生libusb1没有权限的问题。
最后伊顿的UPS会有usb休眠的问题,如果长时间没有ups事件,如:断电,电池充电,电池放电等消息的话,usb端口会休眠,导致我的树莓派丢失usb设备,人为制造一个ups事件让usb唤醒后,树莓派会自动分配一个新的usb device号,又会引起libusb1的权限问题。需要在/etc/nut/ups.conf文件中添加pollonly标志,这样就能让ups保持被激活,usb端口不再休眠。
这是我的/etc/nut/ups.conf文件的配置截图:
ups.conf配置作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

值友1573315061
校验提示文案
值友1573315061
校验提示文案