Chuwi Hi 8 Installing and Using Linux

This procedure will wipe all data on the device

This guide uses NixOS, hovewer, this can be repeated with almost any Linux distribution.

Creating the installation media

As outlined on the main page, this device has a 32-bit BIOS, which is a problem if you want to install a 64-bit system. To get around this we are going to create a custom installation media, which boot a 64-bit system on a 32-bit bootloader.

To do this, install NixOS the regular way, except using the flash drive as the hard drive. But you must set boot.loader.grub.forcei686 for the system to be bootable. You may also want to enable Wi-Fi is you don't have a USB network card.

Booting

Plug in a USB-OTG adapter with a USB hub into the tablet. Use it to plug in a keyboard, flash drive and an ethernet adapter.

Install your system any way you like (on-device, nixos-anywhere, etc.). You don't have to add anything at this stage as the system will boot even without any drivers, though you should set the kernel to "Linux 6.1" to avoid unnecessary downloads later.

I also recommend adding 1-2 GB of swap space, as the RAM here is quite limited.

Adding the drivers

We'll need to add 3 components for the tablet to fully work:

These derivations and a configuration using them can be found in my nixos-config repository

Calibrating the touchscreen

There're several ways to configure a touchscreen on Linux, but the most universal one is through libinput, which supports both X11 and Wayland.

libinput usually requires to enter the calibration values manually, but a tool is available to generate them automatically xlibinput_calibrator, hovewer, it can only be ran on X11 (The values it generates can be used anywhere).

  1. Start an X11 session

  2. Install and launch xlibinput_calibrator

  3. Press the crosses as precisely as you can (repeat the test multiple times and average the numbers for more precision)

  4. Create the following udev rule

    SUBSYSTEM=="input", ENV{ID_PATH}="platform-80860F41:03", \
    ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1", \
    ENV{LIBINPUT_CALIBRATION_MATRIX}="<calibration>"
    

    (The ID_PATH variable way be different. You can obtain it with libinput list-devices)

    An example of how to do this on NixOS can be found in the previously mentioned repository.