采用NUT管理UPS导致libusb1: Could not open any HID devices:

2025-11-28 10:46:28 0点赞 1收藏 1评论

采用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 0463idProduct 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配置ups.conf配置

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
1评论

  • 精彩
  • 最新
  • 设置了pollonly标志后,nut不会中断和ups联系了,但是取得的还是过去的数据,ups的usb还是休眠了,有什么再次激活ups上的usb的指令吗?

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

值友1573315061

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
1
扫一下,分享更方便,购买更轻松