Touchscreens on Linux

As I posted before, I’ve been working with a EPIA Mini-ITX with a Touchscreen. But, actually, it wasn’t just one touchscreen. We did configure a few for the same machine and the same system. I’ll tell you how we did just for one (which is kind of tricky) and later what surprise me about those touchscreens…
I though this was a matter of repeat the same steps as I did for the first touchscreen and hook each configuration with each touchscreen depending of their hardware info (vendor and product id, or so), but I got one big surprise with that… I’ll tell you later :-P

Well, the main problem of touchscreens is the calibration. You need to tell to the Xorg the limit of the touchscreen so it can be mapped with the screen. This could be automatic task done by hal, but there isn’t still a automatic tool for that. At least for evtouch driver based touchscreens.

I was playing with the fdi file which came with the evtouch driver to fix the screen, but obviously isn’t a easy task, so I kept googling and I found there was a utility to get the X and Y points and limits. And I felt as a fool when realized that utility was already installed (by the evtouch driver) in my own system… :-(
Anyways, I ran the tool (/usr/bin/calibrate_touchscreen) and I got the max and min X and Y points. Which means the four corners of the touchscreen.
I couldn’t have the utility working properly… It didn’t show me any message or dialog and it didn’t give me a out.txt file with the result, as the doc told me. But I got the X and Y points, so I put them in my fdi own file for “eGalax” touchscreens.
The evtouch driver have one fdi for eGalax, but the properties doesn’t fit at all with my touchscreens, so I copied the file into /etc/hal/fdi/policy/ and I did the changes there.
The fdi files Hal find in that directory overwrites the ones who were installed by the package on /usr/share/hal/fdi/ (or similar if your distribution is nos Debian alike).

You need to restart the Hal service to get the changes and to let the Xorg realize that.

$ sudo /etc/init.d/hal restart

(or similar)

You can test if the changes were made by running the following commands:

$ UDI=$(hal-find-by-capability --capability input.mouse)
$ lshal -u $UDI

Then you’ll probably get something like:

udi = '/org/freedesktop/Hal/devices/usb_device_eef_1_noserial_if0_logicaldev_input'
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input'  (string)
info.parent =
'/org/freedesktop/Hal/devices/usb_device_eef_1_noserial_if0'  (string)
info.product = 'eGalax Inc. Touch'  (string)
info.subsystem = 'input'  (string)
info.udi = '/org/freedesktop/Hal/devices/usb_device_eef_1_noserial_if0_logicaldev_input'
(string)
input.device = '/dev/input/event1'  (string)
input.originating_device =
'/org/freedesktop/Hal/devices/usb_device_eef_1_noserial_if0'  (string)
input.product = 'eGalax Inc. Touch'  (string)
input.x11_driver = 'evtouch'  (string)
input.x11_options.longtouched_action = 'click'  (string)
input.x11_options.longtouched_button = '3'  (string)
input.x11_options.longtouchtimer = '750'  (string)
input.x11_options.maxx = '1912'  (string)
input.x11_options.maxy = '1989'  (string)
input.x11_options.maybetapped_action = 'click'  (string)
input.x11_options.maybetapped_button = '1'  (string)
input.x11_options.minx = '112'  (string)
input.x11_options.miny = '76'  (string)
input.x11_options.movelimit = '10'  (string)
input.x11_options.oneandhalftap_button = '2'  (string)
input.x11_options.rotate = 'ccw'  (string)
input.x11_options.swapy = true  (bool)
input.x11_options.taptimer = '30'  (string)
input.x11_options.touched_drag = '1'  (string)
linux.device_file = '/dev/input/event1'  (string)
linux.hotplug_type = 2  (0x2)  (int)
linux.subsystem = 'input'  (string)
linux.sysfs_path = '/sys/class/input/input1/event1'  (string)

Now Hal know your touchscreen preferences and limits, so Xorg will set up the right values for the cursor and so. If you try to start the X server you’ll see.
It’s possible you have to do the process a few times. The perfect calibration could need it.

But, at this point, I found a new problem: when I rebooted the machine, the cursor gone crazy again… :-(
Well, the thing is the package ‘xserver-xorg-input-evtouch‘ install you a init script for setting the hal parameters from his own conffile (/etc/evtouch/config). This file was generated for the calibration tool (I didn’t know and I haven’t seen still in the doc of the tool…).
The file has something like:

MINX="140"
MINY="55"
MAXX="1888"
MAXY="1975"
X0="-9"
Y0="-588"
X1="391"
Y1="-588"
X2="795"
Y2="3"
X3="-398"
Y3="-298"
X4="-3"
Y4="4"
X5="390"
Y5="300"
X6="-788"
Y6="-2"
X7="-393"
Y7="299"
X8="-4"
Y8="593"

The init script got this values and set up the hal ‘input.x11_options‘ and the script is launched after the hal’s, so it will overwrite any fdi I put in there. But the problem for me is the only values were working for me were the MIN and MAX X and Y. The rest just makes the X server getting lost.

What I did to fix the situation was deleting from the /etc/evtouch/config file everything but the MAX and MIN values and also deleting the input.x11_options for those MAX and MIN values from the fdi file I wrote. The file (the fdi one) was still useful to set up the rotate and more X11 options.

So now I got all the values I need set up and I’m sure no other scripts or services will mess with my configuration.

Ok, now I have the configuration for ONE of the touchscreens, but there are more… What now? well, doing the same process (knowing the issues and taking the sorter way) and figure the way to put the right configuration depending of what touchscreen is plugged.

Ummmmm… I show directives on fdi files to match strings and search for hal properties. I just need to looking for the usb.vendor_id and usb.product_id hal properties to choose which configuration set up. But here was my surprise….
All the touchscreens I have (and more some friends checked out) have the same vendor and product id. All are different and have different calibration values, but all have the same vendor and product id, which let me with no way to know which touchscreen is plugged. At least, by now, I don’t know how to be sure about which one is plugged.
Please, if anyone know how, tell me.

You can make the test if you have one or more touchscreen which work with evtouch driver. Run a ‘lsusb‘ and I almost sure you’ll get this line:

Bus 002 Device 002: ID 0eef:0001 D-WAV Scientific Co., Ltd eGalax TouchScreen

Well, that’s all for today folks. Soon more ;-)

Happy hols for those of you who have Xtmas hols and happy hacking! :-)

