当我插入和拔出交流适配器时,我试图在 udev 的帮助下更改一些设置,但似乎无法让它运行。我正在运行 ubuntu 15.04,这是我得到的:
sudo systemctl status udev ● systemd-udevd.service - udev 内核设备管理器 已加载:已加载(/lib/systemd/system/systemd-udevd.service;静态;供应商预设:已启用) 活跃:自 lör 2015-05-02 20:28:42 CEST;2 小时 3 分钟前开始活跃(运行) 文档:man:systemd-udevd.service(8) 手册:udev(7) 主 PID:293(systemd-udevd) CGroup:/system.slice/systemd-udevd.service └─293 /lib/systemd/systemd-udevd
agni%ls-l /etc/udev/rules.d/50* -rw-r--r-- 1 root root 122 maj 2 20:25 /etc/udev/rules.d/50-kappa.rules
这是规则所包含的内容,我尝试了几种不同的方法,但这是目前的内容,据我了解,它应该有效
猫/etc/udev/rules.d/50-kappa.rules 动作==“更改”,子系统==“power_supply”,运行+=“/usr/local/bin/power-change.sh true”
以及应该运行的脚本
ls -l /usr/local/bin/power-change.sh -rwxr-xr-x 1 根根 255 maj 2 17:24 /usr/local/bin/power-change.sh
猫/usr/local/bin/power-change.sh 设置_ac(){ echo -e "$(date)\nAC CONNECTED" > /home/kempe/test2.txt } 设置蝙蝠() { echo -e "$(date)\nAC DISCONNECTED" > /home/kempe/test2.txt } 案例 $1 真)set_ac;; 假)设置蝙蝠;; *)退出1;; 埃萨克 出口 0
这就是我为让它运行而做的尝试,但没有成功
sudo udevadm control --reload #无效 sudo udevadm trigger # 无效果 sudo reboot #无效:)
udevadm 监视器--属性 监视器将打印接收到的事件: UDEV - udev 在规则处理后发出的事件 KERNEL - 内核 uevent KERNEL[816.963544] 更改 /设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 (power_supply) 行动=改变 DEVPATH=/设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 电源名称=ADP1 电源在线=0 序列号=2847 子系统=电源 UDEV [816.966150] 更改 /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 (power_supply) 行动=改变 DEVPATH=/设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 电源名称=ADP1 电源在线=0 序列号=2847 子系统=电源 USEC_INITIALIZED=6963257 KERNEL[817.171654] 更改 /devices/virtual/backlight/mba6x_backlight (背光) 行动=改变 DEVPATH=/设备/虚拟/背光/mba6x_backlight 序列号=2848 源=sysfs 子系统=背光 UDEV [817.174385] 更改/devices/virtual/backlight/mba6x_backlight (背光) 行动=改变 DEVPATH=/设备/虚拟/背光/mba6x_backlight 序列号=2848 源=sysfs 子系统=背光 SYSTEMD_WANTS=systemd-backlight@backlight:mba6x_backlight.service 标签=:systemd: USEC_INITIALIZED=8174
如果我直接从终端运行脚本,它可以正常工作,所以没有问题
/usr/local/bin/power-change.sh true agni%cat /home/kempe/test2.txt -e lör 2015 年 5 月 2 日 23:06:52 CEST 交流电连接
有什么建议么?
答案1
#!/bin/sh ... 我的朋友,hashbang 在哪里?
脚本中缺少 hashbang:
udev 不会在任何活动终端上运行这些程序,也不会在 shell 上下文中执行它们。请确保您的程序已标记为可执行,如果是 shell 脚本,请确保它以一个合适的 shebang (例如 #!/bin/sh),并且不要期望任何标准输出出现在您的终端上。
来源: 编写 udev 规则
另一种方式,调用它
/bin/sh
ACTION=="change", SUBSYSTEM=="power_supply", RUN+="bin/sh /usr/local/bin/power-change.sh true"
我花了大约两个小时错误地寻找规则中发生了什么。这对我来说也是一个教训。
顺便说一句,您可以调试和测试您的 udev 设置。
sudo udevadm test /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1