Patch based on From e0d856dd48d640f3d95efe7b769edec02373cc74 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 16 Oct 2013 02:51:24 +0200 Subject: [PATCH] rules: don't limit some of the rules to the "add" action Devices should show up in systemd regardless whether the user invoked "udevadm trigger" or not. Before this change some devices might have suddenly disappeared due issuing that command. and also on From 1a0464230c08506c3fd715ff7cc56660df3a85ca Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 11 Oct 2013 07:45:32 +0000 Subject: Add support for saving/restoring keyboard backlights Piggy-backing on the display backlight code, this saves and restores keyboard backlights on supported devices. The detection code matches that of UPower: http://cgit.freedesktop.org/upower/tree/src/up-kbd-backlight.c#n173 https://bugs.freedesktop.org/show_bug.cgi?id=70367 [tomegun: also work for devices named "{smc,samsung,asus}::kbd_backlight"] --- rules/99-systemd.rules.in | 10 ++++++---- src/backlight/backlight.c | 7 +++++-- 2 files changed, 11 insertions(+), 6 deletions(-) --- rules/99-systemd.rules.in +++ rules/99-systemd.rules.in 2014-02-14 14:46:48.358235397 +0000 @@ -51,14 +51,16 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_dev ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name" -# Pull in backlight save/restore for all firmware backlight devices +# Pull in backlight save/restore for all backlight devices and +# keyboard backlights -ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" +SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service" +SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service" # Asynchronously mount file systems implemented by these modules as # soon as they are loaded. -SUBSYSTEM=="module", KERNEL=="fuse", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" -SUBSYSTEM=="module", KERNEL=="configfs", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" +SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" +SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" LABEL="systemd_end" --- src/backlight/backlight.c +++ src/backlight/backlight.c 2014-02-14 15:20:47.534298128 +0000 @@ -56,9 +56,11 @@ int main(int argc, char *argv[]) { errno = 0; device = udev_device_new_from_subsystem_sysname(udev, "backlight", argv[2]); + if (!device) + device = udev_device_new_from_subsystem_sysname(udev, "leds", argv[2]); if (!device) { if (errno != 0) { - log_error("Failed to get backlight device: %m"); + log_error("Failed to get backlight device '%s': %m", argv[2]); r = -errno; } else r = log_oom(); @@ -66,7 +68,8 @@ int main(int argc, char *argv[]) { goto finish; } - if (!streq_ptr(udev_device_get_subsystem(device), "backlight")) { + if (!streq_ptr(udev_device_get_subsystem(device), "backlight") && + !streq_ptr(udev_device_get_subsystem(device), "leds")) { log_error("Not a backlight device: %s", argv[2]); r = -ENODEV; goto finish;