使用Eaton 3S UPS启动网络UPS工具时出现问题


10

在Eaton 3S 700VA UPS上运行Ubuntu服务器。Eaton的USB连接进入我的Ubuntu服务器。我正在尝试使用NUT来管理UPS。

经过sudo su“ING

cat /etc/nut/ups.conf

[eaton]
    driver = usbhid-ups
    port = auto
    desc = "Eaton 3S"

upsdrvctl -t start

Network UPS Tools - UPS driver controller 2.6.1
*** Testing mode: not calling exec/kill
   0.000000 
   0.000805 Starting UPS: eaton
   0.000955 exec:  /lib/nut/usbhid-ups -a eaton

upsdrvctl start

Network UPS Tools - UPS driver controller 2.6.1
Network UPS Tools - Generic HID driver 0.35 (2.6.1)
USB communication driver 0.31
Can't claim USB device [0463:ffff]: could not detach kernel driver from interface 0: Operation not permitted
Driver failed to start (exit status=1)

Answers:


10

虽然我在这里不声称自己是专家,但我担心此答案不会导致重新启动后永久更改权限,和/或UPS的usb电缆移至其他端口。

遵循以下信息:Nannerpuss的沉思:NUT-网络UPS工具-在Ubuntu上

“ ...问题涉及Ubuntu将该设备挂载为root拥有的事实,但是nut守护程序掉落到没有必要访问权限的非特权帐户中。简单的解决方法是使用udev调整设备权限。

连接设备并(以超级用户身份)运行lsusb并找到它。请注意总线和设备ID以及Vendor:Product ID对...。”

使用上面的答案输出:

$ lsusb
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply   

再次从链接“ ...您可以创建一个udev规则来控制启动时的挂载行为:...”(已编辑,以更好地匹配此方案)

  • 使用您喜欢的文本编辑器制作(很可能是)新的udev rules.d文件。该数字必须大于任何其他udev.d规则文件才能执行相同的操作:

例如

sudo nano /etc/udev/rules.d/90-nut-ups.rules

# /etc/udev/rules.d/90-nut-ups.rules
ACTION=="add", \
SUBSYSTEM=="usb", \
ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", \
MODE="0660", GROUP="nut"

该规则监视与UPS匹配的供应商和产品的USB设备添加。然后,将模式设置为0660,将组设置为nut,而不是默认根。

请注意,此答案使用660许可而不是666,因为这应该足够并且更安全。

重新加载udev(重新引导,或者从计算机端口的UPS拔出或重新插入USB电缆),然后断开并重新连接设备,并测试新权限是否正确。我对此部分不清楚。无论如何,一旦螺母用户组在设备上进行了读写,它就应该能够成功启动。

即使将USB电缆移至其他端口,udev rules.d编辑也可以在我的12.04.2系统上正常工作,从而导致lsusb输出上的总线设备号不同。Udev无需干预即可处理所有操作。实际上,当我移动它时,我可能不必重启,但记不清了,因此会将测试留给其他人进行。


我发现在Ubuntu 12.04上使用APC Back-UPS CS 650可以很好地解决这一问题。
Paul Gear

难道不应该将此报告为ubuntu中的错误?并固定在官方螺母包装中?
Jarl 2014年

这可行,但是向下滚动并阅读较新的“此错误已修复”消息(特别/lib/udev/rules.d/62-nut-usbups.rules是:现已安装),这意味着该解决方案在技术上已过时。
dannysauer

9
  • 您可以lsusb用来找出总线和设备号

  • 然后更改对设备的权限

    chmod 0666 /dev/bus/usb/[bus number]/[device number]
    

例如

$ lsusb
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
$ chmod 0666 /dev/bus/usb/002/004

3

关于此错误:

 failed to claim USB device: could not claim interface 0: Operation not permitted

http://www.networkupstools.org/docs/FAQ.html上的NUT常见问题解答(重点为我):

如果是新安装的NUT,并且在安装螺母时设备USB线已经插入[然后], 只需拔下USB线并重新插入,然后重新启动螺母即可。

那把戏对我有用。


我必须重新启动udev(sudo systemctl restart udev),然后拔出/ 重新插入UPS FWIW。
dannysauer

1

如ndemou所说,NUT FAQ知道了这个问题,并发布了一个补丁来纠正该错误。但是旧的稳定发行版可能会受到影响。希望解决方案非常简单...

在NUT常见问题解答中:“支持我的USB UPS,但不起作用!” :

在Linux上,提供了udev规则来设置设备文件的正确权限。这允许NUT驱动程序通过此设备文件与UPS通信。

但是,驱动程序仍然可能无法启动并支持该设备,并显示以下消息:

无法声明USB设备:无法声明接口0:不允许操作

不允许操作是指示特权问题的消息。最常见的问题是udev尚未实际应用该规则:

if NUT has been freshly installed,
and if the device USB cord was already plugged when installing NUT. 

在这种情况下,只需拔下并重新插入USB线,然后重新启动NUT。

NUT udev规则文件的命名存在错误,导致该规则被另一个udev配置文件覆盖。虽然在Git master分支中已修复此问题,但您的发行版仍可能会受到影响。有关详细信息,请参见以下Github问题:https : //github.com/networkupstools/nut/issues/140

进一步查看Github问题,给我解决方案:

udev规则应用得太晚(优先级52),导致螺母特权被覆盖。最终结果是驱动程序无法启动,并且upsd和upsmon报告了与驱动程序/ UPS的连接失败。

解决方法只是通过重命名规则文件将优先级设置为62:

$ mv /lib/udev/rules.d/{5,6}2-nut-usbups.rules

此错误影响:

Debian: http://bugs.debian.org/721600
Fedora / Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=488368
Ubuntu: https://bugs.launchpad.net/debian/+source/nut/+bug/1099947 and probably all Linux distribution

0

如果您不使用UPS的USB线(几个月后由于时间紧迫,请插入新的UPS并进行配置),并且无法重新启动计算机,则可以重新触发udev规则:

udevadm control --reload
udevadm trigger
systemctl restart nut-server

做这份工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.