Now with charging limits!

Original All the little things I do for the Asus Flip Now with charging limits! Editable
version 2 of 2

The C100P Flip is the best netbook I have seen in eight years. When I pick it up, I feel a magic that I haven't felt since the original Eee PC. Now normally I don't bother putting all my little one-off hacks online but I really like this machine and really hope it'll be more popular. However I suspect that I am a harbinger so chances are it'll flop and be another eight years before a netbook this good comes around again. I snapped up a 4GB model as soon as they became available, slapped Arch Linux Arm on it and have been very pleased.

kk (2015-11-29-04-18-25-365)

Probably should link

kk (2016-03-04-22-54-26-678)


  • 15 hour battery life for my typical use (ssh, vim, pdfs, music)
  • 6 hours for 'worst case' (video playback, max bright, max volume)
  • 16 days in suspend
  • looks like a midget macbook pro
  • totally fanless and silent
  • solid aluminum chassis
  • lightweight, under 1kg
  • lovely IPS screen
  • backlight goes high enough to work in sun
  • backlight goes low enough to not hurt when reading at night
  • screen is usable in full sunlight without backlight
  • 2W typical power draw (a 20cm solar panel is plenty)
  • decent keyboard
  • goofy tablet mode
  • flush uSD socket


  • glossy screen
  • only two USB2 ports
  • newfangled power jack shared only with the Asus X205 (beware, 19V vs 12V!)
  • no trackpoint
  • no removable/replaceable battery
  • ancient custom kernel (3.14.0)
  • weird google bootloader
Andrew Bork (2015-12-07-08-50-18-969)

Have you ever experimented with building the 3.18 kernel?

I attempted it, but ran into problems probably not answering the kernel selection prompts correctly

Justin (2017-02-22-18-16-11-945)

Can you use the x205 charger with the Flip C100P?

My flip charger is broken and can get a x205 but not a flip replacement charger


Brian Ditfeld did an excellent C100P teardown and I have to say I like what I see. When the battery finally goes it appears it will be reasonably easy to fit a new li-poly pack in there. Maybe not the full 31Wh of the original, but even half the battery life would still be acceptable in 10 years.

Benchmark-wise, the single-thread performance of the Flip is a bit faster than my old Thinkpad X120e with an E350 CPU. Not going to set any records, but plenty enough for my dev work.


Will (2017-07-24-08-52-51-251)

Ive managed to get a sucessful implementation of arch on a flash drive and then a external hdd, but what i would like to do is move my root partition onto the emmc to speed things up but even a full install would be fine (the flashdirve was half that size and orders of magnitude slower). while i think i've gotten it installed right i cant seem to boot to it, i think the bootloader or whatever kind of thing this uses is looking for chrome os and freaking out when it isn't there, what should i do to get it to boot to the emmc?

Will (2017-12-30-13-18-41-056)

Partial Success! after struggling with something that is probably trivial I managed to get arch moved to the emmc by using Ethan Mads chromeos partition resizer to make chrome os smaller while maintaining the same partition layout. After that it's relatively simple to install arch to mmcblk0p6 and mmcblk0p7 or KERNC and ROOTfsC as chrome prefers them labeled.

If you run into problems getting something to work, open an issue and I'll see if I can expand on a topic.

josh (2016-02-01-13-16-52-226)

tries a couple times to install arch arm linux on my c100, but each I always get an error that reads "invalid argument for 'expr xxxx - 40960'. I've tried installing onto a usb drive and also onto the formatted internal hard drive, but to no avail each time. Anyone else have this error?

alex (2016-05-05-07-10-56-920)

