Posts mit dem Label tablet werden angezeigt. Alle Posts anzeigen
Posts mit dem Label tablet werden angezeigt. Alle Posts anzeigen

14.02.2011

Yet another bugfix release (for tablet-mode)

I'm sorry! I broke it again! Shame on me!
As You might have noticed, upon upgrading from an older version of tablet-mode the upstart job disappears magically and the automatic screen rotation stops working. I failed to notice the postrm script during the last bugfix. This nasty little thing (which I wrote myself, shame even more!) deletes the upstart job when the package is removed. This is neither necessary nor useful, as it is also called when the package is upgraded, effectively breaking the automatic screen rotation.
You problably won't be surprised when I tell You what You need to do. Remove and reinstall. Just as in the last article. Make sure to grab the newest version (1.5.3), upgrading from there should finally work as expected.
I'm really sorry.

08.02.2011

Bugfix for tablet-mode

As usual, there's a bugfix for tablet-mode shortly after there was a new version with a new feature. I'm sorry, but I messed up some things again. If You find Yourself with a broken package (something's not working), You might want to purge the package and re-install the latest version (this should be 1.5.1 or higher!). Unfortunately, a simple update from an earlier version might not fix everything, as the configuration files (in /etc) are not re-installed correctly. In order to purge and reinstall the package, do the following (as root).
Code:
$ apt-get purge tablet-mode
$ apt-get update
$ apt-get install tablet-mode
You should check Your /etc/tablet-mode/tablet-mode.conf to make sure that all entries are correct.

That's it! You're done!

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!

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 :)

13.11.2010

Fred.deb

Update: There is a note on bugs at the end of the article.

Yay, I forged my first package! And I got my own PPA (personal package archive) at Launchpad!
The first package I made is based on my article on screen rotation. It contains the script itself (an improved version), the upstart script to map the keycodes and a configuration file (/etc/tablet-mode/tablet-mode.conf) to centrally configure the needed values.
Here's what You need to do if You want to use it (You need root access for most of the tasks):
  1. Add the PPA to Your sources:
    Code:
    add-apt-repository ppa:fredfredfred/ppa
  2. Refresh Your package list:
    Code:
    apt-get update
  3. Install the package:
    Code:
    apt-get install tablet-mode
  4. As told in the message during installation, You need to take a look at the configuration file, /etc/tablet-mode/tablet-mode.conf. Either use the comments from the file or have a look at my first article on this subject to find out the values You need. The values provided in the sample should work on an HP TouchSmart tm2-1090eg notebook, You only have to uncomment the last 2 lines to enable the keycode:scancode mapping upon system start.
  5. Bind the scan codes to rotatescreen tableton and rotatescreen tabletoff, as described in the other article.
That's it! You're done!

Bugs: If You turn the screen, put it down and then hibernate Your laptop, turn the screen back and power it back on, the screen is upside down as is the tablet orientation. I will not fix this, since I cannot. Upon resuming from suspend, there is no way for me to check which position the display is in. Use the console commands rotatescreen tableton and rotatescreen tabletoff to switch between the modes manually (or use the GUI).

05.11.2010

Automatic screen rotation on HP touchsmart notebooks

