- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Ubuntu 12.04.5 LTS,x86_64 上。
我有一个使用 libusb 与计算机通信的 USB 设备。将其插入计算机并运行通信程序后,出现以下错误:
libusb couldn't open USB device /dev/bus/usb/008/004: Permission denied.
libusb requires write access to USB device nodes.
libusb failed to find the Optotrak USB device. Are you sure you have set the udev permissions correctly?
所以如果我按如下方式修改/dev/bus/usb/008/004:
sudo chmod 777 /dev/bus/usb/008/004
再次运行通讯程序,设备正常运行。问题是每次我插入设备时,最后的数字都会改变,所以每次 USB 总线时我都必须 chmod,但由于并非所有用户都知道管理员密码,所以这是一个问题。
所以厂商建议编辑udev规则如下。在/etc/udev/rules.d 中创建一个 12-ndi-rules :
BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="da77", GROUP="plugdev"
(我已经用 lsusb 检查过 SYSFS 是正确的)
lsusb
Bus 008 Device 004: ID 0403:da77 Future Technology Devices International, Ltd
然后重新加载规则:
sudo udevadm control --reload-rules
但仍然没有正确设置总线 008/004 的权限。
如何使这些规则在每次重新启动时永久生效?如果我更改 USB 设备的端口,我也想让它们永久化。
最佳答案
好的,这里是让它工作的所有步骤。我在网上找到的所有回复都遇到了问题,到处都是点点滴滴,没有任何特定的顺序,也没有单一的工作解决方案,(运行 Android Studio、Jmonkey 3D 和 Ubuntu 14.04)
如果 adb devices 将 android 设备显示为 ??????????(无权限),请按照以下说明操作:
1) 创建文件/etc/udev/rules.d/51-android.rules
sudo gedit /etc/udev/rules.d/51-android.rules
2) 复制粘贴以下内容:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666", GROUP="plugdev"
3) 运行以下命令更改文件权限:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
4) 通过usb连接手机并运行以下命令:
lsusb
查找您的设备示例 (Nexus 5):
Bus 003 Device 074: ID 18d1:4ee7 Google Inc.
对于 Nexus 5,供应商 ID 是 18d1,我的在总线“003”
5) 现在使用以下命令重新加载规则:
sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
6) 验证设备现在允许plugdev 用户组访问
ls -l /dev/bus/usb/<bus number from step 4>
例子:
ls -l /dev/bus/usb/003
crw-rw-rw- 1 root plugdev 189, 329 Jul 3 18:23 074
7) 运行adb devices 以确认权限正确并享受!
注意:如果您还没有创建 plugdev 组并添加您的用户名(如果权限被拒绝,请在前面加上“sudo”以下命令):
1) 添加plugdev组:
groupadd plugdev
2) 将您的用户名 添加到plugdev 组(useradd -G {group-name} 用户名):
useradd -G plugdev billy
3) 重新启动 udev(您可能需要注销并重新登录以更新用户组):
sudo service udev restart
关于linux - Udev 规则不适用于 Ubuntu 12.04 上的 libusb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25445178/
我需要为特定键盘编写一个 udev 规则,该规则似乎没有任何可与之匹配的唯一属性。 以下几行是 udevadm monitor 的输出插入设备后。这里有什么我可以用来唯一识别这个键盘的东西吗? KER
我有两个 LCD 使用 Xorg 的 xinerama 功能。每个 LCD 屏幕都有一个连接到各自 USB 线的触摸屏。 查看“/var/log/messages”文件,我看到以下内容: kernel
谁能告诉我一个关于 ubuntu-linux 的小例子 如何为 pendrive 编写 udev 规则,我可以在我的 linux 机器上进行实验。 请给出步骤,我是 udev 的新手。 当我使用 ud
我将三个不同的串行设备连接到三个 USB 串行转换器 (FTDI USB-RS232)。如果我连接它们,我会按预期获得通用设备名称/dev/ttyUSBx。当我尝试编写一些 udev 规则时,udev
我目前正在做一个项目,当插入 USB 设备时运行一个用 C 编写的程序。这可以用 udev 规则实现吗? 我目前可以在插入设备时运行 Hello World 脚本。但是,它不止一次地运行它。 当前路径
udev 没有正确运行我的 bash 脚本。 这是我的规则: ACTION=="add", KERNEL=="sd*1", SUBSYSTEM=="block", ATTRS{idVendor}=="
我写了一个简单的 udev 规则来将我的袖珍闪存卡读卡器挂载到一个可写设备节点。该规则早些时候有效,但似乎由于某种原因停止了,我之前正在编辑文件,但现在它只包含: KERNEL=="/dev/sd*"
我使用 ubuntu,我想在连接 USB 内存棒时记录日期。我创造了 sudo vi /etc/udev/rules.d/60-my.rules 其中包含 SUBSYSTEMS=="usb",ACTI
我有一个基于 debian 的基于繁忙盒子的自定义发行版。它使用旧版 debian 中的 udev(IIRC 它基于 Wheezy),该版本启动 create_static_nodes 作为 udev
有人可以提示一下为什么会这样吗? ACTION=="add", SUBSYSTEM=="block", PROGRAM="/bin/echo -n 12345", ENV{ID_FS_UUID}=="
我正在编写一个 udev 规则来设置两个串口的名称。我想在符号链接(symbolic link)中使用属性 bInterfaceNumber 的值。 我的规则是: SUBSYSTEMS=="usb",
这是来自 SuperUser.com 的骗局。那里的人不够聪明,也不愿意帮助我;也许这更多是程序员的问题而不是管理员的问题: 除了内置触摸板外,我有一个应用程序可以读取通过 USB 插入的 4(四)个
我正在编写一个必须在 Fedora Core 4 上运行的应用程序。该应用程序需要在没有 root 权限的情况下访问 USB 设备。使用 libusb-1.0.8 我已经成功地编写了应用程序,除了一个
我正在尝试为 USB 驱动器插件编写一个 udev 规则。我想先将它挂载到 /media,然后在 /usr/local/bin/script.sh 运行脚本。当我插入 USB 时,它甚至不使用此规则安
我想知道生成多个线程是否存在危险,每个线程创建自己的 udev 上下文并开始监视硬件更改。它会认为,如果每个线程都有自己的 udev 上下文,那么一切都很好。但是,如果像 udev_new 或 ude
我正在使用 udev 检测我的 Ubuntu 10.04 LTS x64 服务器上的 USB 驱动器连接和断开连接。在机器运行时连接 USB 设备时一切正常,但如果在启动时已经存在,我的脚本不会完成,
我有几个不同的设备,它们都完成相同的基本任务。我希望能够交换它们,并且无论插入哪个,都具有相同的符号链接(symbolic link)。例如,如果我有 device1、device2 和 device
我应该使用 goto和 label仅在同一个文件中,或者在为 udev 编写规则时是否可以在单独的文件中使用它? 以下代码有效吗? $ cat 05-some.rules GOTO="other_la
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 6 个月前关闭。 Improve t
我在 udev 中为 2 个文件中的 usb 添加和删除编写了 2 条规则。 SUBSYSTEM=="usb", ACTION=="add", RUN+="/u/usb_added %b" SUBSY
我是一名优秀的程序员,十分优秀!