3D Modeling and Printing on Chrome OS
I've got an Ender 3 Pro 3D printer, a Raspberry Pi 4, and a Pixel Slate. I can't interface directly with the printer over USB from the Slate (plus having to be physically connected to things is like so lame) so I installed Octoprint on the Raspberry Pi and connected that to the printer's USB interface. This gave me a pretty web interface for controlling the printer - but it's only accessible over the local network. I also installed The Spaghetti Detective to allow secure remote control of the printer, with the added bonus of using AI magic and a cheap camera to detect and abort failing prints.
That's a pretty sweet setup, but I still needed a way to convert STL 3D models into GCODE files which the printer can actually understand. And what if I want to create my own designs?
Enter "Crostini," Chrome OS's Linux (Beta) feature. It consists of a hardened Linux VM named
termina which runs (by default) a Debian Buster LXD container named
penguin (though you can spin up just about any container for which you can find an image) and some fancy plumbing to let Chrome OS and Linux interact in specific clearly-defined ways. It's a brilliant balance between offering the flexibility of Linux while preserving Chrome OS's industry-leading security posture.
There are plenty of great guides (like this one) on how to get started with Linux on Chrome OS so I won't rehash those steps here.
One additional step you will probably want to take is make sure that your Chromebook is configured to enable hyperthreading, as it may have hyperthreading disabled by default. Just plug
chrome://flags/#scheduler-configuration into Chrome's address bar, set it to
Enables Hyper-Threading on relevant CPUs, and then click the button to restart your Chromebook. You'll thank me later.
I settled on using FreeCAD for parametric modeling and Ultimaker Cura for my GCODE slicer, but unfortunately getting them working cleanly wasn't entirely straightforward.
Installing FreeCAD is as easy as:
1$ sudo apt update 2$ sudo apt install freecad
/usr/bin/freecad caused me some weird graphical defects which rendered the application unusable. I found that I needed to pass the
LIBGL_DRI3_DISABLE=1 environment variable to eliminate these glitches:
1$ env 'LIBGL_DRI3_DISABLE=1' /usr/bin/freecad &
To avoid having to type that every time I wished to launch the app, I inserted this line at the bottom of my
1alias freecad="env 'LIBGL_DRI3_DISABLE=1' /usr/bin/freecad &"
To be able to start FreeCAD from the Chrome OS launcher with that environment variable intact, edit it into the
Exec line of the
1$ sudo vi /usr/share/applications/freecad.desktop 2[Desktop Entry] 3Version=1.0 4Name=FreeCAD 5Name[de]=FreeCAD 6Comment=Feature based Parametric Modeler 7Comment[de]=Feature-basierter parametrischer Modellierer 8GenericName=CAD Application 9GenericName[de]=CAD-Anwendung 10Exec=env LIBGL_DRI3_DISABLE=1 /usr/bin/freecad %F 11Path=/usr/lib/freecad 12Terminal=false 13Type=Application 14Icon=freecad 15Categories=Graphics;Science;Engineering 16StartupNotify=true 17GenericName[de_DE]=Feature-basierter parametrischer Modellierer 18Comment[de_DE]=Feature-basierter parametrischer Modellierer 19MimeType=application/x-extension-fcstd
That's it! Get on with your 3D-modeling bad self. Now that you've got a model, be sure to export it as an STL mesh so you can import it into your slicer.
Cura isn't available from the default repos so you'll need to download the AppImage from https://github.com/Ultimaker/Cura/releases/tag/4.7.1. You can do this in Chrome and then use the built-in File app to move the file into your 'My Files > Linux Files' directory. Feel free to put it in a subfolder if you want to keep things organized - I stash all my AppImages in
To be able to actually execute the AppImage you'll need to adjust the permissions with 'chmod +x':
1$ chmod +x ~/Applications/Ultimaker_Cura-4.7.1.AppImage
You can then start up the app by calling the file directly:
1$ ~/Applications/Ultimaker_Cura-4.7.1.AppImage &
AppImages don't automatically appear in the Chrome OS launcher so you'll need to create its
.desktop file. You can do this manually if you want, but I found it a lot easier to leverage
1$ sudo apt update && sudo apt install menulibre 2$ menulibre
Just plug in the relevant details (you can grab the appropriate icon here), hit the filing cabinet Save icon, and you should then be able to search for Cura from the Chrome OS launcher.
From there, just import the STL mesh, configure the appropriate settings, slice, and save the resulting GCODE. You can then just upload the GCODE straight to The Spaghetti Detective and kick off the print.