An open API service indexing awesome lists of open source software.

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

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_
```