Sub-12-Inch Notebooks from Fujitsu-Siemens Lifebook range

By today's standards all off these look bulky. They are way over 2cm thick, and have wide borders around the actual display. Heck, the 10.6" p7230's footrint is not even smaller than that of most modern 12" notebooks. Somewhat less wide, but higher. The p1510/p1620 are smaller, though. Weighing around 1.2kg/1.1kg they not really light either.
Performance ranges from bad (core2duo) to abysmal (pentium m), even compared to modern Atom processors. Oh, and many (most) modern (even cheap) Netbooks have much better displays, with full HD and IPS.
But then, the cases are very sturdy and well made. The keyboards are really nice to type with. The p1510/p1620 even have Trackpoint (i call that a plus, but ymmw).

Fujitsu-Siemens Lifebook p7230

  • Chipset: Intel 945GM / Core Solo U1400 (CPU) / GMA 950 (GPU)
    • Intel PRO/Wireless 3945ABG (WiFi a/b/g, Bluetooth V2.0)
    • SigmaTel STAC9228 (Sound)
    • Marvell Yukon 88E8055 (Gigabit Ethernet)
    • Ricoh Co Ltd RL5c476 II (CardBus), R5C552 (FireWire), R5C822 (Card reader), R5U870 (Webcam)
    • AuthenTec Inc. AES2501 (Fingerprint sensor)
  • RAM: 2*1024 MB DDR2 533MHz (max)
  • Display: 10.6" WXGA (5:3, 1280x768) LED TFT, semi-glossy
  • Storage: 1.8" PATA (PC Card-style) Toshiba MK6006GAH
  • Storage: 5.25" proprietary bay (optical drive or 2nd battery)
  • Connectors: 2 * USB 2.0, Firewire, VGA, Headphone (S/PDIF), Mic, CardBus, SD Card, Docking Port
  • Other: Card Reader (SD, MMC), Webcam, Fingerprint sensor

Fujitsu-Siemens Lifebook p1510

  • Chipset: Intel 915GMS / Pentium M ULV 753 (CPU) / GMA 900 (GPU)
    • Intel PRO/Wireless 2915ABG (WiFi a/b/g)
    • RealTek ALC203 (Sound)
    • Realtek RTL8139 (Fast Ethernet)
    • Ricoh Co Ltd RL5c476 II (CardBus), R5C822 (Card reader)
    • AuthenTec Inc. AES2501 (Fingerprint sensor)
  • RAM: 1*512 MB DDR2 533MHz microDIMM
  • Display: 8.9" WXGA (5:3, 1024x600) CCFL TFT, matte
  • Storage: 1.8" PATA (PC Card-style) PC Card to CompactFlash Adapter: WD SiliconDrive II 16GB
  • Connectors: 2 * USB 2.0, VGA, Headphone, Mic, CompactFlash, SD Card, Docking Port
  • Other: Fujitsu Serial Touchscreen

Fujitsu-Siemens Lifebook p1620

  • Chipset: Intel 945GMS / Core 2 Duo U7600 (CPU) / GMA 950 (GPU)
    • Intel PRO/Wireless 3945ABG (WiFi a/b/g)
    • Realtek ALC262 (Sound)
    • Marvel Yukon 88E8055 (Gigabit Ethernet)
    • O2 Micro OZ711SP1 (CardBus, Card reader)
    • AuthenTec Inc. AES2501 (Fingerprint sensor)
  • RAM: 1*1024 MB DDR2 533MHz microDIMM
  • Display: 8.9" WXGA (5:3, 1280×768) LED TFT, gloss
  • Storage: 1.8" PATA (ZIF) IDE ZIF to MSATA Adapter: Vaseky V800/128G, 912XKR
  • Connectors: 2 * USB 2.0, VGA, Headphone, Mic, CardBus, SD Card, Docking Port
  • Other: Fujitsu Component USB Touch Panel

Why such dinosaurs in 2k20?

