1.2.11 • Published 1 year ago

balena-electron-env v1.2.11

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

balena-electron-env

This is work in progress

What

Provides stuff that may be missing when running electron apps in kiosk mode (with no desktop environment):

  • a wifi configuration dialog
  • a file picker
  • an on-screen keyboard (onboard)
  • a dialog for mounting / umounting removable drives

Building

Build and upload this project's docker images ./image-builder.sh;

Using

  • In your electron app project create a Dockerfile that uses this project: FROM balenablocks/aarch64-balena-electron-env, replace aarch64 with the architecture you need (aarch64, armv7hf or amd64);
  • Put your electron app in /usr/src/app in this Dockerfile.

This works by running a window manager (metacity for now), dbus, an on-screen keyboard (onboard) and requiring some js code before your application.

The required js code replaces the file picker, adds buttons for opening the additional dialogs and injects some javascript in each window to summon the on-screen keyboard when an input is focused.

Components

Wifi configuration

Works by communicating with NetworkManager via DBus.

File picker

Replaces the default electron gtk file picker, can be constrained with BALENAELECTRONJS_CONSTRAINT_PATH.

On-screen keyboard

onboard is summoned via the session dbus each time an input is focused.

Mounting / umounting of removable drives

Watches and allows to mount / umount removable drives in BALENAELECTRONJS_MOUNTS_ROOT.

Environment variables:

NameDescriptionDefault Value
BALENAELECTRONJS_MOUNTS_ROOTWhere the removable drives should be mounted/tmp/media
BALENAELECTRONJS_CONSTRAINT_PATHOnly files in this path will be accessible through the file picker
BALENAELECTRONJS_OVERLAY_DELAYDelay before showing the overlay icons200
BALENAELECTRONJS_REMOTE_DEBUGGING_PORTEnable electron remote debugging on this port
BALENAELECTRONJS_SLEEP_BUTTON_POSITIONSleep button position: x,y
BALENAELECTRONJS_WIFI_BUTTON_POSITIONWifi button position: x,y
BALENAELECTRONJS_SETTINGS_BUTTON_POSITIONSettings button position: x,y
BALENAELECTRONJS_MOUNTS_BUTTON_POSITIONMounts button position: x,y
BALENAELECTRONJS_SCREENSAVER_ON_COMMANDShell command to run when the screensaver is turned on
BALENAELECTRONJS_SCREENSAVER_OFF_COMMANDShell command to run when the screensaver is turned off
BALENAELECTRONJS_UPDATES_ONLY_DURING_SCREENSAVEROnly allows application updates to happen while the screensaver is on if set
BALENAELECTRONJS_SCREENSAVER_DELAY_OVERRIDEOverrides the screensaver delay from the settings: number in minutes or 'never'
BALENAELECTRONJS_ZOOM_FACTORZoom factor for overlay windows size and position1
DBUS_SYSTEM_BUS_ADDRESSDBus address for communicating with NetworkManagerunix:path=/host/run/dbus/system_bus_socket
XRANDR_ARGSRotate the screen with xrandr $XRANDR_ARGS, example: "-o inverted -x"

Remote methods:

Call them with electron.ipcRenderer.invoke(methodName, ...parameters) from any renderer process.

NameParametersDescription
mount-drivedrivePath: stringMounts all partitions of the drive, drivePath is the name of the drive in /dev/disk/by-path/
disable-screensaverDisables the screensaver, does not change the sleepDelay setting
enable-screensaverEnables the screensaver, does not change the sleepDelay setting

Utilities

  • clicklock is available in /usr/bin/clicklock and will be run when the screensaver goes on