App Submission: Ashigaru Terminal
App Submission
Ashigaru Terminal
...
Icon
...
Gallery images
I have tested my app on:
- [ ] umbrelOS on a Raspberry Pi
- [X] umbrelOS on an Umbrel Home
- [X] umbrelOS on Linux VM
Moin @al-lac!
Just a quick update: I’m currently clarifying with the app developer about getting a proper multi-arch image, so we can resolve the linter issue.⚡
@TheNymMan FYI
Moin @al-lac!
Just a quick update: I’m currently clarifying with the app developer about getting a proper multi-arch image, so we can resolve the linter issue.⚡
@TheNymMan FYI
The multi-arch image is now available and everything is working fine. ✅
Hmm, very weird issue. The server experiences an out-of-memory exception because it tries to allocate memory for 1073741816 file descriptors. Also this number is very close to 2^30, so I suspect an integer overflow (libwebsockets is written in C). The dockerfile has no option to set the ulimit for the process manually. So I also have no further idea...
@sharknoon thanks for the quick check! I added this to the docker compose, then it starts, but I have the same reconnecting issue as on the Pi 5:
app:
image: ghcr.io/thenymman/ashi-t:1.0.0@sha256:049f6d8f53f0023c9d448105a030303fa7228cbb5a901c05f01831c5f654ca48
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/tor:/home/ashigaru/.ashigaru/tor
- ${APP_DATA_DIR}/data/wallets:/home/ashigaru/.ashigaru/wallets
- ${APP_DATA_DIR}/data/config:/home/ashigaru/.ashigaru
ulimits:
nofile:
soft: 65536
hard: 65536
Maybe @TheNymMan can help find a way to get the app running on ARM64.
I think the issue is because Ashigaru don't have any ARM compatible binaries which is why it works perfectly on the Umbrel home or my VMs but not the RPI.
Unfortunately my skills are limited to what I've been able to do so far with the image here-- https://github.com/TheNymMan/Ashi-T
Unless someone has the technical ability to make this image work for ARM I guess this app can't be submitted :(
Sucks because it works great on my Home.
I have also installed it on my raspberry pi and I experience the exact same issue.
What is the point of this app submission if Umbrel has not yet updated its Dojo server container?
I have also installed it on my raspberry pi and I experience the exact same issue.
Hey @sharknoon @al-lac @TheNymMan
I built an ARM deb package, added gotty as the terminal, and pushed a fresh multiarch image. Everything is already included in the latest commit of this PR.
Just a heads-up: I do not have a Raspberry Pi here, so I cannot test the ARM build myself. If you can give it a quick try on your Pi and let me know how it behaves, that would be super helpful.
@dennysubke thanks for making the adaptions! 👍
I tested it on my arm64 based dev instance and it seems like gotty is using the wrong architecture here:
ashigaru_terminal_1 | Nov 21 11:25:58.255 [notice] Opening Socks listener on 127.0.0.1:9050
ashigaru_terminal_1 | Nov 21 11:25:58.255 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
ashigaru_terminal_1 | /usr/local/bin/docker-entrypoint.sh: line 20: /usr/local/bin/gotty: cannot execute binary file: Exec format error
ashigaru_terminal_1 | /usr/local/bin/docker-entrypoint.sh: line 20: /usr/local/bin/gotty: Success
ashigaru_terminal_1 | Nov 21 11:26:13.254 [notice] Tor 0.4.6.10 running on Linux with Libevent 2.1.12-stable, OpenSSL 3.0.2, Zlib 1.2.11, Liblzma 5.2.5, Libzstd 1.4.8 and Glibc 2.35 as libc.
ashigaru_terminal_1 | Nov 21 11:26:13.254 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://support.torproject.org/faq/staying-anonymous/
ashigaru_terminal_1 | Nov 21 11:26:13.254 [notice] Read configuration file "/etc/tor/torrc".
ashigaru_terminal_1 | Nov 21 11:26:13.255 [notice] Opening Socks listener on 127.0.0.1:9050
ashigaru_terminal_1 | Nov 21 11:26:13.255 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
ashigaru_terminal_1 | /usr/local/bin/docker-entrypoint.sh: line 20: /usr/local/bin/gotty: cannot execute binary file: Exec format error
ashigaru_terminal_1 | /usr/local/bin/docker-entrypoint.sh: line 20: /usr/local/bin/gotty: Success
@al-lac
I rebuilt the ARM version and updated the PR.
Please give it another test and let me know how it goes! 🙌
Hey @dennysubke,
I now can access the terminal again, but as soon as I open it i get this error on it:
Loading library glass from resource failed: java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libglass.so: libX11.so.6: cannot open shared object file: No such file or directory
java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libglass.so: libX11.so.6: cannot open shared object file: No such file or directory
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.load0(Unknown Source)
at java.base/java.lang.System.load(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.<clinit>(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.run(Unknown Source)
at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.startToolkit(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)Exception in thread "main" java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no glass in java.library.path: :/opt/ashigaru-terminal/lib/app:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.startToolkit(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: no glass in java.library.path: :/opt/ashigaru-terminal/lib/app:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.loadLibrary0(Unknown Source)
at java.base/java.lang.System.loadLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.<clinit>(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(Unknown Source)
at javafx.graphics@18/com.sun.glass.ui.Application.run(Unknown Source)
... 7 more
If I ctrl+c out of the errored command I just get the re-connection loop again.
Hey @dennysubke,
I now can access the terminal again, but as soon as I open it i get this error on it:
Loading library glass from resource failed: java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libglass.so: libX11.so.6: cannot open shared object file: No such file or directory java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libglass.so: libX11.so.6: cannot open shared object file: No such file or directory at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(Unknown Source) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source) at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source) at java.base/java.lang.Runtime.load0(Unknown Source) at java.base/java.lang.System.load(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.<clinit>(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.run(Unknown Source) at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.startToolkit(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)Exception in thread "main" java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no glass in java.library.path: :/opt/ashigaru-terminal/lib/app:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.startup(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.startToolkit(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.lang.UnsatisfiedLinkError: no glass in java.library.path: :/opt/ashigaru-terminal/lib/app:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source) at java.base/java.lang.Runtime.loadLibrary0(Unknown Source) at java.base/java.lang.System.loadLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown Source) at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.loadNativeLibrary(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.<clinit>(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(Unknown Source) at javafx.graphics@18/com.sun.glass.ui.Application.run(Unknown Source) ... 7 moreIf I
ctrl+cout of the errored command I just get the re-connection loop again.
@al-lac
Could you give it another try? 🙏
Hey @dennysubke, now the error is gone, but sadly still the re-connecting loop is happening.
Hey @dennysubke, now the error is gone, but sadly still the re-connecting loop is happening.
![]()
What do the logs say?
@dennysubke
[2025/11/21 13:55:06:4626] N: ttyd 1.6.3 (libwebsockets 4.0.20)
[2025/11/21 13:55:06:4626] N: tty configuration:
[2025/11/21 13:55:06:4626] N: start command: tmux attach-session -t ashigaru
[2025/11/21 13:55:06:4626] N: close signal: SIGHUP (1)
[2025/11/21 13:55:06:4626] N: terminal type: xterm-256color
[2025/11/21 13:55:06:4633] N: Using foreign event loop...
[2025/11/21 13:55:06:4634] N: Listening on port: 7682
Nov 21 13:55:06.466 [notice] Tor 0.4.6.10 running on Linux with Libevent 2.1.12-stable, OpenSSL 3.0.2, Zlib 1.2.11, Liblzma 5.2.5, Libzstd 1.4.8 and Glibc 2.35 as libc.
Nov 21 13:55:06.466 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://support.torproject.org/faq/staying-anonymous/
Nov 21 13:55:06.466 [notice] Read configuration file "/etc/tor/torrc".
Nov 21 13:55:06.468 [notice] Opening Socks listener on 127.0.0.1:9050
Nov 21 13:55:06.468 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
Nov 21 13:55:06.000 [warn] You are running Tor as root. You don't need to, and you probably shouldn't.
Nov 21 13:55:06.000 [notice] Bootstrapped 0% (starting): Starting
Nov 21 13:55:06.000 [notice] Starting with guard context "default"
Nov 21 13:55:07.000 [notice] Bootstrapped 5% (conn): Connecting to a relay
Nov 21 13:55:08.000 [notice] Bootstrapped 10% (conn_done): Connected to a relay
Nov 21 13:55:08.000 [notice] Bootstrapped 14% (handshake): Handshaking with a relay
Nov 21 13:55:13.000 [notice] Bootstrapped 15% (handshake_done): Handshake with a relay done
Nov 21 13:55:13.000 [notice] Bootstrapped 20% (onehop_create): Establishing an encrypted directory connection
Nov 21 13:55:13.000 [notice] Bootstrapped 25% (requesting_status): Asking for networkstatus consensus
Nov 21 13:55:14.000 [notice] Bootstrapped 30% (loading_status): Loading networkstatus consensus
Nov 21 13:55:16.000 [notice] I learned some more directory information, but not enough to build a circuit: We have no usable consensus.
Nov 21 13:55:16.000 [notice] Bootstrapped 40% (loading_keys): Loading authority key certs
Nov 21 13:55:16.000 [warn] At least one protocol listed as recommended in the consensus is not supported by this version of Tor. You should upgrade. This version of Tor will eventually stop working as a client on the Tor network. The missing protocols are: FlowCtrl=2 Relay=4
Nov 21 13:55:16.000 [notice] The current consensus has no exit nodes. Tor can only build internal paths, such as paths to onion services.
Nov 21 13:55:16.000 [notice] Bootstrapped 45% (requesting_descriptors): Asking for relay descriptors
Nov 21 13:55:16.000 [notice] I learned some more directory information, but not enough to build a circuit: We need more microdescriptors: we have 0/10056, and can only build 0% of likely paths. (We have 0% of guards bw, 0% of midpoint bw, and 0% of end bw (no exits in consensus, using mid) = 0% of path bw.)
Nov 21 13:55:16.000 [notice] Bootstrapped 50% (loading_descriptors): Loading relay descriptors
Nov 21 13:55:17.000 [notice] The current consensus contains exit nodes. Tor can build exit and internal paths.
Nov 21 13:55:20.000 [notice] Bootstrapped 56% (loading_descriptors): Loading relay descriptors
Nov 21 13:55:20.000 [notice] Bootstrapped 63% (loading_descriptors): Loading relay descriptors
Nov 21 13:55:20.000 [notice] Bootstrapped 70% (loading_descriptors): Loading relay descriptors
Nov 21 13:55:21.000 [notice] Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits
Nov 21 13:55:21.000 [notice] Bootstrapped 80% (ap_conn): Connecting to a relay to build circuits
Nov 21 13:55:21.000 [notice] Bootstrapped 85% (ap_conn_done): Connected to a relay to build circuits
Nov 21 13:55:21.000 [notice] Bootstrapped 89% (ap_handshake): Finishing handshake with a relay to build circuits
Nov 21 13:55:21.000 [notice] Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits
Nov 21 13:55:21.000 [notice] Bootstrapped 95% (circuit_create): Establishing a Tor circuit
Nov 21 13:55:22.000 [notice] Bootstrapped 100% (done): Done
[2025/11/21 13:55:37:3204] N: HTTP / - 10.21.0.157
[2025/11/21 13:55:37:4018] N: HTTP /token - 10.21.0.157
[2025/11/21 13:55:37:4410] N: WS /ws - 10.21.0.157, clients: 1
[2025/11/21 13:55:37:4509] N: started process, pid: 58
[2025/11/21 13:55:37:4755] N: process exited with code 1, pid: 58
[2025/11/21 13:55:37:4764] N: WS closed from 10.21.0.157, clients: 0
[2025/11/21 13:55:37:5724] N: HTTP /token - 10.21.0.157
[2025/11/21 13:55:37:5902] N: WS /ws - 10.21.0.157, clients: 1
....
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
== uv_read failed with error -5: i/o error
...
[2025/11/21 13:55:41:1407] N: process exited with code 1, pid: 1066
[2025/11/21 13:55:41:1409] N: WS closed from 10.21.0.157, clients: 0
[2025/11/21 13:55:41:1440] N: HTTP /token - 10.21.0.157
[2025/11/21 13:55:41:1495] N: WS /ws - 10.21.0.157, clients: 1
[2025/11/21 13:55:41:1513] N: started process, pid: 1070
[2025/11/21 13:55:41:1554] N: process exited with code 1, pid: 1070
[2025/11/21 13:55:41:1556] N: WS closed from 10.21.0.157, clients: 0
[2025/11/21 13:55:41:1579] N: HTTP /token - 10.21.0.157
[2025/11/21 13:55:41:1635] N: WS /ws - 10.21.0.157, clients: 1
[2025/11/21 13:55:41:1648] N: started process, pid: 1074
....
From that point on it is just reconnecting logs.
@al-lac
Could you please pull the new image on your Raspberry Pi?
After that, open the app and you should see a terminal right away.
Inside that terminal please run:
/opt/Ashigaru-terminal/bin/Ashigaru-terminal
Then send me any Java errors or logs you get.
Thanks a lot! 🙏
@dennysubke here you go:
root@8dd3e68b0780:/home/ashigaru# /opt/Ashigaru-terminal/bin/Ashigaru-terminal
Loading library prism_es2 from resource failed: java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libprism_es2.so: libGL.so.1: cannot open shared object file: No such file or directory
java.lang.UnsatisfiedLinkError: /root/.openjfx/cache/18+12/libprism_es2.so: libGL.so.1: cannot open shared object file: No such file or directory
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.load0(Unknown Source)
at java.base/java.lang.System.load(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(Unknown Source)
at javafx.graphics@18/com.sun.glass.utils.NativeLibLoader.loadLibrary(Unknown Source)
at javafx.graphics@18/com.sun.prism.es2.ES2Pipeline.lambda$static$0(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at javafx.graphics@18/com.sun.prism.es2.ES2Pipeline.<clinit>(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/java.lang.Class.forName(Unknown Source)
at javafx.graphics@18/com.sun.prism.GraphicsPipeline.createPipeline(Unknown Source)
at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(Unknown Source)
at javafx.graphics@18/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
No display detected. This application has not been built to run on a headless (no display) system.
⚠️ Linting finished with 1 warning ⚠️
Thank you for your submission! This is an automated linter that checks for common issues in pull requests to the Umbrel App Store.
Please review the linting results below and make any necessary changes to your submission.
Linting Results
| Severity | File | Description |
|---|---|---|
| ℹ️ | ashigaru/docker-compose.yml |
Potentially using unsafe user in service "terminal": The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000. |
| ⚠️ | ashigaru/umbrel-app.yml |
"icon" and "gallery" needs to be empty for new app submissions: The "icon" and "gallery" fields must be empty for new app submissions as it is being created by the Umbrel team. |
Legend
| Symbol | Description |
|---|---|
| ❌ | Error: This must be resolved before this PR can be merged. |
| ⚠️ | Warning: This is highly encouraged to be resolved, but is not strictly mandatory. |
| ℹ️ | Info: This is just for your information. |
Hey @al-lac!
Thanks again for testing. I have now added a new approach to get the ARM build running at all. As you already noticed, the core issue is that JavaFX instantly crashes on ARM64 when there is no working display pipeline, which causes the process to exit immediately and that is exactly why ttyd keeps reconnecting in a loop.
To work around this, I have now split the setup:
-
AMD64 still works exactly as before using TTYD TMUX
-
ARM64 now uses a separate variant with Xvfb x11vnc noVNC so JavaFX gets a virtual display environment instead of crashing right away
This is just a technical test to see whether JavaFX can run more stably on ARM with this setup. Since I do not have a Raspberry Pi myself, it would be super helpful if you could test this version and see whether it works on your side.
And hopefully this is the second to last attempt. If it finally produces logs now, I will get it on the next try for sure. 🤞😄
Hey @dennysubke,
this is what I get now, just a directory listing 😄
Hey @al-lac,
I think I have to admit defeat on this one for now.
After your last test it is clear that the whole Xvfb x11vnc noVNC setup is working correctly on ARM64. Tor starts fine, the virtual display is active, and the VNC proxy is reachable, so the environment itself is no longer the problem.
The remaining issue is inside the application. The ARM64 JavaFX build still exits instantly with the message
“No display detected. This application has not been built to run on a headless system.”
All native dependencies are installed, the virtual display is running, and the GUI stack is ready, but JavaFX refuses to render and aborts before the first frame.
Without a real Raspberry Pi I cannot debug this any further.
So I am putting the ARM build on hold for now. Thanks a lot for all the testing. We got extremely close, but JavaFX on ARM64 in a headless environment is the final blocker. 🙏
Hey @TheNymMan
If you have a moment, could you take another look?
https://github.com/dennysubke/ashigaru-terminal
Maybe @PavelTheCoder or @linkinparkrulz could give a hand here.