我有以下udev规则挂载SD卡的第一个分区到/ mnt / sdcard。 KERNEL=="mmcblk0p1", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="sdcard", RUN+="/usr/bin/mount_sdcard" KERNEL=="mmcblk0", ACTION=="remove", RUN+="/usr/bin/unmount_sdcard" 我的/usr/bin/mount_sdcard可执行文件是: #!/bin/sh # log event logger -t mount_sdcard -p user.warn "New SD Card detected" # mount to /mnt/sdcard mount_result=`mount $DEVNAME /mnt/sdcard 2>&1` # On errors, send error to log echo $mount_result | logger -t mount_sdcard -p user.error if [ "x$mount_result" […]
我需要在存储设备的安装和卸载上运行一些代码。 我如何可以在Linux上侦听这些事件? 我正在考虑添加一些udev规则来运行一些脚本(任何知道这个问题的赞赏)。 但是我更愿意在内核中使用我的守护进程(就像udev一样)来监听内核中的事件,或者类似的东西。
在Linux下假设如下情况: 从USB串口转换器设备( /dev/ttyUSB0 )不断读取进程。 该设备突然拔下并重新插入(或由于某种原因而重置)。 该过程继续为/dev/ttyUSB0有一个有效的文件句柄,但不会从设备接收任何数据,除非进程重新打开设备(因为udev已经删除并重新创build设备节点)。 有没有直接的方法来检测这种情况(即不是间接地通过检测数据stream中的超时),以便过程知道它必须重新打开设备? 使用stat()监视/dev/ttyUSB0的修改时间是否可靠? 额外细节: 该过程使用标准的open()函数打开设备文件。 /dev是由udev控制的tmpfs 。 注意:我不想为此使用任何udev规则,而更喜欢直接在过程中实现的解决scheme。
我想用C编写一个小程序:当我将笔记本电脑插入笔记本时,应该将音量调低。 然后,当我从笔记本中取出耳机时,应该将音量恢复。 我正在使用alsa驱动程序,并且我知道如何控制音量。 问题是:如何在耳机插入时得到通知? 在我问这个问题之前,我尝试过使用IRQ。 我使用watch -d0.5 cat /proc/stat来查看系统在插入或拔出耳机时是否遇到任何中断,并看到8个中断。 我不知道用IRQ是正确的,所以我不知道。
我需要移植一个bash脚本,使用像hal-get-property或hal-find-by-capability这样的不推荐使用的HAL工具来使用udev。 HAL声称HAL被合并到udev中,但我找不到有关如何将此脚本正确移植到udev的有用信息。 示例:如果我想要所有存储硬件(包含HAL)的列表,我可以运行 hal-find-by-capability –capability storage 这将给我一个UDI的列表(唯一设备标识符)看起来像这样: /org/freedesktop/Hal/devices/storage_model_Virtual_disk /org/freedesktop/Hal/devices/storage_serial_00000000000000000001 /org/freedesktop/Hal/devices/platform_floppy_0_storage 如果我现在想知道/org/freedesktop/Hal/devices/storage_model_Virtual_disk是否可移动,我可以发出以下查询 hal-get-property –udi /org/freedesktop/Hal/devices/storage_model_Virtual_disk –key storage.removable 它会回答true或false 。 所以我的问题是: 我怎么能做这些事情没有HAL? sysfsutils( systool )可以工作,但它似乎不是一个合适的替代品。 这是否与udevadm info工作?
我想用一个简单的Perl脚本来做一些configuration,例如我的蓝牙耳机。 我尝试使用Net :: DBus ,但我的OS / DE(Fedora 17,GNOME3)不再使用HAL。 我真的不想为此安装HAL,那么我该怎么做? 我的想法到目前为止: (首选):使用DBus; 只需听取UDev事件而不是org.freedesktop.Hal 。 问题:我找不到相应的服务, org.freedesktop.UDisks似乎只能监视磁盘(duh)。 UDev是否发送其他设备的DBUS消息,如果没有,我可以configuration它这样做? 使用UDev规则触发另一个脚本。 我喜欢将我的脚本放在一个地方,以便轻松过渡到新的操作系统安装,所以我宁愿避免这种情况。 我最好使用Python直接听UDev ? 或者我可以使用Perl来做到这一点? CPANsearch“udev”没有产生任何帮助。 或者我可能完全不在,UDev甚至不是我所需要的。 文档和Google都没有真正帮助过这个问题。 一个解决方法是,如果有人知道如何让GNOME3将audio输出切换到新连接的蓝牙耳机默认情况下,但我想学习脚本这样的东西。 提前感谢任何指针! 一个。 PS:顺便说一下,Google&Co。 声称UDev获取设备并向HAL发送消息,然后通知DBus。 那肯定不是这样,因为HAL甚至在Fedora Repos aymore中都没有。
我创build了一个udev规则来插入一个USB设备后执行一个bash脚本 SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/bin/flashled.sh" 但脚本运行几次而不是一次,我认为这是硬件检测的方式? 我试图把睡眠10放入脚本和fi,但没有任何区别。
我有一个PCI设备,我已经能够configuration一个DKMS模块。 内核模块被加载,我看到设备出现在/ proc / devices中。 驱动程序有一个使用mknod创build设备节点的load_driver.sh脚本。 我想制作一个udev规则,在加载驱动程序时自动创build这个节点。 我怎样才能做到这一点?
我读了许多关于如何做到这一点的线索,但这对我没有任何作用。 我想要达到的是: 当我的笔记本电脑有两个额外的显示器连接,当我关上它的盖子,我不想让它去睡觉。 但是,如果我断开显示器并closures盖子,我想让笔记本电脑进入睡眠状态(这样不会忘记)。 因此,我创build了一个应该在VGA / HDMI连接事件上执行的BASH脚本。 BASH脚本计算连接的显示器数量,如果只有1个,那么当盖子closures时,它将使笔记本电脑进入睡眠状态。 我有Ubuntu 14.04 LTS。 这是我迄今为止所做的: 创build了2个文件: displays_count_sleep.sh和on_hdmi_connected.rules https://gist.github.com/nbtk123/9ffbf7541e47b9c0015f5c3e9f44b7c9 把这个on_hdmi_connected.rules放到/etc/udev/rules.d来捕捉事件: SUBSYSTEM=="drm", RUN+="/bin/bash /home/nir/dev/scripts/displays_count_sleep.sh" 把我想要运行的bash脚本, displays_count_sleep.sh ,放到/home/nir/dev/scripts : #!/bin/bash DISPLAYS_NUM=2 `touch test` display_count=`xrandr -d :0 -q | grep ' connected' | wc -l` echo "display count="$display_count echo "display_num="$DISPLAYS_NUM if [ "$display_count" -ge "$DISPLAYS_NUM" ]; then echo "nothing" `gsettings set org.gnome.settings-daemon.plugins.power […]
我目前正在开发一个项目,在USB设备插入时运行用C语言编写的程序。udev规则有可能吗? 当我插入我的设备时,我目前已经运行了一个Hello World脚本。 但是,它运行不止一次。 当前path:/etc/udev/rules.d/98-local.rules 目前的规则: SUBSYSTEMS ==“usb”,ACTION ==“add”,RUN + =“/ usr / local / bin / USB.sh” 脚本path:/usr/local/bin/USB.sh 脚本: #!/bin/bash echo 'Hello World!' >>"/home/<username>/Desktop/udev.out" exit 我试过这样的事情来获得可执行文件的运行: #!/bin/bash usr/games/blackjack exit 在terminal中inputusr / games / blackjack,但在插入USB设备时不起作用。 不过,我知道脚本正在运行,因为我已经将它们组合在同一个文件中,并且已经创build了Hello World。 我也尝试从我的用户帐户运行可执行文件,如下所示: SUBSYSTEMS=="usb", ACTION=='add", RUN+="/bin/su tyler -c '/usr/local/bin/USB.sh'" 但是,这也不起作用。 这是设备权限的问题还是只是不可能运行一个可执行文件? *注意:我已经详细阅读了http://deactivated.net/writing_udev_rules.html中的udev规则解释。