The State of Linux on My Chuwi Hi12 - October 2016

| Comments

I knew running Linux on my Chuwi Hi12 tablet would be a challenge. I did my research before ordering the Chuwi tablet, and things weren’t looking too promising when my tablet arrived at my door early in August.

Most Linux distros would boot up just fine, but most of the hardware that makes my convertible Chuwi Hi12 tablet interesting just didn’t work yet. The touchscreen didn’t work. The Wi-Fi didn’t work. The sound didn’t work.

Chuwi Hi12 Running Xubuntu 16.10

Even back then, I think you could shoehorn in a working Wi-Fi driver. That would at least leave you with a functional laptop. I didn’t buy a laptop. I bought a tablet, and a tablet without a touchscreen isn’t much of a tablet.

Too long; didn’t read!

I’ll talk about most of this at length, but I’m sure most of you are just here for the highlights.

What works:

  • GPU / Display / Manual rotation
  • HDMI Audio (untested)
  • Touchscreen
  • Keyboard dock and touchpad
  • MicroSD slot
  • USB ports
  • Lid sensor
  • Wi-Fi
  • Active Stylus

What doesn’t work:

  • Sound
  • Cameras
  • Accelerometer
  • Bluetooth (untested)
  • Suspend / Resume
  • Power and volume buttons
  • Battery and AC status
  • MicroSD slot

Other problems:

  • X.org eats CPU after manual screen rotation (XFCE problem?)
  • Goodix touchscreen module sometimes needs to be unloaded and reloaded at boot

Wi-Fi and HDMI audio don’t work out of the box on Ubuntu 16.10. The power button was working when I installed Xubuntu 16.10, but it isn’t anymore. I haven’t figured out what change caused it to stop functioning.

UPDATE: My power and volume buttons are being recognized once again. I caused the problem by unloading and reloading the Goodix touchscreen kernel module. I was able to correct the problem by adding a delay before reloading the module. This is an odd problem, but at least it works!

UPDATE: Using a MicroSD card has been problematic, and it seems to have gotten worse over time. It got to the point where there was less than a 50% chance of my SD card working on each reboot. I decided to wipe out Windows 10 and move my home directory to the built-in flash. Since this change, I have been able to suspend and resume over and over again without any issues.

What works on Linux?

Ubuntu 16.10 has made a lot of progress. The touchscreen works—most of the time. Sometimes I need to rmmod and modprobe the goodix module when the tablet boots up. That was simple enough to automate at each reboot!

The GPU works fine, and the 2160x1440 display is detected automatically. The dock’s keyboard and touchpad work as expected. The USB ports work, and the Micro-SD reader functions correctly most of the time. I have my home directory on an SD card, and I have managed to lock up the tablet by hammering on it hard enough. The Micro-SD reader has been acting flakier and flakier. I finally ended up wiping the Windows 10 partition, and for the time being I won’t be using the SD card.

I had to compile a new Wi-Fi driver for the rtl8723bs chip. You can clone the driver from GitHub and compile it yourself. The directions are quite clear, but if you aren’t comfortable with this sort of thing, you should check out the builds from Linuxium. They have Ubuntu install media that includes their patched kernel, or you can just install their kernel on your existing Ubuntu installation.

You also have to change the mode of the Wi-Fi chip to PCI. It can be found in the BIOS under Chipset -> South Bridge -> LPSS & SCC Configuration -> SSC SDIO Support.

Chuwi Hi12 BIOS

The Chuwi HiPen is mostly functional. It works as a high-accuracy pointing device, and the edge of my palm doesn’t trigger the touch screen. However, the buttons don’t seem to trigger any events.

What doesn’t work on Linux?

There’s quite a bit of important stuff that doesn’t work on Linux yet. The most important missing feature for me is sound. The Linuxium kernel is patched to support sound over HDMI, but there is currently no support for the on-board Intel sound chip. The Chuwi Hi12 and Chuwi Hi10 both use the same sound chip as the Surface 3, and work seems to be progressing there. I hope that work will spill over to our inexpensive tablet soon!

Neither of the cameras work. I don’t find that to be a big loss; I don’t use them anyway.

Suspend and resume is flaky. I can resume from suspend successfully once. If I suspend a second time, I can’t get the Chuwi Hi12 to wake up. This wouldn’t bother me much on a laptop, but it is an extreme annoyance on a tablet.

If I’m not using a MicroSD card, then suspend and resume works reliably.

AmazonBasics 11.6 inch bag

The accelerometer doesn’t work yet. I believe a driver exists, but it doesn’t work yet. I set up a simple script that watches for the keyboard dock. If the tablet is in the dock, I force the screen to landscape mode. When the tablet is removed from the dock, it switches to portrait. This isn’t an ideal solution, but it has me covered 99% of the time.

Unfortunately, once the screen is rotated, X.org runs away and consumes tons of CPU. It doesn’t noticeably impact performance, but I bet it is eating up my battery.

Speaking of battery, Linux can’t yet read the charge state of the battery. I have no idea how much juice is remaining, so I’ve been making it a habit to plug in whenever I can.

Hacking around the lack of accelerometer

I added a udev rule to create a symlink called keyboard_dock when the Chuwi Hi12 is plugged into the keyboard dock. This gives my little daemon script something to watch for.

/etc/udev/rules.d/keyboard.rules
1
ACTION=="add", ATTRS{idVendor}=="258a", ATTRS{idProduct}=="6a88", SYMLINK+="keyboard_dock"

Here is my kludge of a daemon script. It uses inotify to watch the /dev/ directory. When the keyboard dock changes state, it rotates the display and touch screen. It also reloads my xmodmap configuration, because it seems to be lost every time the keyboard is plugged back in.

chuwi-loop.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#! /bin/zsh

while true; do
  if [[ -e /dev/keyboard_dock ]]; then
    xrandr -o normal
    xinput set-prop 11 "Evdev Axes Swap" 0
    xinput set-prop 11 "Evdev Axis Inversion" 0, 0
    xmodmap ~/.Xmodmap
  else
    xrandr -o left
    xinput set-prop 11 "Evdev Axes Swap" 1
    xinput set-prop 11 "Evdev Axis Inversion" 1, 0
    xmodmap ~/.Xmodmap
  fi

  inotifywait  /dev --excludei '^[a-jl-z0-9]'
  sleep 1;
done

Would I be better off running Windows?

It is a close call, but I am already slightly better off running Linux full time on my Chuwi Hi12 for my purposes. Having a proper terminal emulator with a first-class UNIX shell environment is so much more useful to me than the “Bash on Ubuntu on Windows” nonsense, and being able to use a good window manager to wrangle all my terminal windows is much more comfortable.

Two of our Chuwi Hi12 laptops

It has been over a week since I last booted Windows 10, and I’m confident that I won’t be booting it again. The lack of audio on Linux is probably my biggest nuisance at the moment, but I’ve really only missed it once or twice.

For now, though, I have a working web browser, a better Emacs experience, and I spend less time managing windows. And on top of that, everything on my Chuwi now looks and feels just like my Linux laptop and desktop.

Everything works just well enough to keep me from wanting to boot into Windows, and I’m hopeful that things will continue to improve in the future!

Comments