I like the form factor, its more square (less wide but higher) than modern (sub)notebooks. Although it might use up a higher volume of space its often easier to fit into small bags and backpacks.
The Linux support is near perfect, much in contrast to (most) Atom based systems. Those often lack sound or video acceleration or WiFi.
And they are sturdy, have good keyboards. And a design i actually like. The battery is exchangeable. It has VGA, Ethernet and Headphone connectors as well as a docking port (not to mention Cardbus and Firewire). And i can fit an extra battery in the optical drive bay.
And its cheap. And that is important: i don't have to care about it. It can break, get lost or stolen and i don't really have to care.

Linux compatibility

Very good. Everything i tested so far worked flawlessly and out of the box with:
  • Artix Linux (Kernel 4.19.88 LTS) on the p1620
  • Arch Linux 32 (Kernel 4.19.23) on the p7230 (also OpenBSD)
  • SlackWare (Kernel 4.4.202) on the p1510

Suspend to RAM seemed to be stable on all of them, and the power consumption is ok (for what it is).
Not tested so far:
  • CompactFlash Slot on the p1510 Slot with anything but a Flash Card
  • SD Card reader with anything but SD cards. SDHC works fine.
  • Modem
  • Suspend to disk
  • Docking port

Touch Screen on the p1510

Needs to be initialized:
inputattach -fjt /dev/ttyS0

Note that the inputattach version from slackware does not work, i had to compile linuxconsoletools myself.
And it has to be calibrated:
Section "InputClass"
	Identifier   "calibration"
	MatchProduct "Fujitsu Serial Touchscreen"
	Option       "Calibration" "92 4020 110 4009"

I really do not remember how i optained those calibration values. Maybe xinput_calibrator (although its not installed, but eh), or maybe just try and error.

Touch Screen on the p1620

The Panel does not appear until after X is running form some seconds (not the faintest). Thus normal methods of calibration fail. I wrote a little script:

echo -n "Waiting for touch device to appear"
while ! xinput | grep "Touch Panel Pen" &> /dev/null; do
        echo "."
        sleep 1

echo "Oh hey! There it is!"

xinput set-prop 16 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
xinput set-prop 16 "Coordinate Transformation Matrix" 1.06666660308837890625 0 -.02624994913736979166 0 1.11411996309114024669 -.08534818541953944941 0 0 1

I got the calibration values using xinput_calibrator. Its output is in the wrong format. I found a script somehwre that does the transformation.

Tablet mode

In tablet mode, the screen is ofted used rotated. A handy little tool, x11-touchscreen-calibrator, deals with the necesarry coordinate transformation of the touchscreen. Sadly, its made for capacitive touchscreens, which do not need to be calibrated. Thus, it does a uni transformation, ignoring existing transformations. Here is hacky patch which loads existing transformations at startup. I intend to later polish it up and to a pull request. For now, it works:
diff --git a/x11-touchscreen-calibrator.c b/x11-touchscreen-calibrator.c
index d988266..46def0b 100644
--- a/x11-touchscreen-calibrator.c
+++ b/x11-touchscreen-calibrator.c
@@ -51,11 +51,68 @@ static char* preferred;
 static char* touch_screen;
 static int deviceid;
