解决Linux下使用‘node-hid’不能打开设备的问题

2,416 阅读2分钟

最近在用Electron写跨平台桌面开发,Linux下使用‘node-hid’打开设备报如下错误:

方法一

使用sudo打开AppImage

sudo ./*.AppImage

但是报如下错误 [10261:1112/113058.429080:FATAL:atom_main_delegate.cc(194)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 追踪与中断点陷阱

在这里我找到了解决方法

解决方案:只需在没有沙箱的情况下将其作为sudo运行即可。 sudo ./Biscuit-1.1.7.AppImage --no-sandbox 但我不知道这是否是最佳解决方案。

方法二

通过查看‘node-hid’readme
大多数Linux发行版使用UDEV来管理对物理设备的访问,USBHID设备通常由root用户拥有。若要允许非根访问,必须根据设备供应商ID和Productid为设备创建UDEV规则。

只需要为USBHID设备创建一个udev rule文件即可,操作步骤如下
cd /etc/udev/rules.d
sudo touch my.rules
sudo vim my.rules
输入i进入编辑模式,添加如下脚本,请注意,idVendor和idProduct的值必须为十六进制且小写。修改idVendor和idProduct的十六进制修改为您的设备

# Copy this udev with "sudo cp 51-blink1.rules /etc/udev/rules.d/"
# Edit it to suit your type of Linux. It's currently set up for modern Ubuntu
# When done, do "sudo udevadm control --reload-rules"
# and unplug and replug in the blink1 device.

# Note the hex values for vid & pid must be lower-case
# SYSFS{idVendor}=="27b8", SYSFS{idProduct}=="01ed", MODE="666"
#ATTRS{idVendor}=="27b8", ATTRS{idProduct}=="01ed", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"

# modern ubuntu
SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="27b8", ATTRS{idProduct}=="01ed", MODE:="666", GROUP="plugdev"
KERNEL=="hidraw*", ATTRS{idVendor}=="27b8", ATTRS{idProduct}=="01ed", MODE="0666", GROUP="plugdev"

按下ESC退出编辑,输入:wq或按下ZZ退出vim
最后执行如下命令
sudo udevadm control --reload-rules
最后最后重新插拔您的设备
现在你可以通过双击鼠标打开AppImage文件,并且能够打开USBHID设备了!