Snap install on Chromebook can't connect to X11 window server

Since the installation process moved over to snap, I cannot run Processing 4.4.4. Installation via snap works fine with a few prior steps (below) but execution generates multiple X11 window server and other errors. This affects both X86 and ARM Chromebooks.

Prior to Processing 4.4, installation was via a .tgz file which worked fine with x86 and ARM Chromebooks (using these instructions, and this gotcha for ARM processors). Processing 4.4 appears to use snap exclusively which does not work out of the box with Chromebooks, but it can be made to work with these command line workarounds in the Linux Development Environment:

$ sudo apt install squashfstools
$ sudo apt install libsquashfuse0 squashfuse fuse
$ sudo apt install snapd

Restart your terminal session, then install a small test application

$ sudo snap install hello-world

Then run it from the command line to make sure that snaps are working correctly.

$ hello-world
Hello World!

If you see Hello World! then you’re good to go.

Now install Processing with

$ sudo snap install processing
processing 4.4.4 from Processing installed

When I start up Processing from the command line, I get a long list of X11, java and other errors that I have no idea how to fix.

$ processing
No protocol specified
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
        at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(Unknown Source)
        at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(Unknown Source)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(Unknown Source)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(Unknown Source)
        at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(Unknown Source)
        at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(Unknown Source)
        at java.desktop/sun.awt.X11.XToolkit.<clinit>(Unknown Source)
        at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(Unknown Source)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Unknown Source)
        at java.desktop/javax.swing.UIManager.getSystemLookAndFeelClassName(Unknown Source)
        at org.jetbrains.skiko.Actuals_awtKt.setSystemLookAndFeel(Actuals.awt.kt:16)
        at org.jetbrains.skiko.Setup.init(Setup.kt:25)
        at org.jetbrains.skiko.Setup.init$default(Setup.kt:6)
        at org.jetbrains.skiko.Library.load(Library.kt:59)
        at org.jetbrains.skia.impl.Library$Companion.staticLoad(Library.jvm.kt:12)
        at androidx.compose.ui.ConfigureSwingGlobalsForCompose_desktopKt.configureSwingGlobalsForCompose(ConfigureSwingGlobalsForCompose.desktop.kt:49)
        at androidx.compose.ui.ConfigureSwingGlobalsForCompose_desktopKt.configureSwingGlobalsForCompose$default(ConfigureSwingGlobalsForCompose.desktop.kt:38)
        at androidx.compose.ui.window.Application_desktopKt.application(Application.desktop.kt:112)
        at androidx.compose.ui.window.Application_desktopKt.application$default(Application.desktop.kt:107)
        at processing.app.ui.Start$Companion.main(Start.kt:32)
        at processing.app.Processing.run(Processing.kt:34)
        at com.github.ajalt.clikt.command.CoreSuspendingCliktCommandKt.parse(CoreSuspendingCliktCommand.kt:68)
        at com.github.ajalt.clikt.command.CoreSuspendingCliktCommandKt.main(CoreSuspendingCliktCommand.kt:39)
        at com.github.ajalt.clikt.command.CoreSuspendingCliktCommandKt.main(CoreSuspendingCliktCommand.kt:51)
        at processing.app.ProcessingKt.main(Processing.kt:45)
        at processing.app.ProcessingKt$main$2.invoke(Processing.kt)
        at processing.app.ProcessingKt$main$2.invoke(Processing.kt)
        at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:223)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
        at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
        at processing.app.ProcessingKt.main(Processing.kt)
$ 

I get the same errors on both an x86 and ARM Chromebook.

So, right now I’m stuck using Processing 4.3.4 which is the last version that provided .tgz installation files. So far, I have not been able to get version 4.4.4 running.

Is there a fix for this X11 window server error, or alternatively, will a .tgz installer be made available in addition to the snap file for current and future Processing versions? I guess that’s a question for the Processing github, but I thought I should ask here first. If snap is the preferred installer mechanism, then I’d really like to get it working on my Chromebook.

Thanks!

3 Likes

Thanks for the detailed report. This is very helpful! We’d really like for Processing to support installation on Chromebooks out of the box.

Would you mind opening an issue on the Processing GitHub repo? That would help us track the problem properly. Feel free to paste your message above. It’s already very well documented.

3 Likes

Thanks. Issue logged.

1 Like

Very clear, concise, useful, and well-written post.

What OS are you using?

What version of snapd are you running?

Other stuff:
Don’t forget to run sudo apt update before installing new packages.
Did you run sudo apt update && sudo apt upgrade; sudo apt autoclean; sudo apt autoremove and sudo snap refresh?
Snaps must be mounted at boot-time, and all old version also get mounted, which increases boot time; consider removing unneeded snaps with sudo snap remove --purge <snap-name>and old versions with this script:
http://www2.langdonstaab.ca/snap_autoremove

Thanks, @LangdonS

On an ARM Chromebook
Debian GNU/Linux 12 (bookworm)
snap 2.68.4
snapd 2.68.4
series 16
debian 12
kernel 6.6.76-g027a1f314c8f

On an x86 PC running FydeOS v20.0 (AMD graphics)[1]

Debian GNU/Linux 12 (bookworm)
snap 2.61.4
snapd 2.61.4
series 16
debian 12
kernel 6.6.56-05934-gf790fe104dba

Thanks for the reminder about updating repositories and upgrading prior to installing new packages. On both machines, OS and packages were up to date prior to installing snap and Processing.

Hope this helps.


  1. Strictly speaking, this is based on Chromium OS rather than Chrome OS, but it’s what’s running on my PC and I wanted to try to get Processing running in the Linux Development Environment. ↩︎