Wie ich meine Toshiba-Linux-Backlight-Probleme gelöst habe

English Deutsch

Symptome:

Ich habe sowohl das Toshiba Z830 als auch das R850 seit einigen Jahren. Auf beiden verwende ich die aktuellen LTS-Versionen von KUbuntu (zum Zeitpunkt der Erstellung dieses Textes 14.04). Obwohl ich absolut zufrieden mit ihnen bin, gibt es ein kleines Problem bezüglich der Hintergrundbeleuchtung:

Beim Start funktioniert die Hintergrundbeleuchtung einwandfrei. Ich kann die Einstellungen mit FN+F6/F7 ohne Probleme ändern. Nach dem Versetzen des Geräts in den Standby und dem Aufwecken zeigt das Drücken der genannten Hotkeys zwar den Prozent-Dialog der Hintergrundbeleuchtung, ändert aber nicht die Helligkeit.

Da die SSD-Neustarts von Ubuntu ziemlich schnell sind, habe ich mich in den letzten Jahren nicht um das Problem gekümmert. Aus Neugier habe ich das Problem heute jedoch erfolgreich behoben.

Zur Ursache der meisten Backlight-Probleme:

Nachdem ich die Foren durchgelesen hatte, fiel mir auf, dass dieses Problem zwar mit dem toshiba_acpi-Treiber zusammenhängt, ein ähnliches Problem aber auch bei anderen Notebook-Marken (wie Thinkpad) auftritt.

Die Linux/Xorg-Kombination unterstützt mehrere Bildschirme gleichzeitig und muss daher mehrere Backlight-Gerätetreiber unterstützen, die gleichzeitig aktiv sind.

Man kann die aktuell aktiven Treiber über sysfs anzeigen, wie hier gezeigt:

ls_backlight.sh
uli@uli-z830 ~ % ls /sys/class/backlight
intel_backlight  toshiba

Das Problem ist nun, dass die Software, die FN+F6/F7-Eingaben verarbeitet (anscheinend werden sie letztendlich an XRandR weitergeleitet), nicht von sich aus weiß, welches das korrekte Gerät für die Einstellung der Hintergrundbeleuchtung ist.

Wie auf der Debian-Mailingliste diskutiert, gibt es einen recht einfachen Regelsatz zur Auswahl des korrekten Backlight-Treibers in Xorg.

Wenn die Hintergrundbeleuchtung für meine Toshiba-Hardware nicht über die Hotkeys geändert werden kann, ist es möglich, die Bildschirmhelligkeit folgendermaßen einzustellen (Root-Berechtigungen erforderlich!)

set_backlight_brightness.sh
root@uli-z830 ~ # echo 2000 > /sys/class/backlight/intel_backlight/brightness

2000 ist — in diesem Fall — ein Wert für mittlere Helligkeit. Der Bereich gültiger Werte ist treiberspezifisch, jedoch ist der Mindestwert immer 0, während der Maximalwert immer der in /sys/class/backlight/intel_backlight/max_brightness aufgelistete ist (natürlich musst du möglicherweise intel_backlight durch den Namen deines Treibers ersetzen, wenn du die Helligkeit eines anderen Backlight-Treibers ändern möchtest).

Bei Toshiba-Notebooks erkennen die Regelsätze der Software, die die Hotkeys verarbeitet, entweder acpi_video0 oder toshiba (siehe unten für den Unterschied zwischen den beiden) als Standard. intel_backlight wäre jedoch der korrekte Treiber.

Obwohl auf der Debian-Mailingliste diskutiert wurde, wo man das lösen sollte, funktioniert es mit KUbuntu 1.40 und einem Vanilla (selbstkompilierten) 3.16-rc5-Kernel nicht out-of-the-box.

Standardmäßig (d.h. bei einer Neuinstallation) scheint es nur den acpi_video-Backlight-Treiber zu geben. Wenn ich den zahlreichen Vorschlägen im Forum oder auf LinLap.coms Z830-Seite folge und acpi_backlight=vendor zur GRUB2-Boot-Befehlszeile hinzufüge (du kannst überprüfen, ob es funktioniert hat, mit cat /proc/cmdline), funktioniert das allein nicht.

Die zentrale Frage ist daher: Wo kann ich den Standard-Backlight-Treiber auf intel_backlight ändern?

Lösung des Problems:

Schritt 1: GRUB2-Befehlszeile korrigieren

EDIT: Dieser Schritt ist nicht zwingend erforderlich, wird jedoch empfohlen.

Obwohl ich nicht sicher bin, ob dies zwingend notwendig ist, um das zugrunde liegende Problem zu lösen, empfehle ich, die GRUB2-Befehlszeile wie auf LinLap.com vorgeschlagen zu ändern.

Aktuell verwende ich die folgende GRUB2-Konfiguration (nur die geänderte Zeile wird gezeigt):

