https://github.com/kmaehashi/xojo-docker
Run Xojo on Docker
https://github.com/kmaehashi/xojo-docker
docker xojo
Last synced: 6 months ago
JSON representation
Run Xojo on Docker
- Host: GitHub
- URL: https://github.com/kmaehashi/xojo-docker
- Owner: kmaehashi
- Created: 2019-10-22T14:31:03.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-05-04T08:48:27.000Z (about 4 years ago)
- Last Synced: 2025-07-04T13:07:11.365Z (about 1 year ago)
- Topics: docker, xojo
- Language: Dockerfile
- Size: 9.77 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Xojo on Docker
Docker images to run [Xojo](https://xojo.com/) IDE and desktop apps.
Images are hosted on [Docker Hub](https://hub.docker.com/r/kmaehashi/xojo-docker).
## Usage
### Via X11 Forwarding
First connect to a Linux host running Docker with SSH X11 forwarding enabled.
```sh
ssh -Y host
```
Then start the container to run Xojo IDE.
```sh
docker run \
--rm \
--net host \
--env DISPLAY \
--volume ~/.Xauthority:/root/.Xauthority \
kmaehashi/xojo-docker:xojo2022r11-ubuntu20.04
```
Notes:
* `--net host`: The container shares the same network namespace as the Docker host.
This is mandatory to connect to a TCP port for X11 forwarding from the container, as the port only binds to `localhost` of the Docker host.
* `--env DISPLAY`: X11 applications (i.e., Xojo IDE) use this information to know the TCP port for X11 forwarding.
* `--volume ~/.Xauthority:/root/.Xauthority`: X11 applications inside the container use this file as the authorization cookie to the forwarded X11 server.
Remote Debugger can also be run inside the container.
```sh
docker run \
--rm \
--net host \
--env DISPLAY \
--volume ~/.Xauthority:/root/.Xauthority \
kmaehashi/xojo-docker:xojo2022r11-ubuntu20.04 \
"/opt/xojo/xojo/Extras/Remote Debugger Desktop/Remote Debugger Desktop 64-Bit/Remote Debugger Desktop"
```
To run your application instead of the IDE, specify the application path as an argument.
You can use [`desktop-runtime` image](https://hub.docker.com/r/kmaehashi/xojo-desktop-runtime), which provides smaller footprint than `xojo-{VERSION}` images.
```sh
docker run \
--rm \
--net host \
--env DISPLAY \
--volume ~/.Xauthority:/root/.Xauthority \
--volume /local/path/to/app_dir:/container/path/to/app_dir \
kmaehashi/xojo-desktop-runtime:ubuntu20.04 \
/container/path/to/app_dir/app
```
Hints:
* Make sure that `xauth` command is available on the Docker host when using SSH X11 forwarding.
* SELinux may prevent accessing `.Xauthority` from inside Docker containers.
* Containers launched using the `docker` command line above are volatile as `--rm` option is specified.
Consider specifying additional volumes to keep your Xojo configuration and projects outside of the container.
The IDE stores preferences (including licenses) under `/root`.
* `/opt/xojo/xojo` is a symbolic link to the current Xojo root directory (e.g., `/opt/xojo/xojo/xojo2019r2`).
* To install additional plugins you will need a custom Dockerfile based on `xojo-VERSION` image.
Place plugin files (`*.xojo_plugin`) under `/opt/xojo/xojo/Plugins/`.
### Headless Mode
You can run your desktop application in headless (no-display) mode for e.g. testing purposes or contiguous integration systems.
Before starting your application you need to source the [`headless`](desktop-runtime/headless) script, which internally configures a virtual X11 server (`Xvfb`).
```sh
docker run \
--rm \
--volume /local/path/to/app_dir:/container/path/to/app_dir \
kmaehashi/xojo-desktop-runtime:ubuntu20.04 \
bash -c 'source /headless; /container/path/to/app_dir/app'
```
Hints:
* Use `System.DebugLog` method in Desktop apps to print to the standard output.
* You can access the command line arguments via `/proc/self/cmdline`, e.g.:
```xojo
Public Function Arguments() as String()
Var ret() As String
#if TargetLinux And TargetDesktop
Var s As TextInputStream = TextInputStream.Open(New FolderItem("/proc/self/cmdline"))
Try
Var chunks() As String
While True
Var buf As String = s.Read(12)
If buf.Length = 0 Then Exit
chunks.Append(buf)
Wend
ret = String.FromArray(chunks, "").Split(Chr(0))
Finally
s.Close()
End Try
#endif
Return ret
End Function
```
### Debug-Running Projects
Debug-run your application inside the Docker container, using the project source code and Xojo IDE.
```sh
cat _EOF_ | nc -U /tmp/XojoIDE
OpenFile("/path/to/project")
DoCommand("RunApp")
_EOF_
```