标签: udev

udev 实际上解决了哪些问题?

就此而言,.net 中的一堆静态文件到底有什么问题/dev?对于开发人员来说,我现在重新发明这个轮子 3 次(devfs-> udev + HAL-> udev)显然不够令人满意,现在显然它也进入了 Grand Unified Init Program,所以四次。

我记得几年前我第一次开始使用 Linux 时感到惊讶,尽管声称“一切都是文件”,但没有/dev/eth0(后来是有道理的,因为它不是字符或块设备——尽管是“数据包”设备类型会很有趣...)。鉴于此,为什么处理字符和块设备文件树的程序还要负责网络设备?我已经看到对“灵活性”的模糊引用,但是这对 ifconfig(8) 仅通过查看所做的事情有何补充/proc/net/dev?例如,我知道 NetworkManager 不会很快出现在 Net 或 OpenBSD 中,因为它依赖于udev,这两个团队都不想编写;我不知道的/dev内核已经以多种方式公开了它们(并且它们都没有/dev!)。

仅仅是因为热插拔吗?内核只是侦听物理总线并在“添加设备”消息上加载适当的模块是否存在问题?或者,上帝保佑,实际管理员这样做?我确实记得早在 2000 年代初期,我的服务器有时会以意想不到的顺序初始化它们的网卡,我认为在用户空间中决定命名是有意义的(尽管当时修复并不是非常困难),但是这对蟑螂来说似乎是一把大锤。(或者,这个问题可能会影响到我认为比机架式服务器或 PC 更难的用例,这是我的经验。)

所以,简单地说一下我的问题:udev 实际解决了什么问题,devfs、HAL 和/或普通旧文件如何无法解决这些问题?许多不同的东西(热插拔、通用设备管理、网络设备管理、设备命名、驱动程序优先级等)都成为一个程序是否有特殊原因?

linux udev

28
推荐指数
2
解决办法
3395
查看次数

插入 USB 键盘时自动加载键盘布局的 udev 规则

当我插入 USB 键盘但我的 udev 规则不起作用时,我试图加载新的键盘布局。

SUBSYSTEM=="input", ATTR{idVendor}=="062a", ATTR{idProduct}=="0201", GOTO="usb_xmodmap_auto"

标签=“usb_xmodmap_auto”
ACTION=="添加", RUN+="/usr/bin/xmodmap ~/.usbXmodmap"
ACTION=="移除", RUN+="/usr/bin/xmodmap ~/.pndXmodmap"

我已经使用以下方法重新加载了规则:

>sudo udevadm 控制 --reload-rules

并通过重新启动系统但是当我插入 USB 键盘时,原始 xmodmap 仍然加载,因此键盘布局是错误的,但是如果我在终端中运行命令

>/usr/bin/xmodmap ~/.usbXmodmap
或者
>/usr/bin/xmodmap ~/.pndXmodmap

他们工作得很好。

希望有人能帮忙。

编辑:

为了提供更多帮助,我进行了一些 udevadm 测试:

>udevadm 测试 --action=add /devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10

输出:

运行命令:调用:测试
udevadm_test:版本 151
此程序仅用于调试,不运行任何程序,
由 RUN 键指定。它可能会显示不正确的结果,因为
某些值可能不同,或者在模拟运行时不可用。

[...]
parse_file: 读取“/etc/udev/rules.d/usb-keyboard.rules”作为规则文件
udev_rules_new:规则使用 100572 字节令牌(8381 * 12 字节),21523 字节缓冲区
udev_rules_new:临时索引使用了 35380 字节(1769 * 20 字节)
udev_device_new_from_syspath: 设备 0x3b4d8 有 devpath '/devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10'
udev_rules_apply_to_event: RUN '/sbin/modprobe -b $env{MODALIAS}' /etc/udev/rules.d/80-drivers.rules:5
udev_rules_apply_to_event: 运行 …

linux usb udev

26
推荐指数
2
解决办法
2万
查看次数

如何检查 udev 规则是否被触发?

我正在尝试在 Ubuntu 13.10 下熟悉 udev。

这是我的第一个简单的 95.usbbackup.rules 规则:

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
Run Code Online (Sandbox Code Playgroud)

这是脚本(已被 chmodded +x) my_backup.sh :

#!/bin/bash
touch /tmp/test
Run Code Online (Sandbox Code Playgroud)

当我插入外部驱动器时,什么也没有发生。如果规则被触发,我如何检查(日志、命令、任何东西)?

非常感谢

linux udev ubuntu

24
推荐指数
4
解决办法
5万
查看次数

使用 udev 规则在 USB 插入时运行脚本

我正在尝试设置一个脚本以在每次插入 USB 设备时运行。我创建了文件/etc/udev/rules.d/90-local.rules并添加了以下规则:

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"
Run Code Online (Sandbox Code Playgroud)

问题是当驱动器连接时,什么也没有发生。出于调试目的,该脚本被操纵以使用通知发送发送通知,该通知已安装并在终端上正常工作。

脚本的路径是正确的,因为我在终端中运行了那个确切的命令,没有任何问题。

linux autorun udev

19
推荐指数
2
解决办法
4万
查看次数

在无头 systemd linux 机器上自动挂载 USB 驱动器

在 Linux 中自动挂载设备的方法不断变化,谷歌搜索返回了相当多的解决方案,对现代基于 systemd 的机器具有不同程度的适用性。

