Fixing: systemd-backlight fails to start [SOLVED]
So, for years now, some of us have been plagued with this nagging systemd-backlight services failure that's mostly benign. But, anytime you run
systemctl status you'd be returned with a status of
degraded because this silly systemd-backlight service was just not wanting to cooperate. For most of us, it simply failed to store out backlight brightness level after reboot. But other's have had more serious issues.
I've seen this issue crop up on multiple linux distributions in various forms. So, be clear, it was affecting me on Linux Manjaro (most recently). I have an MSI laptop, with an AMD Ryzen CPU and AMD Radeon GPU. As well, my backlight has always worked and been fully adjustable.
The only negative side effect I suffered was that my system would never remember my brightness settings across a restart. Which is not really a problem at all, in fact, it's been helpful more than once. But, others have not been so lucky. So, here's how you fix this annoying bug.
You're going to need to edit two different files, as you'll see during remediation, there's more than one problem going on here. First and foremost, if you're seeing the
systemd-backlight@backlight:acpi_video0 status failed lets start by attacking that issue.
I'm not certain, but the bug tracker sounds like it's a race condition during discovery, that is solved if you specify your acpi_backlight module at boot. This is what worked for me.
So, lets open
/etc/default/grub in our favorite editor and find the line
acpi_backlight kernel option by adding
acpi_backlight=vendor. Please note, there are three possible options here:
native. If one doesn't work for you, you'll have to try the others. For my
amdgpu vendor worked for me, which is where I ran into another issue.
Coming back to that, after you've saved your changes, go ahead and run
update-grub and reboot. Hopefully, this fixes your issue. For me, I started seeing errors with
It was telling me I had an invalid
Type variable in my systemd file.
To fix this, I edited the
/usr/lib/systemd/system/systemd-backlight@.service file and changed the line
Type=oneshot. And whala! No more errors. Now when I run
systemctl status it always returns running.
Check here for some scripts that might work for you, if you want a more comprehensive solution (provided that your issues match the problem mentioned here, mine did not).
Note that one other thing I did was to quit relying on KMS (sigh), as it's been causing me other race conditions at boot. So, I added graphics module to
/etc/mkinitcpio.conf. If you're using something like a hybrid setup that requires bumblebee or what not, I do not recommend this. But, I specified on the
MODULES=(amdgpu). And of course ran
mkinitcpio -g afterwards and reboot.
It was depressing for me, personally. Because I've always had to deal with that Intel+Nvidia bumblebee cluster fuck. And I was greatly looking forward to letting KMS do it's thing. But, race conditions are hard to nail down and I'm not going to be annoyed until someone gets around to it.