Hal-info and Xorg

Lately I’m working on a project at work about installing and setting up a custom Linux distro in a small box (VIA EPIA Mini-ITX) with different touchscreens. Differences because there are going to be several of those box and some will be with one touchscreen and some with other.

The real goal is to run on those little boxes just a X with a java application other group have made. I can’t tell so much about the project because the contract say so… Anyway, that’s interesting stuff to do :-)

My first thought was to use Moblin, a project I’ve already posted about. This project is designed for those kind of products, have a few sets of funcionalities over small distro base and it has a GUI application for building the distro in different formats and even try out via kvm.

All this sounds really cool to me. I knew the project from time ago, but I didn’t pay enough attention to the project (I wanted, but I didn’t find the moment before), so this was good excuse to have a closer look to the project.

The project is nice, with a lot of cool features and a lot of potential, but, actually, it didn’t fit well with my needs. I got to much troubles to get working a very basic Ubuntu based distro where to run the Xorg and the Java application. But now I’m working on fixing some bug and improve the system a bit…

But I needed to finish my tasks, so I took a different approach. Ubuntu Mobile, which was before with Moblin, now they go by their own (or kind of). They got some images already built so I download one and I started to clean things and installing what I needed.

Now we got the distro and the application running, but we’ve still some issues. The worst thing was to set up the Xorg with the Chrome C9 graphic card. We installed first a Ubuntu 8.04 (lpia) based distro and the graphic card didn’t work out the box. But on the Intrepid (Ubunu 8.10) version we got the last openchrome driver, so it did work :-)

If some one is interesting on make it works on Hardy or another distro which has not the last version, we followed a easy good recipe from Ubuntu docs.

But on Intrepid we found some probles with this driver. The first one wasn’t actually this driver’s issue, it was Xorg’s. I mean, I realized on Intrepid Xorg use Hal and hal-info to for setting up itself.

I tried as a fool to configure the Xorg config file on the old fashion way (dpkg-reconfigure xserver-xorg), but the file was still empty…

After googling for a while and read some hal specs, docs and examples I learn a lot a bout hal-info. This is actually a really good stuff.Richard Hughes with his post about it open my eyes about Hal, which I’ve already known but I didn’t know its potential. Which is huge, I think.

If you are interesting on, here you have the git repository:

[via web]

http://cgit.freedesktop.org/hal-info

[cloning the branch]

git clone git://anongit.freedesktop.org/git/hal-info

I have to use this hal-info thing to let hal setting up the touchscreens properly, because, by default the cursor goes crazy. Don’t worry, I’ll post the quirks and the things I’ll learn when I finish the work :-)

