Audio doesn't work
tldr:
I unlocked the bootloader of a Chromebox and ran Batocera Linux.
Overview
This Chromebox has been gathering dust for a while, becuase there are simply other devices that can browse the internet. However, it being this small box (that somewhat reminds me as a Raspberry Pi with more power), the itch to do something with it got strong.
It turns out, this specific computer had been mentioned by some youtubers as somewhat practical, due to its low power draw (if you use it as a server, and configure the power saving settings just right). However, I was interested in retro gaming, having spent some time playing Gameboy and PS2 games. Figuring that old games probably didn’t need a ton of power in modern-day context, I decided that I would try to get a chromebox to become a neat mini-console, because I didn’t need another way to watch Youtube or browse Twitter.
This video was a great, comprehensive tutorial, and it even had a great prerequisite tutorial linked from the same person. These were good resources which went over how to unlock the bootloader of a Chromebook, which was the first step to running another operating system on them.
Unfortunately, I wasn’t doing this process on a Chromebook, I was doing this on a Chromebox. There’s no keyboard or display included, which made some of the instructions harder to follow, because they assumed you had a Chromebook keyboard (which comes with it’s own set of function keys that have some special properties).
Moving fast and breaking things (plastic retaining clips)
The first step recommended is to remove the write protection screw so that the BIOS firmware can be overwritten. I found precisely 1 (one) resource online that could tell me how to get into the Acer CXI3 Chromebox: this one. Not even an iFixit guide. There are nice photos on how to get at each part of the box, but of course, I got ahead of myself, pried open one side too eagerly, breaking a clip. I don’t think anyone is going to care, and I can honestly recommend using a butter knife to get the job done instead of fancy plastic pry tools.
Once inside, the top cover you worked so hard on removing is still held on by this really pesky power cable. I tried to unplug the connector, but it proved difficult. Instead of fighting the problem, I avoided it, realizing I could still remove a screw with the flex in the power cable.
Unfortunately, I found 0 sources online that could confirm where the write protection screw was once I opened the thing, but it wasn’t so hard to figure it out - there are 5 screws on the main board, 4 of them are in the corners and appear to hold it down, and there’s an odd screw out that’s very flat and wide, and right next to one of the corner screws. I removed that one, and the firmware write protection was removed.
I cannot be bothered to take it apart again to photograph the screw.
I clipped some of the plastic bits back together, and plugged it on again. I should mention that there’s something up with this chromebox - sometimes the video never comes on, which made diagnosing if I’d broken it in this process a little more difficult. (The issue was simply a bad HDMI cable.)
Not-quite-Chrome-box
(Here's the tutorial I was using.)
Now, it was the software side. To run the scripts that unlock the bootloader, you need shell access, which you can get if you’re in developer mode and turn off OS verification. To do this, you just need to force reboot the computer and press Ctrl+D on startup. It’s not a terrible process. The only difference for Chromeboxes is that instead of the “Karate chop” hard reboot method, you’ll need a small thing like a sim card ejector to press the reset button on the back, and one of your fingers to press the power button on the front at the same time.
The “Karate chop” hard reboot method is a handly little trick that’s given to your friends if your school uses Chromebooks as student computers. Pressing Esc, Refresh, Power can be done quickly by making a karate chop like maneuver across the top row of function keys on a Chromebook. Look away for even an instant, and your laptop will be rebooted. Luckily, in the age of auto-saving Google Docs and automatically restored tab history, your annoyance only depends on how long it takes to type out your password. Again.
Once OS verification is off, and you’re in developer mode, you can enter the shell.
Which shell?
When logged into a Chromebook (Guest mode, or any account), Ctrl + Alt + T opens something terminal-like. You type “shell” and hit enter, and you’re placed in another terminal, but this one gave me a warning that sudo commands wouldn’t work, and I need something called a “VT-2” terminal to run sudo commands.
This must have come in some ChromeOS update, and unfortunately, the Youtube video didn’t show this issue. The on-screen instructions tell you to press Ctrl + Alt + F2 or F3?, and so I did, but all this seemed to do is reboot the Chromebox. There were other commands, like Ctrl + Alt + Refresh, but I don’t have that refresh key. It also suggested Ctrl + Alt + Right arrow, but this did nothing.
It turns out that Ctrl + Alt + F2 is the right command, but you’re not supposed to do it while logged in to an account (or in guest mode). It works when you’re at the login screen, before you’ve logged in. Pressing Ctrl + Alt + F2 there brought up a full screen terminal, and I was off to the races.
I tried entering the command from the Youtube video, but the firmware installation script was no longer hosted at the website, so I had to find another command. This skeeved me out, because the alternative firmware installation script didn’t seem to do a backup of the firmware, which would have granted me some peace of mind, lest I brick an old computer that I had no other use for. It turns out that if you go further through the process, sure enough, it prompts you to plug in a flash drive and save a backup file. The script ran fine, and installed a new bootloader.
Finally, Linux.
I had Ubuntu on flash drive and, and that booted no problem. Then, I got a copy of and installed batocera - it took a while to write to a usb.
When installing to the disk - please plug in ethernet while it’s doing this download - otherwise it takes a ridiculously long time.
The finish line
Batocera works fine, emulates the games, and connects to controllers, wired and with bluetooth.
I thought there was something wrong with one of my controllers - I couldn’t chain together button presses to run the top-level commands. The game controller lets you use all the buttons to play your game, but there needs to be a way to exit the game - so you chain the “super” button (hello, Linux people) and another button like “Start” to quit a game. On my Stadia controller, it seemingly couldn’t do this. I thought that the Stadia controller’s conversion to bluetooth left some weird functionality issues, but it turned out that it was because I had another controller connected, and only player 1’s controller can press the “super” button.
In hindsight, this is actually a smart implementation - player 2 can’t quit the game on you.
Lastly, on my display, audio doesn’t work, but audio with this display also didn’t work in Ubuntu on this chromebox, and on different hardware. I couldn’t even use the headphone jack on the chromebox. I did find a display that did send audio, but there’s really no guarantee.