[systemd-commits] rules/99-systemd.rules.in src/backlight

Tom Gundersen tomegun at kemper.freedesktop.org
Fri Oct 11 03:57:59 PDT 2013


 rules/99-systemd.rules.in |    4 +++-
 src/backlight/backlight.c |    7 +++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

New commits:
commit 1a0464230c08506c3fd715ff7cc56660df3a85ca
Author: Bastien Nocera <hadess at hadess.net>
Date:   Fri Oct 11 09:45:32 2013 +0200

    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"]

diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
index bbb7d0c..20edffb 100644
--- a/rules/99-systemd.rules.in
+++ b/rules/99-systemd.rules.in
@@ -51,9 +51,11 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:
 
 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 firmware backlight devices,
+# and keyboard backlights
 
 ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
+ACTION=="add", SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
 
 # Asynchronously mount file systems implemented by these modules as
 # soon as they are loaded.
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index 9b2eada..f22deed 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -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;



More information about the systemd-commits mailing list