Questions tagged «udev»

Udev是一个Linux进程,用于管理/ dev下的设备文件条目

3
每次安装USB闪存盘时,其名称都一样吗?
我有一个USB密钥,每天都会通过bash脚本将其用于保存数据。我设法为特定用户安装了它,以便能够使用以下命令在其中写入文件夹: mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop 该脚本可以根据需要运行和创建目录,并且非常完美。在某个时候,将拔出USB密钥并用新的(相同型号)替换。新的USB密钥仍会使用该名称/dev/sdc1还是会有所不同? 如果是不同的零件,如何将安装零件包括在脚本中以使其自动制成?

1
使用UUID引用整个磁盘(/ dev / sda)
在我的系统(Debian的),我可以看到UUID我所有的磁盘分区的标识符(即/dev/sda1,dev/sda2..) ls /dev/disk/by-uuid/ 但是,我看不到其自身的UUID标识符/dev/sda。是否可以引用整个磁盘UUID? 之所以需要它,是因为我想引用一个特定的磁盘,并且我不能依靠它将被称为/dev/sda。 编辑 @don_crissti建议的解决方案很棒。但是,我希望同一型号/制造商的所有硬盘的UUID相同,而不是序列号唯一。 使用udevadm,我可以看到磁盘属性: udevadm info -n /dev/sda -a ATTRS{model}=="Samsung SSD 840 " ATTRS{vendor}=="0x8086" ATTRS{class}=="0x010700" ATTRS{device}=="0x1d6b" .... 我如何UUID从这些属性生成一个,以便相同的Model / Manufacturer磁盘具有相同的UUID?
9 udev  disk  fdisk  uuid 

2
克隆的Linux系统和/etc/udev/rules.d/70-persistent-net.rules
我设置了Ubuntu系统并对其进行了正确配置,包括eth0在中进行定义/etc/network/interfaces。然后,我对该系统进行了映像并将其克隆到新系统上。 当我第一次启动系统时,一切都很好,但是稍后重新启动后,我对网络配置超时感到很满意。当我登录时,我发现那eth0不可用。 我最初的研究让我尝试ifdown -a,ifup -a但我做了几次却没有明显效果。 研究最终将我指向/etc/udev/rules.d/70-persistent-net.rules,在那里我发现新系统的MAC地址创建了eth1。好主意,但不是我想发生的事情。 刚启动时,我发现/etc/udev/rules.d/70-persistent-net.rules现在有六个用于六个不同硬件地址的条目,由于只有一个接口,所以我觉得很奇怪。 我的问题是:我是否ifup -a以某种方式创建了要创建的新MAC地址?如果不是,是否有任何想法?我更改/etc/udev/rules.d/70-persistent-net.rules了名称以使用当前的硬件地址,eth0并且该地址似乎可以正常工作,但是我可以确定地址不会在重新启动后再次更改吗?

2
构建自己的initrd时如何填充/ dev目录?
我正在尝试学习有关initrd的知识。我已按照本教程从头开始构建自己的initrd,并在其上安装了busybox。然后我用isolinux从中制作了一个.iso,因此可以在virtualbox中对其进行测试。效果很好! 我有来自busybox的基本命令,所以我想挂载文件系统。但是/ dev目录几乎是空的(没有sda),除了我在按照教程学习时创建的某些文件之外。我了解了udev,我认为这是我所需要的。但是,我不确定该如何进行。 我应该只是从udev中获取最新的源代码,对其进行编译并将其添加到initrd吗?然后在我的初始化脚本中调用/ bin / udev或类似的内容?还是有其他/更好的方法来填充/ dev目录? 编辑:一些其他信息和有关我已经做的更新。 我在虚拟框中测试所有内容。我只是在虚拟盒子中安装了ubuntu minimal,从initrd中创建了一个.iso,然后从virtualbox中的iso中启动。 我使用了vmlinuz,并将/lib/modules其存在于debian-businesscard.iso上,然后将其复制到我的initrd中,该initrd是按照前面链接的教程创建的。 内核有 CONFIG_DEVTMPFS=y 有些设备显示在中/dev,如tty0-tty63和其他一些设备,但没有sda / hda。 然lspci -k在我当前正在运行的操作系统和虚拟框来检查哪些模块使用。SATA Controller说它ahci用作模块。 当我执行modprobe -v ahci它抱怨了很多关于“未知符号:ata_some_stuff”,但之后它返回像SCSI Subsystem initialized,ATA-6: VBOX HARDDISK和Direct-Access ATA VBOX HARDDISK。但是,仍然没有找到硬盘驱动器设备/dev。 我当前的/init/脚本如下: #!/bin/ash mount -t devtmpfs none /dev mount -t proc /proc /proc mount -t sysfs none /sys modprobe -v ahci …
9 udev  initrd 