Update 3: Apparently the python script which is advertised on some sites got more attention than it had when I first read about it and has even been set up as a Launchpad project. The huge CPU overhead has been taken care of (it's now event-based) and it supports more than just one laptop model. I haven't tried a new version of the script, but I guess it does the job just as fine as my script does (I can't tell which script is better). Feel free to test out both ways, I'd be happy to hear of some comparisons!

Update 2: There's a new article on this topic. I've managed to build a package out of the stuff I wrote here and made it available in my Launchpad PPA. It should be much easier to just install and configure it than to follow this whole guide. Here's the direct link to the article:
http://linuxquirks.blogspot.com/2010/11/freddeb.html

Update: According to feedback, this solution is not yet guaranteed to work, even for similar laptops. Feel free to test it and report any errors (helps me a lot), though. I will try to create an installable package out of all this, but this will take some time.

As I wrote in an earlier article, I possess an HP touchsmart tm2-1090eg notebook whichcan be turned into a tablet PC. Since the automatic screen rotation is not working out-of-the-box on Ubuntu and since I couldn't get the rotate-screen-button on the right side of the display to work yet, I've been getting by with a hand-written script. I wrote a Tcl/Tk program which uses xrandr and xsetwacom to rotate the screen according to my wishes.
By request of Felix, the first person to write a comment to this blog :), I looked into possibilities to automatically rotate the screen upon turning the display. I thought that since I managed to write an ACPI handler for CPU frequency scaling depending on the status of the power supply (there will be a post on this, too), I might give it a try. And guess what? I did it!
Unfortunately, my first guess was wrong. Turning around the display and putting it on top of the keyboard didn't create any ACPI events. However, I noticed some strange noise on dmesg:
atkbd serio0: Use 'setkeycodes e058 ' to make it known
atkbd serio0: Unknown key pressed (translated set 2, code 0xd9 on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e059 ' to make it known.
atkbd serio0: Unknown key released (translated set 2, code 0xd9 on isa0060/serio0).

Hell yes, dmesg even told me what to do! Here's what I did:
  1. Find out the scan code - turn the display, put it down, pull it back up and inspect the messages:
    Code:
    $ dmesg
    There should be some messages like the ones I received. The first one is the key code from putting down the display, the second one is the code from pulling it back up.
    Note: If You don't get any messages like those, chances are that Your kernel already knows the keys. Try to bind something to them using the GNOME "Keyboard Shortcuts" or see if they generate key events by using xev.
  2. Find out which key code is available for mapping. There's no patented way for doing this. I just tried out some codes and looked what the GNOME "Keyboard Shortcuts" called the code. For me, the codes 220 and 221 worked well, since there is no button issuing these codes.
  3. Create an upstart script to set the keycodes on system startup. Setting the codes is not persistens, so You have to do it after each reboot. Use an upstart script to accomplish the job. As root, create a file /etc/init/tablet-mode.conf and put something like this inside:
    Code:
    # tablet-mode
    #
    # Map key codes to the scan codes emitted by the display when putting it down on
    # the keyboard.

    description "Tablet PC mode"
    author "Frederik Möllers"

    start on local-filesystems

    script
        setkeycodes e058 220
        setkeycodes e059 221
    end script
  4. Create a program to rotate the screen. Basically You just need to use xrandr to rotate the screen and xsetwacom to turn the tablet orientation. You can also use my Tcl/Tk program (requires wish to run, install the package if You want to use it) which also offers a GUI to use manually. Put the following code in a file (e.g. /usr/local/bin/rotatescreen, make it executable and You can call it with rotatescreen tableton and rotatescreen tabletoff. It not only turns the display and the tablet orientation but also disables the touch mode. This prevents the cursor from jumping around when You write with the stylus and touch the display with Your hand. Of course, You can customize the Tcl/Tk program to fit Your wishes. Even if You're not experienced in Tcl or Tk, the syntax should be quite easy. So here's the code:
    Code:
    #! /bin/bash
    #\
    exec wish "$0" "$@"

    proc rotate_0 {} {
       exec xrandr --output LVDS1 --rotate normal
       exec xsetwacom --set 11 rotate NONE
       exec xsetwacom --set 12 rotate NONE
       exec xsetwacom --set 13 rotate NONE
    }

    proc rotate_90 {} {
       exec xrandr --output LVDS1 --rotate left
       exec xsetwacom --set 11 rotate CCW
       exec xsetwacom --set 12 rotate CCW
       exec xsetwacom --set 13 rotate CCW
    }

    proc rotate_180 {} {
       exec xrandr --output LVDS1 --rotate inverted
       exec xsetwacom --set 11 rotate HALF
       exec xsetwacom --set 12 rotate HALF
       exec xsetwacom --set 13 rotate HALF
    }

    proc rotate_270 {} {
       exec xrandr --output LVDS1 --rotate right
       exec xsetwacom --set 11 rotate CW
       exec xsetwacom --set 12 rotate CW
       exec xsetwacom --set 13 rotate CW
    }

    proc touch_on {} {
       exec xsetwacom --set 11 Touch on
    }

    proc touch_off {} {
       exec xsetwacom --set 11 Touch off
    }

    proc quit {} {
       destroy .
       exit
    }

    if {$argc > 0} {
       switch "[lindex $argv 0]" {
          "0" {
             rotate_0
          }
          "90" {
             rotate_90
          }
          "180" {
             rotate_180
          }
          "270" {
             rotate_270
          }
          "tableton" {
             rotate_180
             touch_off
          }
          "tabletoff" {
             rotate_0
             touch_on
          }
          default {
             puts "Cannot rotate [lindex $argv 0] degrees!"
          }
       }
       exit
    }

    wm title . "Screen rotation"
    wm geometry . +605+300
    frame .deg
    button .deg.0 -text "0°" -command "rotate_0; quit"
    button .deg.90 -text "90°" -command "rotate_90; quit"
    button .deg.180 -text "180°" -command "rotate_180; quit"
    button .deg.270 -text "270°" -command "rotate_270; quit"
    pack .deg.0 .deg.90 .deg.180 .deg.270 -in .deg -pady 3 -side top
    frame .touch
    button .touch.ton -text "Touch on" -command "touch_on; quit"
    button .touch.toff -text "Touch off" -command "touch_off; quit"
    pack .touch.ton .touch.toff -in .touch -pady 3 -side top
    button .cancel -text "Cancel" -command "quit"
    pack .deg .touch .cancel -pady 6 -side top
    bind . "rotate_0; quit"
    bind . "rotate_90; quit"
    bind . "rotate_180; quit"
    bind . "rotate_270; quit"
    bind . "quit"
    bind . "quit"
    bind . "quit"
  5. Bind the keys to the program using GNOME "Keyboard Shortcuts" (or the equivalent for Your desktop manager). Create a binding with the command rotatescreen tableton and one with the command rotatescreen tabletoff and set the bindings by turning Your display, putting it down and pulling it back up.

Thanks again to Felix who told me to search for a way. I had already given up on this and didn't think I would find a way to get the screen rotation to work automatically.

That's it! You're done!

28.08.2010

Ubuntu on a tablet computer

I installed Ubuntu on my new HP TouchSmart tm2-1090eg laptop. It has a cool tablet function (including a pen). Using the pen works out-of-the-box with Ubuntu 10.04. However, using the thumb-button as a right mouse click, does not. Another flaw is that the pressure curve of the pen (the curve which describes the way the default pressure on the tablet is translated into pressure of brushes in the gimp or whatever) sucks really hard. It's like an on-off-switch, but has nothing to do with pressure. Here is how to fix both things:
  1. Fix the thumb button: Edit the file /usr/lib/X11/xorg.conf.d/10-wacom.conf and in the first InputClass-Section, add the Option:
    Code:
    Option "Button2" "3"
  2. For the pressure curve, edit the same file and add something to the same section. Try out the following options (restarting X every time to see the effect) and choose the one You like the most:
    Code:
    Option "PressCurve" "0,75,25,100" # softest
    Option "PressCurve" "0,50,50,100"
    Option "PressCurve" "0,25,75,100"
    Option "PressCurve" "0,0,100,100 # linear (default)"
    Option "PressCurve" "25,0,100,75"
    Option "PressCurve" "50,0,100,50"
    Option "PressCurve" "75,0,100,25 # firmest"
    For interested users: The numbers describe a bezier curve and You can also change the values of the options via the command-line-tool xsetwacom. By using xsetwacom, the changes take effect immediately, but will be reset upon machine reboot (or driver reload).
Another side note: I managed to get the thumb button working like in Windows (only acts as right click if held down and then pressing the pen on the screen), but I don't know how and I didn't manage to save that behavior. If You know how to do this, tell me!
That's it! You're done!