BTW, more interesting stuff here, on quirks docs:

http://people.freedesktop.org/~hughsient/quirk/index.html

Enjoy Hal and hal-info :-)

bad weather, but still parkour

As I told you on a previous post, I’m starting to practice parkour, thanks to one friend who really pratices this from time ago.

But now the weather is quiet bad. Ar east for me, at least for practicing parkour. It’s kind of dangerous to jump and run over wet floors, steps, walls, and so.

We were about to go out to run on weekend, but was rainning, so we didn’t. I was with some friends in a funky concert, which was also fun, so wasn’t bad weekend after all ;-)

Funk gruop called La Mula
Funk group called La Mula

Anyways, I was reading info about parkour. Techniques, trainings, moves and so. And also watching lots of videos and movies to learn the flow.

I watch movies like District 13, a not very remarkable action movie, but for the moves and runs of David Belle, known for being one of the father of parkour. The guy is really amazing…

And I found stuff to read on Parkourpedia, from where I got some pdfs with good stuff about techniques and how to start. Nice :-)

The good thing of parkour is that you can practice anywhere and when you start to feel the philosophy behind the discipline, you see all the places and things as part of your playground. So you beginning to see the obstacles, not as so, but as things you can overcome and ways to pass through :-)

Ok, I just start, but it’s not very different of the free and urban climb I used to do time ago. I still remember that time where I wasn’t seeing walls, but ways to climb up, neither buildings, but things and place where climb around… I use to feel free on those moments… Really zen moments :-)

The next week I go to Gran Canaria (my real place :-) ) and I guess there will be a better weather and I will practice more.

Anyways, even today, when I was frozen waiting fro the train to come home from work, I was playing some moves to work out my balance and precision (and, actually, to keep me a bit more warm…).

Well, I’ll tell you my progress and things I learn. I hope you enjoy as much I do :)

Why just one DVCS?

There are a lots of flame wars out there about the best DVCS (Distributed version control system), like others (IMHO) ego wars (KDE vs GNOME, VIM vs EMACS, etc). There are very good options like git, mercurial, bazaar or darcs and many people (as GNOME is doing right now with all the survey thing).

Even in my company, we were (actually, we’re already) discussing about the right one for our day by day at work. We’re almost sure to adopt a good dvcs is better than our well known Subversion, but we don’t know the best option.

We could follow the typical technical reasons people usually does, but we must also pay attention to other (more practical) reason. For example, we develop linux distributions (mostly) based on Ubuntu, so that tell us we should use bazaar to make easy clones, branches, merges and any kind of tasks in order to collaborate.

But, in other hand, we work with rails. Rails and projects around use git intensively, so makes sense to use git as well.

And we also work with other projects which still use subversion or even others systems.

After think about the best possibility it’s clear for me that choose just one makes no sense at all. We can choose one for working internally, but we’ll still have to deal with with other system we work or collaborate with.

Our major project is the technical level and background of the people here is very heterogeneous. We got very geek guys and people who just got out from the university and don’t know to much about real life tools…

So, we need something with learning curve small enough to normal people could just use the dvcs and good enough to use in professional projects.

But I really think the best way, at last, is to learn the basics of each one (of the most common ones), use internally just a good one, but bring to the people the way to use whatever they want or need for each project. I think John is right about that… why to choose for the people? Let’s people decide by themselves.

I was talking with Alberto about this and we agree (didn’t we? :-P) that to have a kind of interface which makes abstraction about which dvcs is below and gives us compatibility between them, probably is better than try to push people to one or another system just because we think is the best.

There ar to much big (and little ones) projects which have already chosen git, bazaar, mercurial or other and are very happy with their decision to just change because someone say so…

I don’t think to expect that is very realistic…

I know this is possible and we as open source and free software people doing all the time: make open standards, communication APIs, and abstractions layers. I don’t see more complex than a lot of projects (GNOME itself) does al the time.

I think I will sum myself to the John’s count he is meaning to do something similar :-)

Hello Planet Gnome

Hi GNOME lovers! :-)

Finally I arrived on this planet. The one I follow and enjoy every day.

I’ve just came by to say hello and thanks you all the time you share with us, the people who are no so hacker and no so good writer, but who enjoy and learn every day thanks to you.

I’m planning to post about distros (Debian or Ubuntu based mostly), GNOME, moblin, DVCS and any sort of free software stuff which cross my mind. Well, I like to share a new activity I’m trying: parkour, with you. So, if you are interested on those subjects, you’ll be welcome to be around.