2
插入Wifi卡时自动运行脚本(udev)
我一直试图在udev连接无线网卡时使Debian系统运行bash脚本。 到目前为止,我已经创建了这个文件/etc/udev/rules.d/wifi-detect.rules: ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh" 现在,我正在尝试test.sh使用以下内容: #!/bin/bash /bin/echo "test!" > /test.txt 但是由于某种原因,当我连接无线网卡时似乎什么也没发生,没有test.txt创建文件。 我lsusb的卡片上: Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n 跑步udevadm monitor –env这是当我连接的卡发生了什么: KERNEL[1017.642278] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb) KERNEL[1017.644676] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb) KERNEL[1017.645035] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware) KERNEL[1017.708056] remove /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware) UDEV [1017.714772] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb) UDEV …

2
如何隐藏udev的消息?
当我插入usbhub(插入7条)时,udev在控制台中显示很多消息。我可以隐藏这些消息或将其发送到/ dev / null吗?
9 usb  udev 

2
永久更改LVM卷的所有权(或组)
如何永久更改LVM卷的所有权(或至少是组)? 我认为我必须使用udev,但是我不知道规则应该是什么样子? 假设我想将LVM /磁盘的所有权更改为用户/组virtualbox,我该怎么做?
9 permissions  lvm  udev 

3
伪造的USB设备序列号
我有一部通过USB连接到PC的手机。 使用查看设备信息时 sudo udevadm info --attribute-walk 产品和供应商ID显示正常,但没有ATTR {serial}。我正在使用的应用程序(Android adb)需要设备报告序列号才能正常工作。 有什么方法可以伪造设备的序列号,例如使用udev规则? 说明:问题不在于如何获取 USB设备的序列号,而在于如何设置序列号。 我有一部Android手机,该手机无法通过USB报告序列号,而adb工具对此却不太喜欢。到目前为止,似乎还没有任何简单的解决方案。但是,有时候,只需购买合适的Android手机进行开发就非常容易。
9 usb  udev 

2
将物理USB设备路径映射到lsusb返回的总线/设备号
我需要获取连接的USB设备的标题。我可以做到这一点lsusb。 在我编写规则时,udev允许一些替换:例如,我们可以$kernel用来获取设备的名称或$devpath获取设备的路径。 但是问题是lsusb返回这样的字符串: Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC 但是udev的devpath是: /devices/pci0000:00/0000:00:1d.0/usb5/5-2 总线号相同(5),但号不同:Device 032似乎是一些逻辑号(当我重新连接设备时,此数字会增加),并且2似乎是物理设备号。 因此udev返回物理编号,我需要获取逻辑编号。然后,我可以像这样检索数据:lsusb -D /dev/bus/usb/005/032 因此,如何032通过类似的物理路径获取逻辑设备号/devices/pci0000:00/0000:00:1d.0/usb5/5-2?
9 usb  devices  udev 

2
Linux上完整的自动挂载解决方案所需的udev,udisk,autofs和通知设置的建议
继续在Linux中自动挂接已插入的设备,这使事情变得有些基础。运行Gentoo,我正在使用autofs-5.0.4-r5在笔记本电脑上自动挂载本地和网络设备的组合。一个人做autofs会让我有些困惑: 我必须为每个设备的挂载点预定义名称,但是有时在重新启动MMC读卡器后会用可引导的USB棒切换位置 我希望基于自动LABEL的挂载点出现,仅autofs AFAIK无法做到这一点 udev和udisk当然可以做到这一点。但: 我不希望在插入设备时自动挂载文件系统,只是给我一个名为LABEL的幻影挂载点 实际的文件系统挂载仅应在首次访问该挂载点时进行,就像autofs重影一样。通过意外拔出设备,这将降低弄脏文件系统的风险,同时仍提供出色的可访问性。 最重要的是,我可以随时使用DE中的信息进行了解。 是否有一个系统托盘应用程序能够指示所有自动安装的状态,即绿色=未安装任何东西,红色=已安装了某些东西? 是否有一种与分发无关的方法来提供文件系统(卸载)操作通知,例如使用notify-send?那特定于Ge​​ntoo的东西对我也适用。udev脚本对NFS和CIFS没有帮助,对吗? 该组合应该是最终的自动安装设置,还是我错过了什么?


