ThinkPad HDD Led

Bei einigen (vielleicht auch allen) neueren ThinkPad Modellen verzichtet Lenovo darauf eine HDD-Led zu verbauen. So zum Beispiel bei meinem ThinkPad Edge E540.

Wer es wie ich gewöhnt ist, auf diese Led zu schauen, wenn der Rechner mal träge oder gar nicht reagiert, wird diese sicherlich irgendwann vermissen.

Unter Linux ist es zum Glück recht einfach, die Led anzusprechen, die Bei diesen Modellen als 'I-Punkt' des ThinkPad Schriftzuges fungiert.

Diese ist als Gerät unter dem Pfad: /proc/acpi/ibm/led zu finden.

Ein kurzes cat /proc/acpi/ibm/led liefert auch direkt, wie man diese ansprechen soll:
status: supported
commands: on, off, blink ( is 0-15)

Nun brauchen wir nur noch ein Script, welches Festplatten aktivität überprüft und die Led blinken lässt, sobald sich auf der Platte was tut.

An diese Aktivität kommen wir per:
cat /proc/diskstats
Die 1. und die 5. Spalte liefern uns die gesamten Lese und Schreibzugriffe auf die Festplatte(n). Ändern sich diese also, soll die Led blinken.

Ein Python Script, welches genau das tut findet ihr in meinem GitHub-Repository (tp-hdd-led.py).

das ganze sieht so aus:

#!/usr/bin/python
import time


led = "0"


def on(file):
    file.write(led + " on")
    file.flush()


def off(file):
    file.write(led + " off")
    file.flush()


def blink(file):
    file.write(led + " blink")
    file.flush()


def get_val(line):
    a = line.strip(' ').split(' ')
    for x in range(a.count('')):
        a.remove('')
    return a


def blink():
    with open("/proc/acpi/ibm/led", "w") as l:
        off(l)
        time.sleep(0.4)
        on(l)
        time.sleep(0.1)


if __name__ == "__main__":
    i = ''
    while True:
        with open("/proc/diskstats", "r") as s:
            time.sleep(.1)
            s = s.read()
            if s != i:
                blink()
            i = s

Nun muss das Script nur noch beim Systemstart geladen und ausgeführt werden. Da ich Arch Linux als meine Distribution verwende und diese auf systemd setzt, habe ich ein entsprechendes Service-File erstellt:

[Unit]
Description=Enable ThinkPad LED as HDD LED
DefaultDependencies=true
Wants=graphical.target

[Service]
ExecStart=/usr/share/tp-hdd-led/tp-hdd-led.py

[Install]
WantedBy=multi-user.target

Für Arch-Linux steht die komplette Lösung im AUR zur Verfügung: tp-hdd-led.

Nach der Installation aus dem AUR kann das Script per:
systemctl start tp-hdd-led
gestartet und per:
systemctl enable tp-hdd-led
automatisch beim Systemstart geladen werden.