LEDs/Sync with backlight

From postmarketOS Wiki

Trigger

Actually there is a LED trigger available to turn on/off some LEDs when the backlight goes on/off (link). For usage of LED triggers, see LEDs#Triggers. Though probably it is currently not enabled in most of the kernel configs.

Scripts

If the backlight LED trigger is not available, does not work for some reason or when backlight handling is not yet implemented for the device, there are other ways to achieve such a behaviour.

One approach is having a look on dbus-monitor if some signals or method calls can be used parasitically to turn on/off the LEDs at certain situations. Check the screen blanking/unblanking behavior works best via ssh. For view the session bus, the DISPLAY variable needs to be exportet: DISPLAY=:0 dbus-monitor --session. This is not needed to see the system bus but dbus-monitor --system shows singnals only. To see method calls on the system bus, sudo is required: sudo dbus-monitor --system.

Phosh

When the screen blanks or unblanks, there are some method calls concerning the color manager on the system bus. This can be used to turn on/off the leds. As method calls on the system bus need sudo, the command can be added to visusdo to avoid a password query for the command.

The dbus method call of the color manager unfortunately does not reveal whether the screen was blanked or unblanked. To find out about the state, the sysfs node /sys/class/drm/card0-DSI-1/dpms is queried. You might need to adapt the path according your setup. If your device doesn't provide dpms information, you need to find other ways to query the state of the screen, maybe looking for other dbus signals or method calls.

The example shows turning on/off the leds of tm2-touchkey (used by some samsung devices). To handle the LEDs in the script, the user needs permission to change them, see LEDs#Access_via_sysfs.

If the LEDs you want to use are turned off by default, you need to turn them on at boot. The keys for this example can be found by udevadm info --attribute-walk /sys/class/leds/tm2-touchkey.

  • sudo vi /etc/udev/rules.d/21-tm2-touchkey-leds.rules
ACTION=="add", SUBSYSTEM=="leds", KERNEL=="tm2-touchkey", ATTR{brightness}="1"

Now let's create the script:

  • vi ~/tm2-touchkey-leds-phosh.sh
#!/bin/sh

while true; do
  sudo dbus-monitor --system interface=org.freedesktop.ColorManager | grep -m 0 FindDeviceByProperty
  if [ "$(cat /sys/class/drm/card0-DSI-1/dpms)" = "Off" ]; then
    echo 0 > /sys/class/leds/tm2-touchkey/brightness
  else
    echo 1 > /sys/class/leds/tm2-touchkey/brightness
  fi
done

Make it executable:

  • chmod +x ~/tm2-touchkey-leds-phosh.sh

Add the dbus command to the sudoers file:

  • sudo visudo
## watch ColorManager changes to detect screen blanking
user ALL=NOPASSWD: /usr/bin/dbus-monitor --system interface=org.freedesktop.ColorManager

And create an autostart file:

  • vi ~/.config/autostart/tm2-touchkey-leds-phosh.desktop
[Desktop Entry]
Type=Application
Name=tm2-touchkey-leds-phosh
Exec=/home/user/tm2-touchkey-leds-phosh.sh
X-GNOME-Autostart-Phase=Initialization

Plasma Mobile

Unfortunately, dbus-monitor seems not easily accessible via ssh. This makes it harder to find appropriate signals or method calls that can be used.

Xfce4

See Screen locker:Disable inputs#Xfce4, a more extensive draft script that handles both input and LEDs.