Showing posts with label opensuse. Show all posts
Showing posts with label opensuse. Show all posts

Sunday, 6 October 2024

Screen Brightness

OpenSUSE Leap 15.5 on ThinkPad X250

I used the X250 with older versions of OpenSUSE without major problems at work in about 2016–2019 (well, I never made the headset microphone work, but that’s another story).

When the Covid pandemic started, I got a new laptop at work and let my daughter use the old one. In 2024, she needed a more modern one, so the old X250 returned to me—and it was just in time, as my old Acer TravelMate had just died.

When installing missing software on the X250 and updating its configuration to my twenties’ likings, I discovered the brightness keys didn’t work.

I decided to fix them manually: It should be easy enough to write a script that changes the brightness and bind it to a XF86MonBrightnessDown and XF86MonBrightnessUp, right? The internet advised to use the xbacklight command, but surprisingly, it’s output was unhelpful:

No outputs have backlight property

After some more googling, I discovered /sys/class/backlight/intel_backlight/ which contained two interesting files: max_brightness and brightness. When I changed the value in the latter, it directly affected the monitor brightness.

So I wrote the following script:

#!/usr/bin/perl
use warnings;
use strict;

my $PATH = '/sys/class/backlight/intel_backlight/';

sub load {
    my ($file) = @_;
    open my $in, '<', $PATH . $file or die "$file: $!";
    my $value = <$in>;
    chomp $value;
    return $value
}

my $change = shift;
my $current = load('brightness');
my $max = load('max_brightness');
$current += $change;
if ($current < 0) {
    $current = 0;
} else {
    $current = $max if $current > $max;
}
open my $out, '>', $PATH . 'brightness';
print {$out} $current;
close $out;
exec 'notify-send', '-t', 500, 'Brightness',
sprintf '%d%%', 100 * $current / $max

notify-send comes from the libnotify-tools package, but it also needs some notify daemon to be running. I used mate-notification-daemon.

The next problem was the brightness file was only writable by root. When I ran chmod a+w on it, it only lasted up to a shutdown. I needed something to change the file permissions on every start, so I created a systemd service:

[Unit]
Description=Backlight service
After=graphical.target

[Service]
Type=simple
User=root
ExecStart=/root/bin/backlight-writable

[Install]
WantedBy=graphical.target

And the script contained a simple chmod.

Now I can change the brightness on my X250 by simply pressing a button again.

Saturday, 2 March 2013

Upgrading to openSUSE 12.2 with LXDE.

I upgraded my home computer to openSUSE 12.2. I use LXDE as my desktop environment. So far, I noticed two annoying bugs, but fortunately found workarounds for both of them.

1. It is not possible to logout from LXDE properly. Or, better to say, after the logout, the X server is not restarted. You have to switch to a text console and rerun lxdm manually as root. I was not able to find a simple fix, so I switched to lightdm which does not have the problem.

2. Firefox was showing a warning each time I started it: it was not able to connect to the DBus. After some googling and hacking, I discovered a rather simple solution. Just prepend the following line to your
~/.config/lxsession/LXDE/autostart:

    export `dbus-launch`

Tuesday, 17 January 2012

Farewell, my second hyper thread

I finally updated my desktop from openSUSE 11.2 to openSUSE 12.1. At first sight everything was more or less working, but when switching the machine off, I discovered it cannot be done without manually pushing the case button. All possible combinations of poweroff, shutdown and similar led just to the system halt, but the screen was showing the last messages and the fans were working on. Only the reset button could restart the machine.

The new init environment, systemd, was my first suspect. I started playing with it -- but only to discover only one of my CPUs is enabled (I have D865PERL motherboard with Pentium 4 with hyper-threading) . I identified the acpi=off option in the grub menu and removed the restriction... only to find that I can no longer even boot. The system froze during startup, each time at a slightly different time with a slightly different message (e.g. "BUG: unable to handle kernel initcall acpi_processor_init +0x0/0x100 [processor] returned with preemption imbalance", or "BUG: unable to handle paging request", or "scheduling with atomic", or just plain SIGSEGV or kernel panic).

I tried switching to different kernels (default, desktop, and vanilla), but the behaviour was the same. Even switching to systemv-init did not help.

I am currently running with hyper threading disabled at BIOS level. Therefore, I can boot with full acpi support and turn my machine off. However, I am running only one thread.

Update:
Googling for more information, I stumbled upon this thread:
http://ubuntuforums.org/showthread.php?t=1871247
Using their recommendation, namely adding processor.nocst=1 to boot options, solved the issue. Yay!

Another update:
I bought a new computer. It has an Intel Core i5-2400 chip and boots without problems :-)