-- Leo's gemini proxy

-- Connecting to gmi.runtimeterror.dev:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=en-US

💻 [runtimeterror $]

2020-09-14

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 [1] 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 [2] 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.

[1] Octoprint on the Raspberry Pi

[2] The Spaghetti Detective

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 [3]. 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 [4]) 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.

[3] Linux (Beta) feature

[4] image


Image: Screenshot of the 'neofetch' utility

There are plenty of great guides (like this one [5]) on how to get started with Linux on Chrome OS so I won't rehash those steps here.

[5] this one

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 [6]. 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.

Image: Screenshot of ChromeOS flags page showing that '#scheduler-configuration' is set to 'Enables Hyper-Threading on relevant CPUs

[6] hyperthreading disabled by default

The Software

I settled on using FreeCAD [7] for parametric modeling and Ultimaker Cura [8] for my GCODE slicer, but unfortunately getting them working cleanly wasn't entirely straightforward.

[7] FreeCAD

[8] Ultimaker Cura

FreeCAD

Installing FreeCAD is as easy as:

sudo apt update
sudo apt install freecad

But launching `/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:

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 `~/.bashrc` file:

alias 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 `/usr/share/applications/freecad.desktop` file:

sudo vi /usr/share/applications/freecad.desktop
[Desktop Entry]
Version=1.0
Name=FreeCAD
Name[de]=FreeCAD
Comment=Feature based Parametric Modeler
Comment[de]=Feature-basierter parametrischer Modellierer
GenericName=CAD Application
GenericName[de]=CAD-Anwendung
Exec=env LIBGL_DRI3_DISABLE=1 /usr/bin/freecad %F
Path=/usr/lib/freecad
Terminal=false
Type=Application
Icon=freecad
Categories=Graphics;Science;Engineering
StartupNotify=true
GenericName[de_DE]=Feature-basierter parametrischer Modellierer
Comment[de_DE]=Feature-basierter parametrischer Modellierer
MimeType=application/x-extension-fcstd

That's it! Get on with your 3D-modeling bad self.

Image: Screenshot of FreeCAD showing a 3d model being worked on

Now that you've got a model, be sure to export it as an STL mesh [9] so you can import it into your slicer.

[9] export it as an STL mesh

Ultimaker Cura

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 `~/Applications/`.

To be able to actually execute the AppImage you'll need to adjust the permissions with 'chmod +x':

chmod +x ~/Applications/Ultimaker_Cura-4.7.1.AppImage

You can then start up the app by calling the file directly:

~/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 `menulibre`:

sudo apt update && sudo apt install menulibre
menulibre

Just plug in the relevant details (you can grab the appropriate icon here [10]), hit the filing cabinet Save icon, and you should then be able to search for Cura from the Chrome OS launcher.

Image: Screenshot demoing the use of 'menulibre' to create the launcher shortcut

[10] here

Image: Screenshot of Ultimake Cura software

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.

Image: A 3d-printed adapter for mounting a rear reflector on a bicycle, designed, sliced, and printed from a Chromebook

Nice!



---


📧 Reply by email



Related articles


Quick Salt State to Deploy Netdata

I Ditched vSphere for Proxmox VE

Using `systemctl edit` to Delay Service Startup

---


Home

This page on the big web

-- Response ended

-- Page fetched on Fri May 10 16:58:54 2024