+float basem[9] = {0};
+int basem_loaded = 0;
 static const char* white_list[] = {
+static int laod_matrix(Display *dpy, int deviceid)
+    Atom prop_float, prop_matrix;
+    union {
+        unsigned char *c;
+        float *f;
+    } data;
+    int format_return;
+    Atom type_return;
+    unsigned long nitems;
+    unsigned long bytes_after;
+    int rc, i;
+    prop_float = XInternAtom(dpy, "FLOAT", False);
+    prop_matrix = XInternAtom(dpy, "Coordinate Transformation Matrix", False);
+    if (!prop_float)
+    {
+        fprintf(stderr, "Float atom not found. This server is too old.\n");
+        return EXIT_FAILURE;
+    }
+    if (!prop_matrix)
+    {
+        fprintf(stderr, "Coordinate transformation matrix not found. This "
+                "server is too old\n");
+        return EXIT_FAILURE;
+    }
+    rc = XIGetProperty(dpy, deviceid, prop_matrix, 0, 9, False, prop_float,
+                       &type_return, &format_return, &nitems, &bytes_after,
+                       &data.c);
+    if (rc != Success || prop_float != type_return || format_return != 32 ||
+        nitems != 9 || bytes_after != 0)
+    {
+        fprintf(stderr, "Failed to retrieve current property values\n");
+        return EXIT_FAILURE;
+    }
+    for (i = 0; i < 9; i++) {
+        basem[i] = data.f[i];
+    }
+    XFree(data.c);
+    basem_loaded = 1;
+    return EXIT_SUCCESS;
 void search_touchscreen_device(Display *display)
     XIDeviceInfo     *info  = NULL;
@@ -66,15 +123,29 @@ void search_touchscreen_device(Display *display)
     info = XIQueryDevice(display, XIAllDevices, &ndevices);
     for (i = 0; i < ndevices; i++) {
         dev = info + i;
         for (j = 0; j < dev->num_classes; j++) {
             touch = (XITouchClassInfo*) dev->classes[j];
-            if (touch->type == XITouchClass && touch->mode == XIDirectTouch) {
+            if (/*touch->type == XITouchClass*/strcmp(dev->name, "Fujitsu Component USB Touch Panel Pen (0)")==0 && touch->mode == XIDirectTouch) {
                 if (touch_screen) free(touch_screen);
                 touch_screen = strdup(dev->name);
                 deviceid = dev->deviceid;
+                if(basem_loaded==0) laod_matrix(display, deviceid);
@@ -197,6 +268,7 @@ typedef struct Matrix {
 static void show(float m[])
+    return;
     int i, j;
     for (i = 0; i < 3; i++) {
         for (j = 0; j < 3; j++) {
@@ -247,7 +319,12 @@ static int apply_matrix(Display *dpy, int deviceid, float m[])
         return EXIT_FAILURE;
-    for (i = 0; i < 9; i++) data.f[i] = m[i];
+    for (i = 0; i < 9; i++) {
+        data.f[i] = m[i];
+    }
     XIChangeProperty(dpy, deviceid, prop_matrix, prop_float,
                      format_return, PropModeReplace, data.c, nitems);
@@ -431,9 +516,16 @@ void scaling_full_aspect_mode(Display *display)
     float m2[9] = {0};
     multiply(zoom2, shift2, m2);
+    float mx[9] = {0};
+    multiply(m1, m2, mx);
     float m[9] = {0};
-    multiply(m1, m2, m);
+    multiply(mx, basem, m);
     apply_matrix(display, deviceid, m);

Note that the patched x11-touchscreen-calibrator has to be started after the calibration was made!

Finding HDDs

The p7230 as well as the p1510 use a pretty rare form factor for their HDD: 1.8" in a case similar to PC-Cards. The interface is standard IDE/PATA, but the connector is more similar to a PC-Card. Most 1.8" PATA drives have either a ZIF connector or the more common small 44 pin IDE connector. The original 80GB TOSHIBA MK8007GAH in th p7230 (which mine was missing) is genuine unoptanium. Some older IPods seem to have the same format, and drives are plenty and cheap, ranging from 10GB to 60GB (i do not own one, so i never tested if those work). Later i got two p1510 with drives. One is now in the p7230 and works well there.
The only adapters for this odd Format that i could find where for CompactFlash Cards. Most of those have abysmal writing performance (some expensive ones might do better, but my SanDisk Ultra one did not).
Oh, and to make things worse: the optical drive in the p7230 is PATA, but connected to the chipsets SATA port via a SATA-PATA bridge. In 2019, i could find no PATA/PATA drive bays, only PATA/SATA. But using one of those is slow and buggy. Apparently SATA/PATA/SATA conversion does not work well.
The best i could find where "WD SiliconDrive II" CompactFlash Cards, which have really impressive ratings and are not too expensive. They are out of production and where only made up to 16GB, but used ones where sometimes on eBay for a decent price (at least in 2019, Germany). I got one of those for my p7230, but now use it in the one working p1510.
The p1620 is better in this regard, as it uses 1.8" drives with a much more common ZIF connector. For which, for example, MSATA Adapters are a thing.
Path: 17.913, Handler: 1.106, Options: 11.882, Content: 15.241, Template: 0.034, Render: 9.929