Please add touchscreen support for Microsoft Surface Go 3 (ELAN9038 / I2C-HID) in ZimaOS

Hello IceWhale / ZimaOS team,

I am running ZimaOS v1.7.1 on a Microsoft Surface Go 3 and would like to request support for its built-in touchscreen.

The display works perfectly with Weston and Chromium, but the integrated touchscreen is not detected.

Hardware / software

  • Device: Microsoft Surface Go 3

  • ZimaOS: v1.7.1

  • Kernel: 6.18.9

  • Display: eDP-1, 1920×1280

  • Touch controller: ELAN9038:00

  • ACPI ID: ELAN9038

The touchscreen controller is detected on the I²C bus:

i2c-ELAN9038:00

Its ACPI information is:

MODALIAS=acpi:ELAN9038:PNP0C50:
SUBSYSTEM=i2c

However, no driver is attached to this device.

Kernel configuration

The current ZimaOS kernel reports:

CONFIG_I2C_HID=m
# CONFIG_I2C_HID_ACPI is not set
# CONFIG_HID_MULTITOUCH is not set

The corresponding i2c-hid-acpi and hid-multitouch kernel modules are also absent from ZimaOS 1.7.1.

As a result, the ELAN9038:00 device exists on the I²C bus but does not appear as an input device and is not detected by libinput.

Request

Could you please consider adding Microsoft Surface Go 3 touchscreen support to ZimaOS?

It appears that enabling the standard Linux I²C-HID ACPI and HID multitouch support may provide the required driver chain:

CONFIG_I2C_HID
CONFIG_I2C_HID_ACPI
CONFIG_HID_MULTITOUCH

I am using the Surface Go 3 as a touchscreen kiosk, so having the built-in touchscreen working would allow me to operate the system without a physical keyboard.

I can provide additional diagnostic information, kernel logs, hardware information, or testing results if required.

Thank you for your work on ZimaOS and for considering support for the Surface Go 3.

Hi, thanks for sharing the detailed hardware information and diagnostic results.

I’d like to confirm your setup: are you running Chromium through Weston to display the ZimaOS WebUI on your Surface Go 3, and looking to control that interface directly using the built-in touchscreen?

I’ve reviewed the relevant kernel configuration and can prepare a test build with the required touchscreen drivers. However, ZimaOS does not currently provide a built-in on-screen keyboard, so even with touch working, tasks such as logging in or entering text may still require a physical keyboard. Are you aiming for a completely keyboard-free setup? What tasks would you mainly like to perform using touch?

If you’re interested in testing, please email me at lvzhiyuan@icewhale.org with your ideas, requirements, and current Weston and Chromium configuration. I can prepare a dedicated ZimaOS test image for your Surface Go 3 so you can verify touchscreen functionality, and we can investigate any remaining issues based on your feedback.

Hello,

I am running ZimaOS 1.8.0-alpha2 on a Microsoft Surface Go 3 with Weston 14.0.2 and Chromium 153 in a Docker container.

I am trying to use Squeekboard 1.43.1 as an on-screen keyboard.

Squeekboard starts, but fails with:

ERROR: No virtual keyboard manager Wayland global available.

I checked the ZimaOS system and found:

  • /usr/libexec/weston-keyboard is present and launched by Weston.

  • No zwp_virtual_keyboard_manager_v1 implementation is present.

  • No zwp_input_method_v2 implementation is present.

  • Weston is configured with:
    [input-method]
    path=/usr/libexec/weston-keyboard

My question is:

What is the officially supported way to provide a Wayland virtual keyboard for Chromium on ZimaOS 1.8.0-alpha2 / Weston 14.0.2?

Does ZimaOS provide a Weston plugin, package or configuration for zwp_virtual_keyboard_manager_v1, or is another virtual keyboard solution recommended?

I would prefer not to modify or replace the ZimaOS Weston installation without knowing the supported method.

Thank you.

Hi Eric,

Thank you for the additional feedback.

The Squeekboard error points to a Wayland protocol compatibility issue. Weston 14.0.2 does not implement the virtual-keyboard-v1 and layer-shell interfaces required by Squeekboard. These cannot be enabled simply by changing weston.ini.

First, could you confirm whether the built-in touchscreen now works for tapping, swiping, and navigating the WebUI after installing the test build? This will help us distinguish the touch input results from the on-screen keyboard issue.

For the on-screen keyboard, I suggest first testing the existing weston-keyboard. Please keep your current configuration so Weston launches it:

[input-method]

path=/usr/libexec/weston-keyboard

Then add these two options to the actual Chromium launch command inside your container:

--enable-wayland-ime

--wayland-text-input-version=1

Keep your existing --ozone-platform=wayland and --kiosk options. Fully exit and restart Chromium, then tap a webpage text field and check whether the keyboard appears and allows you to enter and delete text. These additional options explicitly select the text-input protocol supported by Weston 14.

Please also check which shell Weston is using. In this version, desktop-shell.so supports the keyboard input panel, while kiosk-shell.so does not provide the same support. If you are using the latter, please test with desktop-shell.so. Chromium can still run fullscreen with --kiosk.

The test build includes Weston’s own keyboard, but we have not yet validated it with your Chromium kiosk setup, and Squeekboard support has not been integrated into this version.

If the keyboard still does not work, please send your complete weston.ini, Chromium version and container launch configuration, and relevant Weston logs. I’ll help investigate further.

Thank you for your patience and testing!

Hi Pidan,

Could you please share the download link again for the ZimaOS 1.8.0-alpha2 image you provided for the Microsoft Surface Go 3?

I’m currently using this alpha2 version because it enables touchscreen support on my Surface Go 3, unlike the official ZimaOS 1.8.0 beta2.

I can no longer find the original download file. Could you please provide a new download link?

Thank you for your help!

Hello,

I’m following up on my previous request regarding the virtual keyboard on my Microsoft Surface Go 3 running ZimaOS.

Thanks to your previous assistance, the virtual keyboard is now working in Chromium and allows me to enter text in Homepage, available at http://192.168.1.89:3000.

However, there is one remaining issue: the virtual keyboard uses the QWERTY layout, and I would like to switch it to the French AZERTY layout.

Here are the technical details of my current setup:

  • Device: Microsoft Surface Go 3

  • OS: ZimaOS

  • Display compositor: Weston 14.0.2

  • Virtual keyboard executable: /usr/libexec/weston-keyboard

  • Current /etc/xdg/weston/weston.ini configuration:

    [input-method]
    path=/usr/libexec/weston-keyboard
    
  • The French XKB layout files are present under /usr/share/X11/xkb/.

  • The environment variable XKB_DEFAULT_LAYOUT=fr is passed to both Weston and the weston-keyboard process, but the keyboard still uses QWERTY.

I also tried setting the French layout in the Weston configuration, but this did not change the keyboard layout.

Could you please advise me on the officially recommended way to configure the Weston virtual keyboard to use French AZERTY on ZimaOS?

Should a specific Weston parameter or weston-keyboard configuration be used, or would you recommend another virtual keyboard compatible with your environment?

I would like to keep the current touchscreen, Chromium and Homepage setup working without risking the display configuration.

I can provide configuration files and startup logs if needed.

Thank you for your help.

Best regards