grub_cmdline_example.sh
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop acpi_osi=Linux acpi_backlight=vendor pcie_aspm=force i915.i915_enable_rc6=1 i915.lvds_downclock=1"

Während elevator=noop den Standard-IO-Scheduler ändert, befassen sich die anderen Optionen mit dem ACPI-Backlight-Zeug und erhöhen (laut LinLap.com) die Akkulaufzeit des Z830. Ich habe nicht versucht zu überprüfen, ob die Akkulaufzeit verbessert wurde, da ich bereits eine hervorragende Akkulaufzeit unter Linux habe.

Schritt 2: xorg.conf erstellen

Selbst wenn sie für andere funktionieren könnten, hat der Fix bezüglich /etc/pm/sleep.d/restore_brightness, der auf LinLap.com vorgeschlagen wurde, bei mir nicht funktioniert.

Die hervorragende ArchLinux-Backlight-Wiki-Seite schlägt vor, die Backlight-Option in /etc/X11/xorg.conf zu setzen. Diese Datei existiert jedoch auf aktuellen Ubuntu-Versionen nicht. Wenn sie in deiner Linux-Distribution existiert, kannst du diesen Schritt überspringen.

Zuerst musst du dich als Root an einer Konsole anmelden, die nicht innerhalb von X11 läuft (z.B. mit Ctrl+Alt+F1). Nach dem Stoppen von X11 (ich nehme an, du verwendest kdm als Display-Manager — wenn nicht, ersetze ihn einfach z.B. durch lightdm) erstellen wir xorg.conf.new in /root und verschieben sie dann nach /etc/X11/xorg.conf.

create_xorg.sh
uli@uli-z830 ~ # X -configure #Creates /root/xorg.conf.new
uli@uli-z830 ~ # mv /root/xorg.conf.new /etc/X11/xorg.conf

Wenn dies deinen Display-Manager in irgendeiner Weise beschädigt (d.h. service kdm start funktioniert nicht), lösche einfach /etc/X11/xorg.conf.

Schritt 3: /etc/xorg.conf modifizieren

Wie auf dem ArchLinux-Wiki und auf der Debian-Mailingliste vorgeschlagen, müssen wir nun eine Backlight-Option hinzufügen.

Öffne /etc/X11/xorg.conf mit deinem bevorzugten Editor und finde den Abschnitt Device.

Suche nach der Driver-Klausel in diesem Abschnitt. Ändere sie zu

xorg.conf
Driver      "intel"

In einigen Fällen könnte es bereits intel sein, aber bei meinem Z830-Notebook war es modeswitch. Ohne modeswitch als Treiber wird die Backlight-Option, die wir hinzufügen, nicht erkannt. Bei meinem R850 war intel jedoch bereits gesetzt.

Danach musst du die Backlight-Optionszeile hinzufügen:

xorg_backlight_option.conf
Option "Backlight" "intel_backlight"

Die Position dieser Zeile innerhalb des Treiberabschnitts ist nicht wirklich wichtig — ich habe sie direkt über der Identifier-Zeile platziert.

Nachdem du das getan hast, musst du nur noch deinen Display-Manager neu starten (z.B. service kdm start) (oder einfach neu starten, wenn du faul bist). Dies sollte alle Backlight-Probleme lösen.

Neben der Möglichkeit, die Backlight-Steuerungs-Hotkeys auch nach dem Aufwachen aus dem Standby zu verwenden, habe ich nun nicht nur 7 verschiedene Backlight-Einstellungen sondern 10 (die über die Hotkeys ausgewählt werden können) oder mehr als 4000 (die ausgewählt werden können, indem man einen Wert in /sys/class/backlight/intel_backlight/brightness schreibt).

Hier ist meine vollständig funktionierende /etc/X11/xorg.conf für mein Z830-Notebook als Referenz:

xorg.conf
Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
        ModulePath   "/usr/lib/xorg/modules"
        FontPath     "/usr/share/fonts/X11/misc"
        FontPath     "/usr/share/fonts/X11/cyrillic"
        FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
        FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
        FontPath     "/usr/share/fonts/X11/Type1"
        FontPath     "/usr/share/fonts/X11/100dpi"
        FontPath     "/usr/share/fonts/X11/75dpi"
        FontPath     "built-ins"
EndSection

Section "Module"
        Load  "glx"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
        ### <percent>: "<f>%"
        ### [arg]: arg optional
        #Option     "SWcursor"                  # [<bool>]
        #Option     "kmsdev"                    # <str>
        #Option     "ShadowFB"                  # [<bool>]
        Option "Backlight" "intel_backlight"
        Identifier  "Card0"
        Driver      "intel"
        BusID       "PCI:0:2:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection "Display"
                Viewport   0 0
                Depth     1
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     4
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     8
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     15
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection

Check out similar posts by category: Linux