我真的不确定这是否是正确的网站,但我把它放在这里,因为这是一个编程问题,我认为SO群体是三个站点中最靠Linux的。 无论如何,我试图找出一种方法来模拟从软件方面断开设备,就像用户在物理上断开连接一样。 到目前为止,我已经在/etc/udev/rules.d中创build了一个名为10-nano.rules的udev规则: SYSFS{idVendor}=="05ac", OPTIONS+="ignore_device" 此规则适用于忽略设备,但只有在断开连接并重新连接之后。 但是我想要做的是能够编写规则,然后让设备被忽略,就好像它被断开一样。 我尝试过使用和不使用sudo的“udevadm触发器”,但由于某种原因,我无法在设备连接时应用此规则。 有什么build议么? 顺便说一下,我可以通过删除10-nano.rules,然后运行“sudo udevadm触发器”重新连接被忽略的设备,但像上面所说的,而不是相反的方式。 (因为某些原因,当我运行这个命令的时候,我的系统时间和互联网就搞砸了)
我正在开始一个编程项目,需要确认可移动媒体的设备身份(例如usb的拇指驱动器),然后再继续做一堆其他很酷的东西。 我的一些朋友指出我使用序列号,并使用udevadm命令的初步testing表明,这应该工作。 我做了一些额外的检查,看来如果我能得到与libudev一起工作的软件,那么它应该(最低限度)在Ubuntu,Slackware和Gentoo上编译,这将是一个很好的好处。 所以我用bing来find一个教程,并得到了Signal 11站点(http://www.signal11.us/oss/udev/)这是一个写得很好的教程。 它似乎有我需要的一切。 我下载了代码。 修复一些特定于平台的错误,然后编译。 繁荣! 海湾合作委员会编译没有错误。 到现在为止还挺好。 但是当我尝试运行它时,它引发了一些bug,而且我意识到我需要阅读更多的教程,以便我能够很好地理解libudev来修复错误,并生成工作软件。 问题是,真的没有任何其他的教程(我可以find),并且最近的服务器泄露后,库文档的(只知道?)网站的kernel.org站点closures。 我认为只是向system()发出udevadm指令,然后parsing结果,但这是一个非常糟糕的方式来把软件放在一起,而且我正计划在完成写作时将其发布给社区。 那么如何最好的学习libudev?
有没有办法在Linux中通过libudev / sysfs区分U盘(闪存)和USB硬盘? 如果没有,有没有办法直接查询硬件? 谢谢。
所以我在一个树莓派和一个Beaglebone黑色上运行Arch。 最近我注意到这两个设备都没有在其networking接口上使用持续的udev命名(即仍然使用eth0,wlan0等)。 在Raspberry Pi上,我删除了阻止udev持久地重命名接口的文件: /etc/udev/rules.d/80-net-name-slot.rules Beaglebone黑色更新,甚至没有文件。 在Raspberry Pi上删除它似乎没有效果。 他们两个都在运行systemd 208.任何想法发生了什么? 低端ARM设备是否支持持久命名? 以下是两个设备上的以下命令的输出: udevadm test-builtin net_id /sys/class/net/eth0 在树莓派上: calling: test-builtin === trie on-disk === tool version: 208 file size: 5866515 bytes header size 80 bytes strings 1296323 bytes nodes 4570112 bytes load module index ID_NET_NAME_MAC=enxb827eb2a5c39 ID_OUI_FROM_DATABASE=Raspberry Pi Foundation unload module index 在Beaglebone黑色: calling: test-builtin === trie […]
我有以下真正愚蠢的C程序: #include <SDL2/SDL.h> int main () { SDL_Init(SDL_INIT_VIDEO); } 如果我编译并链接到sdl2 ,一切都很好: [nix-shell:~/work/on-the-limit]$ gcc oddity.c -lSDL2 -o oddity [nix-shell:~/work/on-the-limit]$ ./oddity 但是,如果我也链接到udev … [nix-shell:~/work/on-the-limit]$ gcc oddity.c -lSDL2 -ludev -o oddity [nix-shell:~/work/on-the-limit]$ ./oddity Segmentation fault 发生分段错误 gdb有以下的说法: [nix-shell:~/work/on-the-limit]$ gdb ./oddity GNU gdb (GDB) 7.10 Copyright (C) 2015 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or […]
我写了一个小的shell脚本,用xrandrconfiguration连接的外部显示器。 # cat /home/didi/bin/monitor_autoswitcher.sh #!/bin/bash xrandr | grep "HDMI1 connected" if [[ $? == 0 ]]; then # is connected xrandr –output HDMI1 –right-of LVDS1 –auto else # not connected xrandr –output HDMI1 –auto fi xrandr | grep "VGA1 connected" if [[ $? == 0 ]]; then # is connected xrandr –output VGA1 –right-of LVDS1 […]
有没有一种“常用”的方式来检测是否是笔记本电脑,台式机,平板电脑,手机,embedded式设备,服务器,虚拟机等没有使用HAL? 在过去,这个信息可能会被smbios.chassis.type ,但是现在在大多数Linux发行版中我们都不赞成使用HAL,所以我需要以其他方式访问这个信息。 在dmidecode我看不到任何明显的东西。
我试图创build一个隐藏大小小于64 GB块设备(即USB驱动器)的udev规则 规则如下所示: BUS=="usb", SUBSYSTEM=="block", ACTION=="add", PROGRAM="/data/diskSizeCheck.pl %k", RESULT!="ok", ENV{UDISKS_PRESENTATION_HIDE}="1", GOTO="usb_mount_end" 其中usb_mount_end只是我的规则文件末尾的一个标签。 %k应该是设备内核(即sdb)。 但是,即使当我将硬编码“sdb”作为参数时,该参数也不会将其写入到我的perl脚本中,即使大小足够大,磁盘也总是会失败。 当我通过命令行传递sdb时,它可以工作。 这是我使用的Perl脚本: #!/usr/bin/perl use strict; my $MINIMUM_DISK_SIZE = 64000000000; my $kernel = $ARGV[0]; my $diskSize = `blockdev –getsize64 /dev/$kernel`; chomp($diskSize); if ($diskSize > $MINIMUM_DISK_SIZE) { print "ok"; } else { print "no"; } 脚本被标记为可执行文件和所有内容,但是当我将$kernel写入文本文件时,文本文件变为空白,导致我相信variables永远不会被传入。 我如何将%k传递给我的Perl脚本? 编辑添加:我正在运行一切作为根。 编辑进一步添加:我认为真正的问题是RESULT由于某种原因没有正确捕获我的脚本的输出。
我想知道是否有产生多个线程的危险,每个线程创build自己的udev上下文,并开始监视硬件的变化。 它会认为,如果每个线程有自己的udev上下文一切都很好。 但是,如果像udev_new或udev_monitor_new_from_netlink这样的调用将访问全局/静态variables,则可能会出现问题。 由于README或文档都没有提到关于multithreading的任何事情,所以我在这里问。 知道更多吗?
如何在Linux下使用libudev以编程方式枚举所有USB闪存驱动器? 我想得到' /dev/sdb4 '这样的string,然后我可以使用' mount() '来挂载它们。 我是在http://www.signal11.us/oss/udev/下面的libudev例子。 示例代码适用于' hidraw '; 然后我尝试了' usb ',' scsi_disk ',' scsi_generic '等,但是没有工作 – 它没有列出像' /dev/sdb4 '那样的'设备path',它表示' Device Node Path: (null) “。