Now that I have Alpine Linux running on my laptop I need to get rootless podman setup so I can run applications that aren’t included in the Alpine distribution. Podman is a Docker compatible container engine that doesn’t require a daemon, and can run as a user without any need for root access. That also means that there is a good chance this will all work on other distributions, not just on Alpine.
Podman setup on Alpine is easy. It amounts to installing the package, making sure the cgroups service is started, and most importantly adding subuids/gids for your user account. These are used for mapping the container uid/gid when running as a user. See the Alpine Wiki for the current instructions. Other distributions may have podman already setup, or have similarly simple instructions available.
Once you can successfully run
podman run --rm hello-world you are ready to
setup a container for prusa-slicer.
The Containerfile looks like this:
# Run Prusa Slicer in a container # # Based on Jessie Frazelle's post: # https://blog.jessfraz.com/post/docker-containers-on-the-desktop/ FROM debian:latest LABEL maintainer "Brian C. Lane <email@example.com>" RUN apt-get update && apt-get install -y \ prusa-slicer \ locales \ && rm -rf /var/lib/apt/lists/* # Update the locale RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \ && locale-gen en_US.utf8 \ && /usr/sbin/update-locale LANG=en_US.UTF-8 ENV LC_ALL en_US.UTF-8 ENV LANG en_US.UTF-8 ENV HOME /home/user ENV USER user RUN groupadd -g 1000 user \ && useradd -u 1000 -g 1000 --create-home --home-dir $HOME user \ && chown -R user:user $HOME RUN passwd -d root WORKDIR $HOME USER user
I used debian:latest (currently set to bullseye), installed the needed apps,
setup the locale so that prusa-slicer wouldn’t crash. Setup a user named
user, who has the same uid as the user on the host system and make a home
directory for them. I also delete the root password in the container to make it
easier to debug problems that may arise. One important thing is to set the
USER environmental variable. Without that prusa-slicer crashes with a very
obscure error message. You may need to change the
1000 to the uid and gid of
Now you can build the container with
podman build -t prusa-slicer -f Containerfile.
In order for the application to run it needs permission to talk to the X server on the host.
This is accomplished by running xhost, and by mounting the X11 socket in the container. If
your socket file is somewhere other than
~/.X11-unix you will need change it to the correct
path. You also need to tell the prusa-slicer app where the display is, which is done by
DISPLAY environmental variable using podman’s
I use the
~/Downloads/ directory to share the
.gcode files with
the container, and
~/PrusaSlicer to store the configuration between runs.
Create these 2 directories in your home directory if they don’t already exist
on your system.
Running the container
The run script looks like this:
#!/bin/sh CMD="" if [ -z "$1" ]; then CMD=prusa-slicer else CMD="$*" fi xhost +si:localuser:"$USER" podman run --rm -it --userns=keep-id -v "$HOME/Downloads:/home/user/Downloads" \ -v "$PWD/PrusaSlicer:/home/user/.config/PrusaSlicer" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e "DISPLAY=unix$DISPLAY" \ prusa-slicer "$CMD" xhost -si:localuser:"$USER"
xhost to give the current user permission to connect to the server,
launches the container with the
mounted, along with the X socket. If you just run it, it will start the prusa-slicer
app. If you need to debug things run it with
/usr/bin/bash and it will run a
shell inside the container.
With prusa-slicer running select the
.stl files from
~/Downloads inside the
container, and export the
.gcode back to the same place. They will appear in
~/Downloads/ directory on the host filesystem for transfer to your 3d
You can find the files here in a git repo.