1
非确定性图形卡设备名称
我的系统包含三张图形卡,一张radeon和两张nvidia。 我正在尝试配置多座设置,但是图形卡的“设备名称”不稳定,它从一种引导更改为另一种引导。 例子 开机1 Radeon卡 /sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/drm/card1 Nvidia 1卡 /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/drm/card0 Nvidia 2卡 /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0/drm/card2 开机2 Radeon卡 /sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/drm/card0 Nvidia 1卡 /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/drm/card1 Nvidia 2卡 /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0/drm/card2 等等... 此问题使任何多座配置都不稳定(我使用loginctl),因为将设备分配给座位是基于这些设备名称的。另一个真正的问题是,这会同时更改内核级别和Xorg级别的图形卡的连接器名称(即VGA-1变为VGA-2等),因此我无法通过xorg.conf进行任何监视器配置,也无法使用“ video =“内核选项,这在我的设置中是必需的,以强制启用没有EDID的旧crt监视器。 这个“ card0”“ card1” ..是不确定的,是否正常?是否是Bug或可以配置的东西(udev或类似的东西)? 编辑: 正如@dirkt用户在评论中说的那样,在systemd级别是不确定的,实际上多座位配置本身是可以的。我的主要问题是输出名称的不可靠性。我需要它们在内核级别指定“ video = VGA-1:e”以强制启用输出。我需要在xorg级别上使用 Option "Monitor-VGA-1" "Monitor-x"。

3
在联想扩展坞和Linux上自动切换显示
我有一个带有nvidia optimus的联想ThinkPad和一个迷你坞站系列3。 我希望在对接时,它应尽可能自动切换到外部显示器,如果我将其取消对接,则应自动切换到ThinkPad LCD。 这也应该在引导阶段起作用,因为在此必须输入加密磁盘(dm-crypt)的密码。 我尝试了以下操作,但不起作用: 我创建了一个文件/etc/acpi/thinkpad-undock.sh(+ chmod a+x thinkpad-undock.sh),其中包含以下几行: #!/bin/sh xrandr --output LVDS-1 --auto --output DP-5.8 --off 并且 /etc/acpi/thinkpad-dock.sh #!/bin/sh prime-select nvidia # ensures that nvidia card is selected xrandr --output LVDS-1 --off --output DP-5.8 --auto 再来一次chmod a+x thinkpad-dock.sh。 手动执行两个脚本都可以。 比我创建了两个文件来处理事件: thinkpad-dock-lenovo event=ibm/hotkey LEN0068:00 00000080 00004010 action=/etc/acpi/thinkpad-dock.sh 并且 thinkpad-undock-lenovo …
8 linux  udev  xrandr  acpi  thinkpad 

1
改善我的Bash脚本
我需要改进我的Bash脚本,以使其完美运行而不会出现问题。该脚本ds4drv在其中使用,并且我不确定如何更正某些问题。 第一个问题是,在检测到控制器时它并不总是运行或正常工作,我已经为其创建了udev规则,但尚不清楚为什么在检测到该控制器时并不总是运行该脚本。 第二个问题,ds4drv只能被允许以root用户身份运行,而不能以普通用户身份运行。 第三个问题,创建PID锁定文件后,我不知道如何处理它们,因此,当PID进程不再存在时,它将在之后删除PID锁定文件。很难找到有关如何在bash脚本中使用PID文件的适当文档,因此只能有1个正在运行的实例。 这是我对ds4drv的udev规则: 50-ds4drv.rules KERNEL=="uinput", GROUP="users", MODE="0666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", GROUP="users", MODE="0 666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", KERNELS=="0005:054C:05C4.*", GROUP="users" MODE="0666" ACTION=="add", SUBSYSTEM="usb", ATTRS{idProduct}=="054c", RUN+="/home/user/scripts/ds4check.sh", GROUP="users" , MODE="0666" 我很确定这是udev规则的样子,权限对我来说似乎是正确的,因为它对GROUP用户是读写的。似乎确实存在一些问题的实例,一旦我的bash脚本运行并且此规则设置为在连接控制器设备时自动运行,那么某些游戏将变得无响应,例如在没有控制器设备的情况下就连接了它。采取行动,/dev/js0而是采取行动/dev/js1。特别是如果它不是以root身份执行的,通常会返回此错误。 OSError: [Errno 13] Permission denied: '/dev/input/event17' 当然还有bash脚本; ds4check.sh #!/bin/bash # DS4 Check Script pidfile=/tmp/ds4drv.pid # check if process is already running …


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.