07.02.2011

New feature for tablet-mode!

As You might have notices (or if not, I'm gonna tell You now anyway), there are 2 updates for tablet-mode. Version 1.5.1 ist out. Version 1.5.0 fixed some package-internal things (particularly with the config file and the postinst script) and introduced a new feature. Thanks to Nicolò's comment, the new tablet-mode package gives You the possibility to turn off Your laptop's touchpad (that mouse-replacement, not the touchscreen) when entering tablet mode (e.g. when putting Your screen onto Your keyboard). According to him, this should fix the crazy pointer movements some people might have experienced when not turning it off. After updating the package, You should have a look at the configuration file /etc/tablet-mode/tablet-mode.conf and check if the options are set they way You want them to be.
So that was the first update. What about the second? Turned out I messed up a script (again) so the postinst script would not insert the right values into tablet-mode.conf upon updating. I corrected that and everything should be working again.
Just update by the usual means.

That's it! You're done!

06.02.2011

Yet another cpufreq update

The title says it all. I've found another bug in my cpufreq package broke the ACPI handler. The script tried to execute /usr/local/bin/cpufreq which of course doesn't exist if You installed my packge. I've changed it to execute cpufreq which gives You the possibility to put a custom version of the cpufreq script into /usr/local/bin and which is then executed instead of the package version. If you stay with the packaged version, it will of course execute that.
I recommend You install the update as soon as it's available. As always, report any bugs You might find!

02.02.2011

cpufreq update

I've released version 1.1.0 of my cpufreq package. It fixes numerous bugs, including the one that made the upstart job not work at all. Unfortunately, version 1.0.0 is so broken that You can't just update to 1.1.0. The old version will break the update and You'll end up with essential files missing. Due to this, I've made it impossible to upgrade from 1.0.0 to any other version. In order to get the new version, You will have to remove (or purge) the old version first, e.g. with apt-get:
Code:
$ apt-get purge cpufreq

After that, You are safe to install the new version (make sure to update Your package list, first!):
Code:
$ apt-get update
$ apt-get upgrade cpufreq

I'm sorry for the troubles this may have caused You (or will cause You during the update). As far as I can judge, it will not happen again with this package. I fixed the control files to prevent deleting files that are being installed by a newer version of the same package (in fact, they don't delete anything anymore).

In addition to the bugfixes, I've included a configuration file: /etc/default/powersave. Using that file, You are able to control the behavior of the ACPI handler and the upstart job. You can specify which CPU governors to install and You can disable each of them completely. I hope this compensates You for the pain the bugs caused :)

A side note here: The package will not remove any files in /etc when being removed normally (not purged). The upstart job and the ACPI handler will stay, but they won't do anything, since the cpufreq executable is not present. If You want to delete those files, purge the package (called "Mark for Complete Removal" in Synaptic) or delete them manually.

Another side note: When future upgrades are being installed, You might be asked if You want to keep some configuration files or install the "package maintainer's" (that's me) version. If You haven't changed the file in question and are unsure, it's best to install the new version, since it may contain bugfixes or new features (although You shouldn't be asked if You didn't change the file).

Since this problem seems to be fixed (report any bugs that persist or came up, please!), I will focus on the package to switch the graphics card now. Stay tuned for more!

That's it! You're done!

24.01.2011

Power saving for the win!

Update 2: I've released a new version of the package that fixes numerous bugs and brings new features. Since updating requires some special care, it's best to check out the new article on this before trying to do anything manually.

Update: Apparently the startup script doesn't work correctly yet. Upon system boot, the governor is set to performance, probably after my script set it to ondemand or powersave. I'm currently looking into this and will release an update as soon as possible. Until then, You can either set the governor manually after logging in, You can remove my package, or You can turn the ondemand init-script back on:
Code:
update-rc.d ondemand enable
The latter method will set the governor to ondemand on system startup. This is not as good as powersave if You're running on battery, but it's still better than performance.


I'm happy to announce the second package in my PPA! cpufreq has joined the ranks of tablet-mode and is ready to be downloaded!

It's basically nothing else than a packaged version of my article on CPU governors and the power supply status. It has a few more checks (if certain nodes on the sys filesystem exist) and now also displays a list of available frequencies. If You want to increase the running time of Your laptop on battery, I recommend You get it while it's hot!

As of now, the package requires absolutely no configuration (as long as some things on Your system work the same way they do on mine) and if You should encounter any problems, just drop by, leave a comment or write me a mail. I'll try to fix it as soon as possible.

To install it, add the PPA to Your APT sources and update Your package list (as described here). After that, install it via synaptic or the console:
Code:
apt-get install cpufreq

Congratulations! You can now pull the plug and Your system automatically changes to the powersave governor! In addition, You can use cpufreq to change the governor manually on the command line (see the man page for details).

That's it! You're done!

17.01.2011

2 new packages to come!

Here's a small announcement:
I will probably create a package for automatic CPU frequency scaling based on my article here. From what I read in the forums where this blog was posted, there are many people (especially those new to Ubuntu) who have problems or difficulties setting up and installing scripts. The package will thus contain the script, the ACPI handler and the upstart job. This is nothing more and nothing less than I already posted in the article, but will of course be much easier to install and update. I hope the package will be useful for many people and I would be very happy about any feedback on this topic (there are visitor statistics available for me concerning the blog, but unfortunately there's no download counter for my PPA).
Another package I'm currently working on is based on the post about switchable graphics. It will contain a small graphical (also usable without a GUI) program which is able to switch the graphics card between the integrated (less power consuming) Intel card and the discrete (more powerful) ATI card. It will of course still restart the X server upon changing the card as there is currently no way to circumvent this. Personally I have little use for such a program (as I don't really need the graphical power of the ATI card in Linux), but I think it might be come in handy once in a while and may be even more useful for other people. As for the first announced package, I would be very happy about any feedback concerning this.

09.12.2010

Update to tablet-mode

Update: I've released yet another version of the package. It fixes the same bug as described below again (but now it really works! ;) ). The problem was a variable substitution in the Tcl "switch" statement (and some other flaws that I somehow didn't notice before). Version 1.4.0 is available via my Launchpad PPA and can be downloaded by the usual means.