Also I like to say I’m not good English writer, so I apologize if your eyes cry blood because of my mistakes. Feel free to tell me when I’m wrong.

Thanks guys. See you soon :-)

Mercurial 1.1 is out

2 day ago was released the last version of Mercurial (HG). The changes look great :-)

Some changes:

General:

  • Added ‘resolve’ command for better tracking of in-progress merges
  • Several speedups for status and diff commands (especially on Windows)
  • Some modules have been rewritten in C for greater speed
  • Compatibility with Python 2.6 2
  • Add some buffering to the templater
  • Better documentation on git diffs

    Web interface:

    • Add a canvas-based repository graph
    • New and improved hgweb themes: paper, coal and monoblue
    • paper is now the new default style; the old default is now called ‘spartan’
    • Better WSGI compliance
    • Collections now show nested repos (best used without a checkout)
    • diffs are more sensible, follow diff.git settings
    • Better alternative for repository collections

      Commands:

      • resolve: new command to help keep track of merges
      • merge: only implicitly select same-branch heads
      • export: append instead of overwrite when exporting multiple changesets
      • bundle: added support for different compression types
      • rollback: clean up empty files
      • tag: without a checkout, use tip as the tagging revision’s parent
      • log: allow searching by user (with -u)

        Extensions:

        • rebase: new extension to support rebasing changesets
        • bookmarks: new extension to provide (local-only) git-like branches
        • zeroconf: new extension to support publishing repositories through Zeroconf/Bonjour
        • convert: added support for conversion from bzr repositories
        • color:
          • add colorization of diffs
          • add –color options to many commands
        • bugzilla: added support for Bugzilla 3.0

        See the full Release Notes for more info.

        BTW, we’ve just created a public personal (and for groups and free software projects) mercurial repositories at Emergya (at last!) :-)

        Here mine with some silly repos:

        http://hg.emergya.info/~jojeda

        Enjoy! ;-)

        Moblin – Linux on mobile devices

        I found this project (I did remember to have read about it before, but I didn’t pay so much attention) browser into the o-hands‘ website. I use to check each some time their projects, I like them :-)

        Well, moblin is an interesting project from Intel, defined by them as:

        “Moblin’s architecture is designed to support multiple platforms, such as Netbooks and Mobile Internet Devices (MIDs), and various embedded usage models, such as In-Vehicle Infotainment (IVI) systems. Most of the software stack is a platform and usage model-independent layer we call “Moblin Foundations,” that provides one uniform way to develop applications for such usage models. Below the Moblin Foundations layer are the Linux Kernel and device drivers specific to the platform. On top of the Moblin Foundations layer are the specific applications, user interfaces, and user interaction models for the target device.”

        Actually they have a lot of work done about different parts of a Linux distribution for mobile devices. No just for the intel processors ones, but other small devices.

        They have tools for building the distro (with pyGtk UI), user interfaces based on clutter, support for fedora and ubuntu based distros and some stuff more.

        I more interesting on the user interface thing (I use to think and chat a lot with my good friend Alberto about better user experience) and the building system. The building system is called moblin-image-creator (a.k.a. MIC).

        I’m very interesting on this MIC because I know well the building systems (I wrote myself some before. For Metadistros, Guadalinex, etc) and I was working with the ones from Debian, Ubuntu, Knoppix, Morphix, Linux-Live and more. I like that stuff.

        And it pretty interesting this one and his approach, so I like to help as much I can. By now I just send some patches which fixed some minor (but some times blocker) bugs and I’m doing the Spanish translation for the GUI. But I think the system need some improvement and some help the go smooth.

        I’m trying to use it for a project at work, that’s why now I become more interested on it. I need to set up a very small distro for a small VIA processor device. I just meet to run a Java (with GUI) application there, so I tried to fit into the distro the less software is possible to run over the X the java application.

        I got some problems with the MIC building that distro, because there was some issues with Ubuntu based distros, with virtualisation (I haven’t before the machine, so I had to run on kvm the images for testing) and some more. But I fix some of them and I’ll trying to fix the other as soon as posible (I need it for my project).

        But, actually, I’m using MIC and working on it, no just for my work’s project, but because I like the project :-) I see it interesting and with a lot of posibilities and I like to bring the experience I’ve adquired during all these years to help the project.

        I hope I can find time enough for that… :-/

        Well, I got my bugzilla account, I join in the project, in the mail list, I create my git clone of the their repo to work in the project easily, so I’m ready to fight :-)

        Anyone else? ;-)