似乎存在以下方法:

  1. 修改/etc/fstab以通过 UUID/标签/设备添加每个驱动器的安装。
  2. udev 规则(显然“原始规则”可能与现有的 systemd 策略冲突)
  3. udisks2运行作为systemd服务或经由udiskie
  4. 恶魔
  5. 挂载
  6. 桌面环境提供的自动挂载,即在 XFCE 上通过thunar+thunar-volman包,或nautilus在 Gnome 中使用gnome-volume-manager包自动挂载(显然它们依赖udisks)。
  7. autofs内核自动挂载程序
  8. systemd自动挂载,使用示例:automount-usb

选择可能是压倒性的,目前尚不清楚哪种方法是推荐的。此外,似乎不同的自动挂载子系统可能会相互冲突,导致分区由一个工具挂载,然后在几秒钟内被另一个工具自动卸载。

对于具有桌面环境的系统,这很简单,因为它们中的大多数会自动处理 USB 挂载,因此除了在设置中启用自动挂载选项外,不需要额外的操作。

对于主要在文本模式下运行的无头系统,当前的方法是什么?

更新

所有我发现的选项摆弄后usbmount,以(几乎)刚刚工作后,我编辑 /lib/systemd/system/systemd-udevd.service和改变MountFlags=slave,以MountFlags=shared在描述这个问题(???? UPDATE:对于最近的systemd版本PrivateMounts=no,而应使用!)。无需手动向任何配置文件添加任何 UUID 或标签。缺点是它创建的挂载点/media/usbN并不完美,所以我已经切换到automount-usb非常容易设置(只需运行configure.sh脚本)并创建挂载文件夹,/media/<device>_<disk_label>例如像/media/sda2_mylabel(???? UPDATE :automount-usb似乎不可维护)。

相关链接:

linux fstab udev automount systemd

17
推荐指数
2
解决办法
1万
查看次数

在 udev 规则中使用 UUID 并在 /media/$UUID 上挂载 USB 驱动器

我想/media根据磁盘的 UUID挂载 USB 驱动器。如何在 udev 规则文件中使用 USB 驱动器的 UUID,以及使用 UUID 编号作为文件夹名称安装 USB 驱动器的 udev 规则是什么。

blkid命令仅在安装时输出磁盘的 UUID。

udev

14
推荐指数
2
解决办法
1万
查看次数

在多座位配置中将 USB 集线器分配给特定座位

在我的基于 debian 的机器上,我有一个有效的multiseat configuration

到目前为止我无法解决的一个烦人的细节是我连接的任何 USB 硬件总是分配给主要座位。

网上搜了下,看来解决这个问题的办法是在机器上接一个USB集线器,把它的“所有权”分配给次席。这样,任何连接到集线器的设备都将被控制到次要座位。但是,我对如何分配所有权有点困惑

lsusb 允许我跟踪集线器的总线位置:

Bus 002 Device 004: ID 1a40:0201 Terminus Technology Inc. Hub
Run Code Online (Sandbox Code Playgroud)

如果有人能从这里引导我,我将不胜感激......

PS:最初我认为我必须调整xorg.conf设置,但阅读 conf.xorg 文档我找不到任何相关的内容。在其他一些帖子中,我也阅读了有关 using 的内容udev,但同样......我没有找到关于如何实现这一点的明确方法。

usb debian xorg multiseat udev

13
推荐指数
1
解决办法
1318
查看次数

systemd-udevd[381]: 无法执行“/lib/udev/socket:@/org/fre edesktop/hal/udev_event”

升级到 ubuntu 14.04 后,我在 dmesg 中看到了这个

[    1.538887] systemd-udevd[105]: starting version 204
[   19.074098] systemd-udevd[310]: starting version 204
[   19.271342] systemd-udevd[381]: failed to execute '/lib/udev/socket:@/org/freedesktop/hal/udev_event' 'socket:@/org/freedesktop/hal/udev_event': No such file or directory
[   19.279385] systemd-udevd[395]: failed to execute '/lib/udev/socket:@/org/freedesktop/hal/udev_event' 'socket:@/org/freedesktop/hal/udev_event': No such file or directory
[...]
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

udev ubuntu-14.04

11
推荐指数
2
解决办法
1万
查看次数

我在哪里可以找到 Debian 上的命令“udevinfo”?

我正在尝试解决 Wheezy 中网络摄像头的问题,并且我需要使用命令 获取有关驱动器的一些信息udevinfo。问题是:这个可执行文件在哪里?

如果我运行sudo udevinfo结果是:

udevinfo:找不到命令

有什么建议吗?

debian udev debian-wheezy

10
推荐指数
2
解决办法
1万
查看次数

系统未检测到热插拔显示端口(通过 Thunderbolt 连接器)

如果在启动前连接,我的外部显示器(通过 Thunderbolt 连接到我的笔记本电脑)工作正常。但是,一旦以任何方式拔下或断开连接,xrandr 将不再检测重新连接的显示器。

我正在运行Arch Linuxbumblebee用于图形卡处理。外卡通过 Thunderbolt 连接器连接。有人能告诉我这台机器出了什么问题,我怎样才能使热插拔工作?谢谢。


【调试细节】

在下面的多线程bumblebeeudevadm,我做了一些测试,并提出了热插拔脚本。然而问题仍然没有解决。结果发布如下。

对于大黄蜂,我没有做太多调整,因为第二台显示器在未热插拔时检测良好。

对于热插拔相关问题。我做了以下事情:

当显示器正常工作时,xrandr --query返回

Screen 0: minimum 8 x 8, current 2944 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
   1920x1080     60.02*+

...

DP1 connected 1024x768+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00* 

...
Run Code Online (Sandbox Code Playgroud)

从 DP2 上拔下显示器并udevadm monitor --environment --udev …

linux multiple-monitors udev hotplug thunderbolt

9
推荐指数
1
解决办法
6793
查看次数