I've released a new version of my tablet-mode package (see my article on my PPA if You don't know what I'm talking about).
Yesterday I wanted to use my notebook as a tablet and noticed that the touch function was not turned off as it was supposed to be. It turned out that the IDs of my Wacom devices (finger, stylus, eraser) had changed and were no longer the ones I had in my /etc/tablet-mode/tablet-mode.conf. Today I checked again and they were back to normal. Now to not have You change the values in the configuration file every now and then (and then have You change them back again shortly after), I changed the behavior of the script so that it does no longer require numeric IDs in the configuration but rather requires string identifiers like "Wacom ISDv4 E3 Pen stylus". It then looks up the corresponding numeric IDs by itself every time it is run.
Another problem that I fixed was that the script didn't even use the values from the configuration file at all. Due to a wrong variable name, the finger device always had the same numeric ID, no matter what You had in Your config file. The result was that when the device had another ID than 11 on Your system, the touch function was not turned off when entering tablet mode and the touch device was not rotated when rotating Your screen.
So, if You have the package installed, just update to the latest version and if not, You can safely install it :)

05.12.2010

Screen brightness

Changing the screen brightness can extend the battery life by a considerable amount, so this a quite important thing concerning laptops. Unfortunately, that functionality is broken. On my laptop with Ubuntu, I am unable to change the display brightness by the usual means. The buttons do create a reaction, but that reactions merely consists of the GNOME Power Manager displaying a notification with a bar that changes. Nothing happens to my display.
Additionally, every time I press one of the keys, that bar increases or decreases by two steps instead of one. So when I keep the button pressed for about 4-5 seconds, that notification keeps blinking for about 10-15 seconds before finally disappearing.
And now the good part: I found a solution :)
I managed to get the brightness keys working. I am able to change the brightness by an arbitrary amount upon a key press, yet so far I was unable to make that annoying notification disappear.
Thanks to some post in some forum (unfortunately I remember neither the author nor the forum), I got to know the location of a node on the /sys filesystem where the brightness can be changed by echoing numbers into it.
(Note: You need root access to write files in /etc/acpi/).
  1. Create a script to be executed upon pressing one of the brightness keys. Mine is named brightness.sh and is placed in /etc/acpi/.
    Code:
    #! /bin/bash

    # pressing the buttons generates 2 events, so we need to ignore one
    if [ "$2" != "LCD" ]
    then
        exit 0
    fi
    # get brightness
    CURRENT_BRIGHTNESS="$(sudo setpci -s 00:02.0 F4.B | tr "[a-z]" "[A-Z]")"
    # to upper case
    CURRENT_BRIGHTNESS="$(echo "$CURRENT_BRIGHTNESS" | tr "[a-z]" "[A-Z]")"
    # add/substract 16
    case "$3" in
        "00000086")
            OP="+"
            ;;
        "00000087")
            OP="-"
            ;;
        *)
            exit 0
    esac
    NEW_BRIGHTNESS="$(echo "obase=16;ibase=16;$CURRENT_BRIGHTNESS $OP 10" | bc)"
    # check boundaries
    if [ "$(echo "ibase=16; $NEW_BRIGHTNESS < F" | bc)" -eq 1 ] then     NEW_BRIGHTNESS="F" elif [ "$(echo "ibase=16; $NEW_BRIGHTNESS > FF" | bc)" -eq 1 ]
    then
        NEW_BRIGHTNESS="FF"
    fi
    # set brightness
    setpci -s 00:02.0 F4.B=$NEW_BRIGHTNESS
    The script changes the brightness in steps of 10. You can change this amount by changing the number in line 23 (NEW_BRIGHTNESS=...). The brightness is a number between 0 and 255 and is read and saved as a hexadecimal number (0 to FF).
  2. Make the script executable.
    Code:
    $ chmod +x /etc/acpi/brightness.sh
  3. Create an ACPI event handler to execute the script upon pressing one of the brightness keys. I called it brightness and placed it in /etc/acpi/events/.
    Code:
    # /etc/acpi/events/brightness
    # Calls /etc/acpi/brightness.sh to change screen brightness upon key press
    # Author: Frederik Möllers

    event=video
    action=/etc/acpi/brightness.sh %e
  4. Make acpid reload its configuration for the changes to take effect.
    Code:
    $ reload acpid

When pressing Your brightness keys, You display brightness should change now. The bar will still appear and display something wrong and will probably annoy You, but I haven't found out yet how to kill that thing. If it's not working, You can try to check wether the ACPI events are the correct ones (the script reacts on video LCD 00000086 00000000 and video LCD 00000087 00000000 - acpi_listen can tell You what events are generated by Your keys) and wether the call to setpci does the operation on the right card (lspci is Your friend, Your intel onBoard graphics card should have ID 00:02.0). If Your system has different values, just change them in the script and feel free to tell me so I can generalize the script and put a note on that here.

Warning: Never set Your brightness to 0! This is not only useless (You can't see anything because a value of 0 really means to completely turn off the light panel), but it will also kill Your system, forcing You to do a hard reset. You will be unable to change the brightness back to a positive number, even if You enter the correct command blindly. My script will not do this, but if You want to tinker around for Yourself, always keep this in mind!

That's it! You're done!