@Josh: You need to use the back-tick (`) not a comma (').

Follow the directions on the Arch Linux ARM page. But those directions are for installing to a micro sd card. You'll want to nuke the entire internal SSD for the best experience. Simply follow the uSD directions except substitute /dev/mmcblk0 for /dev/sda and /dev/mmcblk0p{1,2} for /dev/sda{1,2}. Though do consider making a full disk image of the drive beforehand in case you are worried about botching things.

kk (2015-12-23-13-57-34-178)

USB appears as /dev/sda{1,2} If you are installing to an uSD card, it will appear as /dev/mmcblk1p{1,2} and the uSD card will remain mounted across reboots.

wolfie (2016-08-12-07-32-10-337)

I am trying to install to the internal disk as you suggest, but when I get to the part where I run fdisk and try to write it, I get this error:

Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy.

Any idea what could be wrong?

buravirgil (2016-08-29-09-00-47-398)

At what step should I begin following ArchLinux' ARM page?...b/c on my first try (after having successfully booted from mmcblk1 before finding your page) after umounting all drives with umount /dev/mmcblk0* it complains that partition tables won't work until a reboot...and of course, after reboot, it couldn't read its own SSD.

NotANinja (2018-02-21-11-39-28-110)

I can't get this to work - tried writing to the eMMC but it always puts me back in to recovery mode after the reboot :-\

Kapil (2020-06-24-04-41-20-340)

Followed the directions. After boot, it gets stuck at the systemd-tmpfiles-setup.service. Could not find a fix. Any hints?

Platform packages to install:

xf86-video-armsoc-rockchip veyron-libgl armsoc-rockchip vboot-utils
kk (2015-12-02-12-10-14-544)


Erik (2016-01-21-05-11-35-364)

armsoc-rockchip is not a package

alex (2016-05-05-07-13-34-544)

This doesn't enable hardware acceleration on the GPU. Higher level launchers like sddm and lightdm + lightdm-gtk-greeter just ignore errors and launch sofware rendering. I have no idea how to take advantage of the GPU. :(

MrDowntempo (2016-08-12-13-49-44-112)

armsoc-rockchip still isn't a package. Was it ever? Anyway... I can't for the life of me get GPU acceleration running :( I would really really really like to. I opened a thread on arch-arm forums but haven't found any solutions yet.

The classic startx is a huge pain to get working. I eventually gave up and used SDDM to get X11 rolling. Put alias startx="sudo systemctl start sddm" in your bashrc (and a matching passwordless exception in sudoers) with SDDM configured for automatic login to continue feeling leet for booting to console.

Andrew Bork (2015-12-07-08-46-57-701)

I started out, and got slim to work fine, but then I found out they are not developing it anymore, so I switched to lightdm, and that seems to work great too. No problems with either

Erik (2016-01-21-05-13-56-381)

having display errors starting sddm

The default ALSA config was completely silent. Enabling Right Speaker Mixer Right/Left DAC fixed that. Supposedly there is a risk of burning out the amp if you thoughtlessly enable every option.

thea (2016-08-29-14-16-49-311)

Finding your page very helpful but can't for the life of me get the audio working. Don't know how to enable the ight Speaker Mixer Right/Left DAC :( any hints would be much apreciated x

Eric (2017-04-18-05-41-37-661)

To do this, you need to run:

amixer -c 0 sset 'Right Speaker Mixer Right DAC' unmute amixer -c 0 sset 'Right Speaker Mixer Right DAC' unmute sudo alsactl store

Be sure to use single quotes.

dt-rush (2018-02-02-09-09-36-138)

It seems there's a slight typo above, you had "Right" twice. The second time we should do this for "Left"

After suspend/resume, wifi will not work if the btsdio module was automatically loaded. See c100p.modules.conf for that.

Chris Worsley (2020-03-29-16-00-18-883)

I couldn't get suspend to work correctly using the instructions on this page. For me, suspend wouldn't complete as the systemd resolved service wouldn't stop.

I solved this by adding 'sudo systemctl stop systemd-resolved' into the suspend script (with appropriate changes to the sudoers file). After this is run, suspend completes correctly.

Chris Worsley (2020-03-29-16-00-49-574)

I couldn't get suspend to work correctly using the instructions on this page. For me, suspend wouldn't complete as the systemd resolved service wouldn't stop.

I solved this by adding 'sudo systemctl stop systemd-resolved' into the suspend script (with appropriate changes to the sudoers file). After this is run, suspend completes correctly.

For a video player VLC takes the least amount of setup. The best video output mode is X11 video output. Despite what everyone says about being slow, this is the only driver that doesn't have major desync problems. The OpenGL-ES output mode does not desync, but it also can't scale video or run for more than a few minutes. Like many ARM boards the sound chip is fickle and only accepts 44.1k data. Set alsa-audio-device=hw:CARD=ROCKCHIPI2S in ~/.config/vlc/vlcrc if you are not using pulse, otherwise it won't detect the correct sample rate.

Igor (2016-03-03-14-58-20-882)

Did you get speakers working? Me not. Only headphones.

Igor (2016-03-03-15-01-57-971)

Oops, sorry for sily question. Just read you advise about Right Mixer Right/Left DAC Settings! Everything works! Thank you!

nathan (2016-08-06-16-41-54-132)

But I lose the working speakers on reboot. Is there a way to make the settings stick?

The HW accelerated 3D drivers are what you'd expect from binary drivers. They mostly-sort-of work. The biggest problem I've seen is they fall over in a stiff breeze. For example, Stellarium would run at a buttery smooth 60 FPS for a few minutes and then everything would die. (No overheating though.) Capping the frame rate to 15 FPS has made it stable enough for a good star-viewing session. I expect you will run into similar problems on a per-application basis.

In a minor irony, Chromium will not run on this hardware. Thankfully Firefox has no problems.

BIG (2016-05-07-16-19-51-241)

I'm on Gentoo linux, but using PKGBUILDs from Arch. And i have build both Chrome and Firefox. Chrome performing much better than Firefox. Only problem with Chome is that Hangouts crashes on video call.

cuddlepuncher (2016-10-20-12-25-02-897)

This has been fixed and chromium works well.

What is the point of having a touchscreen if you can't doodle a play-by-play? The best drawing software I've found for this is

nathan (2016-08-21-03-59-47-513)

yaourt reports gromit not available for arm architecture (?)

nathan (2016-08-21-04-00-14-099)

yaourt reports gromit not available for arm architecture (?)

The function keys don't generate XF86events, I bound Control+FX to scripts instead. The only one that I've had trouble with was the "lock" button (keycode 191), which binds to XF86Tools. For some reason my WM would not recognize that so I remapped XF86Battery to it. The dedicated volume buttons work properly.

Screen rotation through xrandr doesn't work at all, limiting the usefulness of tablet mode somewhat. But mupdf is usable enough though you have to drag the page "backwards" to advance in some orientations. While I still think the tablet mode is a little silly, it has lead to a noticeable increase in the number of PDF papers I read. Could also just be the novelty too.

To get the most battery life you need to run the backlight as low as possible. The easiest way to do this is to use a console theme with a white background. White backgrounds are also usable in full sun with the backlight disabled. I find they reduce eyestrain because it forces you to use the minimum contrast ratio. (If you think they are blinding, try turning down the backlight!) Almost all console applications assume a dark background and at some point I need to publish the collection of themes I've been putting together.

I have heard from a trustworthy source that these boards should be able to safely take up to 19V. Be warned that I have not confirmed it, nor do I plan to! The lower voltage cutoff has some hysteresis and is 9.8V (falling) or 10.2V (rising). If you want to experiment with alternative DC power supplies you can splice a barrel jack into the power cable. It is only a simple coaxial cable and there is no third wire for signaling the capacity of the power brick. I've operated the Flip from NiMH AA batteries (plus a boost regulator) and it is almost practical - you burn through an average of one cell per hour.

Scripts and Commands

Little odds and ends. These are designed to be as WM agnostic as possible. Most scripts require xosd and terminus-font installed.

Download the scripts from

  • /etc/modprobe.d/c100p.modules.conf - keeps wifi working
  • /etc/tmpfiles.d/c100p.backlight.conf - user permissions on the backlight
  • sudoers - a couple of passwordless commands (suspend and sddm)
  • - quadratic ramp, takes "up/down" as an argument
  • c100p.tablet-mode.c - detects orientation and disables keyboard/touchpad, also requires xorg-xinput and compiling
  • - takes "up/down/toggle" as an argument, also requires alsa-utils
  • - displays a bunch of system info
  • - smartest idle detection yet, also requires xprintidle
Will (2017-10-18-12-22-47-126)

Despite install all the required packages i cant seem to get the tablet mode to work after compiling it complains of a font issue and a locale problem neither of which seem to be wrong, could you walk through this as it's the only tweak written in c?

Controlling the battery charge limits is done between sudoers and bashrc with the charge_current alias and the charge_until function. The charge_current requires the ec-utils package and sets how many milliamps flow into the battery during charging. The default value is 3456 and setting it to 0 will disable battery charging. Other small numbers may be useful for a gentle slow charging or using a smaller DC adapter. For example, reducing the current to 590 milliamps means you could charge the laptop (while off or suspended) from a USB port with a boost converter. The charge_until function takes a number between 0 and 100 and stops charging the battery when that percentage is reached. By never taking the charge over 80% for normal use I hope to greatly extend how many years the non-replaceable battery will last.

Suspend has some minor wonkiness. First, closing the lid will generate a wakeup event. A small delay is needed if you are manually triggering suspend. And then during the wakeup, the touchpad always generates a drag event towards the upper right corner of the screen. I handle both of these with an alias in ~/.bashrc

alias suspend="echo 'Five seconds!'; sleep 5; xinput -disable 'Elan Touchscreen'; sudo systemctl suspend; xinput -enable 'Elan Touchscreen'"

The script requires a little explanation. I really don't like my computer entering suspend at a bad time. Closed the lid? I don't want to lose my wifi connection. Simple X11 idle time? Maybe I'm not in X. Or I'm compiling a build, downloading updates, etc. So the auto-suspend checks a half a dozen criteria every minute. After several minutes of idleness it blasts a warning across the screen. And one minute after that it finally enters suspend. Note that there is no way to detect idle time on the TTY. To hack around this, adjust your ~/.bashrc with PROMPT_COMMAND="touch /tmp/.bashidle" and the last-modified time of that file will be a proxy for tty idle time. (Obviously this has flaws if you simply stay in one program like emacs instead of your local shell, adjust accordingly.) ZSH requires further hackery for the equivalent.

A bit of background on the script; I grew up with floppy-based computers that barely had an operating system, where you could listen closely and hear every single twitch the machine made. And when Windows came around, I was running it on very underspecced systems. So it was natural for me to keep an eye on everything with TinyResMeter. Cleaning up errant processes required constant vigilance. So when I moved to Linux, I immediately put together a sweet Conky setup. But over the years I've realized that Linux was pretty amazing at resource management. I didn't need to be vigilant, the OS was. And then I realized the system monitor might be chewing up 10% of my CPU with the constant updates and graphical shininess. And providing a useless distraction of flickering numbers. The eventual evolution of system monitoring has left me with the status script. It only pops up when I am curious and hit the keybind for it. (On the Flip it's bound to the goofy dedicated lock button.) It is not very efficient code with lots of bash shelling, but it runs so rarely as to hardly matter. On computers with much shorter battery life I usually compliment it with a periodic alarm script that sounds the klaxons when approaching a dangerous status, but I have not felt the need to do that here.

Future and Things to Fix

nathan (2016-08-06-16-07-49-852)

I am totally unable to get samba to work. Were you successful? I posted here about that:

  • Mainline kernel. I hear the veyron stuff is on track for being mainlined. I hope many of the below issues will magically go away on that day.
  • HMDI output. Very wonky, usually crashes X11 after a few minutes.
  • Xrandr screen rotation. Errors with cannot use rotation "left".
  • USB ethernet. The cdc_ether module will load but nothing happens.
  • Webcam. Crazy bucket of fail here. Maybe 25% of the time fswebcam can grab a single frame. Good luck with video.
  • Libreboot. The C100P is a basically the Asus C201 but dressed up in a nicer case. Hopefully Libreboot's efforts will be portable.
  • Multitouch on the panel. No idea how to get that working.
  • Alternative battery chemistry. Poking around ectool shows knobs to adjust parameters such that charging LiFePO4 might be possible. Though I'm not going to consider attempting this until the stock battery is thoroughly decayed.
kk (2015-11-27-22-04-18-970)


kk (2015-11-29-07-33-45-788)

Overclocking. Disabling two of the cores gives plenty of thermal leeway.

BIG (2016-06-06-15-48-52-466)

Webcam works very well mpv --tv-device=/dev/video2 tv:///

Helpful Hardware Info

Specifically relating to the previously mentioned gaps.


SR (2015-12-19-17-08-44-613)

Almost every time I try to view the live stream from the webcam on /dev/video2 with mplayer I get device or resource busy - same error with the v4ctl command mentioned here. I'm sure the webcam works because when I try the exact same mplayer command on /dev/video2 from a crouton install of ubuntu it works fine. However, the arch linux arm install on my SD card almost always gives a device or resource busy error. fuser does not reveal any other processes using /dev/video2.

Any help would be appreciated. Thanks in advance.

/dev/video2 appears to be the device
1280x720 960x540 640x480    supported resolutions

v4l2-ctl --list-formats -d /dev/video2
    Index       : 0
    Type        : Video Capture
    Pixel Format: 'MJPG' (compressed)
    Name        : MJPEG

    Index       : 1
    Type        : Video Capture
    Pixel Format: 'YUYV'
    Name        : YUV 4:2:2 (YUYV)


can be disabled with
xinput -disable "Elan Touchscreen"
this reduces power consumption by 0.1W
no other information?
Igor (2016-04-23-16-08-11-244)

I am wonder as it can reduce power consumption. In reality, this command does not de-energize the touchscreen, and he continues to work, just X-Server ignores it.