This project has been deprecated in favor of another project of mine, Breath. All future work will be done there. However, there is nothing stopping Campfire2 fom still working as an alternative to the older Crouton.
Campfire2.Demo.mp4
Hardware Support | Campfire2 | Crouton | Crostini |
---|---|---|---|
Internal Display | Yes | Yes (sommelier is not working) | Yes |
External Display | Yes | Mostly | Yes |
Touchpad | Yes | Mostly | Yes |
Touchscreen | Yes | Mostly | Yes |
WiFi | Yes | Yes | Yes |
3D Acceleration | Yes (Can be used for gaming!) | Mostly | Yes (but using slower VirGL) |
Audio | Mostly | Mostly | Mostly |
Camera | Yes | Yes | Yes |
Microphone | No | Sometimes | Yes |
USB | Yes | Yes | No direct USB Access |
Suspending/Resuming | No (sommelier does not persist when suspending) | Yes | Yes |
KVM Virtualization | Yes | Yes | No (Not available on all chromebooks and slow) |
Campfire2 and Crouton's performance are similar. The only reason to change from Crouton are Quality-of-Life improvements and maintenance. Basically, Campfire2 has the performance of Crouton but the reliability and GUI (known as Sommelier) of Crostini.
Crostini gets around ~17.5 FPS on default Minecraft using the (still very impressive!) VirGL drivers. On the other hand, using i965
and Mesa gives ~25 fps. Chromebooks released in 2019 can utilize a newer kernel and the new Gallium3d drivers, which would probably offer around ~30 fps.
- Install Chromebrew:
sudo rm -rf /usr/local > /dev/null; curl -Ls git.io/vddgY | bash
- Download/extract/configure the Ubuntu (20.04) Chroot:
crew install xterm xhost libunwind && echo "Downloading Ubuntu RootFS..." && curl --verbose -o /usr/local/ubuntu.tar.xz "https://cloud-images.ubuntu.com/minimal/releases/jammy/release/ubuntu-22.04-minimal-cloudimg-amd64-root.tar.xz" && sudo rm -rf /usr/local/ubuntu; mkdir /usr/local/ubuntu && sudo tar -xvf /usr/local/ubuntu.tar.xz -C /usr/local/ubuntu && sudo rm /usr/local/ubuntu.tar.xz /usr/local/ubuntu/etc/resolv.conf && sudo mkdir /usr/local/ubuntu/root/Downloads && sudo cp /etc/resolv.conf /usr/local/ubuntu/etc/resolv.conf && sudo curl https://raw.githubusercontent.com/MilkyDeveloper/Campfire2/main/startubuntu -o /usr/local/bin/startubuntu && sudo chmod 755 /usr/local/bin/startubuntu && startsommelier && echo "Done! Run sudo startubuntu to start the chroot."
Run sudo startubuntu
to start the chroot.
3d Acceleration under the chroot requires a few steps. This is because Google ships a kernel made in 2016 on some flagship chromebooks.
- Install MESA:
sudo apt update && sudo apt install mesa-utils
- Verify 3d Acceleration is not working:
glxinfo -B | grep Device:
- If it returns
LLVMPipe
, 3d Acceleration is not working. Otherwise, 3d Acceleration is already working and you can stop following this section.)
- If it returns
- Use i965 instead of Gallium3d/Iris:
echo -e "# Fix 3d Acceleration on Kernel 4.4\nexport MESA_LOADER_DRIVER_OVERRIDE=i965" >> ~/.bashrc && source ~/.bashrc
Run glxinfo -b
again and search for LLVMPipe. It should be gone and replaced with Mesa DRI Intel(R) UHD Graphics
🎉.
- Install Pulseaudio and Apulse:
apt update && apt upgrade && apt install alsa alsa-tools apulse
-
# Replace PulseAudio libraries with Apulse, which makes PulseAudio apps work with ALSA for lib in libpulse-mainloop-glib.so libpulse-simple.so libpulse.so; do set +e sudo rm -f /usr/lib/${lib} /usr/lib/${lib}.0 /usr/lib/x86_64-linux-gnu/${lib} /usr/lib/x86_64-linux-gnu/${lib}.0 set -e sudo ln -s /usr/lib/x86_64-linux-gnu/apulse/${lib} "/usr/lib/${lib}" sudo ln -s /usr/lib/x86_64-linux-gnu/apulse/${lib}.0 "/usr/lib/${lib}.0" sudo ln -s /usr/lib/x86_64-linux-gnu/apulse/${lib} "/usr/lib/x86_64-linux-gnu/${lib}" sudo ln -s /usr/lib/x86_64-linux-gnu/apulse/${lib}.0 "/usr/lib/x86_64-linux-gnu/${lib}.0" done
- Run
speaker-test
(you may need to run it twice for it to work)
PulseAudio is complicated and is often considered bloated. A tool called Apulse is a much better alternative, creating a compatibility layer between PulseAudio libraries and ALSA. 99% of PulseAudio apps will work with Apulse. Apulse is automatically used; no special invocation is needed.