@haibun/utils 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/npm-link-haibuns.js +0 -0
- package/build/scaffold/index.js +0 -0
- package/build/vcapture/index.js +1 -1
- package/build/vcapture/index.js.map +1 -1
- package/build/version.js +0 -1
- package/build/version.js.map +1 -1
- package/package.json +3 -3
- package/scaffold/tsconfig.json.in +0 -1
- package/vcapture/Dockerfile +32 -3
- package/vcapture/README.md +115 -0
- package/vcapture/docker-compose.yml +32 -1
- package/vcapture/setup-audio.sh +24 -0
- package/vcapture/start-vnc.sh +30 -0
- package/vcapture/supervisord.conf +124 -0
- package/scaffold/.eslintrc.in +0 -20
- package/scaffold/.prettierrc.in +0 -6
- package/scaffold/jest.config.js.in +0 -12
|
File without changes
|
package/build/scaffold/index.js
CHANGED
|
File without changes
|
package/build/vcapture/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { parseVCaptureArgs, runContainer } from "./vcapture-lib.js";
|
|
3
3
|
process.on('unhandledRejection', (err) => {
|
|
4
4
|
console.error('cli Unhandled Rejection:', err);
|
|
5
|
-
if (err && err.stack) {
|
|
5
|
+
if (err instanceof Error && err.stack) {
|
|
6
6
|
console.error(err.stack);
|
|
7
7
|
}
|
|
8
8
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAY,EAAE,EAAE;IACjD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAEtF,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAErD,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC9B,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iMAAiM,CAAC,CAAC;IACvQ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC"}
|
package/build/version.js
CHANGED
|
@@ -43,7 +43,6 @@ class Versioner {
|
|
|
43
43
|
this.updateSourceCurrentVersion();
|
|
44
44
|
await this.gitCommit('haibun', '.', ['./modules/core/src/currentVersion.ts']);
|
|
45
45
|
await this.forLocalAndExtraModules(this.npmInstall);
|
|
46
|
-
// biome-disable-next-line @typescript-eslint/no-misused-promises
|
|
47
46
|
await this.forLocalAndExtraModules(this.runTest);
|
|
48
47
|
await this.forLocalAndExtraModules(this.gitCommit);
|
|
49
48
|
await this.forLocalAndExtraModules(this.npmPublish);
|
package/build/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE/C,MAAM,SAAS;IAQM;IAPpB,oBAAoB,GAA+B,EAAE,CAAC;IAC9C,MAAM,GAAG,KAAK,CAAC;IACf,SAAS,GAAG,IAAI,CAAC;IACzB,SAAS,GAAG,KAAK,CAAC;IAElB,qBAAqB,GAA8B,EAAE,CAAC;IAEtD,YAAoB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;YACjE,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAC7D,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACzC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAiE,CAAC,CAAC;QAC3G,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC9E,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haibun/utils",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.5.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"files": [
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"license": "ISC",
|
|
29
29
|
"gitHead": "7cf9680bd922fb622fb59f1e6bf5b65284cb8fd5",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@haibun/cli": "3.
|
|
32
|
-
"@haibun/core": "3.
|
|
31
|
+
"@haibun/cli": "3.5.0",
|
|
32
|
+
"@haibun/core": "3.5.0"
|
|
33
33
|
}
|
|
34
34
|
}
|
package/vcapture/Dockerfile
CHANGED
|
@@ -30,6 +30,10 @@ RUN apt-get update && apt-get install -y \
|
|
|
30
30
|
xfce4 \
|
|
31
31
|
xfce4-terminal \
|
|
32
32
|
xterm \
|
|
33
|
+
# SSH server for VS Code Remote
|
|
34
|
+
openssh-server \
|
|
35
|
+
# Supervisor for robust process management
|
|
36
|
+
supervisor \
|
|
33
37
|
&& rm -rf /var/lib/apt/lists/*
|
|
34
38
|
|
|
35
39
|
RUN git clone https://github.com/novnc/noVNC.git /opt/noVNC && \
|
|
@@ -37,15 +41,40 @@ RUN git clone https://github.com/novnc/noVNC.git /opt/noVNC && \
|
|
|
37
41
|
|
|
38
42
|
RUN sed -i 's/geteuid/getppid/' /usr/bin/vlc
|
|
39
43
|
|
|
44
|
+
# Setup SSH
|
|
45
|
+
RUN mkdir /var/run/sshd && \
|
|
46
|
+
# Disable password auth, require keys
|
|
47
|
+
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && \
|
|
48
|
+
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config && \
|
|
49
|
+
echo "PermitRootLogin no" >> /etc/ssh/sshd_config && \
|
|
50
|
+
echo "StrictModes no" >> /etc/ssh/sshd_config
|
|
51
|
+
|
|
52
|
+
# Setup node user for SSH (matches host UID 1000 usually)
|
|
53
|
+
RUN mkdir -p /home/node/.ssh && chmod 700 /home/node/.ssh && \
|
|
54
|
+
chown -R node:node /home/node/.ssh && \
|
|
55
|
+
# Allow node to run sudo without password
|
|
56
|
+
echo "node ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
|
57
|
+
|
|
40
58
|
WORKDIR /app
|
|
41
59
|
|
|
42
60
|
COPY package*.json *.sh ./
|
|
61
|
+
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
43
62
|
RUN chmod +x *.sh
|
|
44
63
|
|
|
64
|
+
# Set default password for node user (just in case UI prompts appear)
|
|
65
|
+
RUN echo "node:node" | chpasswd
|
|
66
|
+
|
|
45
67
|
RUN npm i # && npm install kokoro-js # kokoro-js is installed on demand
|
|
46
68
|
RUN npx playwright install --with-deps
|
|
47
69
|
|
|
48
|
-
RUN mkdir -p /run/user/1000 && chmod 700 /run/user/1000
|
|
70
|
+
RUN mkdir -p /run/user/1000 && chown node:node /run/user/1000 && chmod 700 /run/user/1000
|
|
71
|
+
RUN mkdir -p /app/output && chown node:node /app/output
|
|
72
|
+
|
|
73
|
+
# Expose ports
|
|
74
|
+
EXPOSE 22 5930 8080 9222
|
|
75
|
+
|
|
76
|
+
# Environment defaults
|
|
77
|
+
ENV DISPLAY=:99
|
|
78
|
+
ENV RES=1920x1080
|
|
49
79
|
|
|
50
|
-
|
|
51
|
-
ENTRYPOINT ["./entrypoint.sh"]
|
|
80
|
+
ENTRYPOINT ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Haibun VCapture Container
|
|
2
|
+
|
|
3
|
+
A Docker container providing a graphical Linux environment for:
|
|
4
|
+
- **Recording sessions** with video/audio capture
|
|
5
|
+
- **Narrator testing** with TTS output
|
|
6
|
+
- **VS Code Remote Development** via SSH
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Build and start
|
|
12
|
+
docker compose up -d --build
|
|
13
|
+
|
|
14
|
+
# Check health
|
|
15
|
+
docker compose ps
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Access Methods
|
|
19
|
+
|
|
20
|
+
### 1. VNC via Browser (noVNC)
|
|
21
|
+
Open http://localhost:8080 in your browser for a web-based VNC client.
|
|
22
|
+
|
|
23
|
+
### 2. Native VNC Client
|
|
24
|
+
Connect to `localhost:5930` with any VNC client (TigerVNC, RealVNC, etc.)
|
|
25
|
+
|
|
26
|
+
### 3. VS Code Remote SSH
|
|
27
|
+
|
|
28
|
+
Add to your `~/.ssh/config`:
|
|
29
|
+
```
|
|
30
|
+
Host haibun-recorder
|
|
31
|
+
HostName localhost
|
|
32
|
+
Port 2222
|
|
33
|
+
User node
|
|
34
|
+
IdentityFile ~/.ssh/id_rsa
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then in VS Code: `Remote-SSH: Connect to Host...` → `haibun-recorder`
|
|
38
|
+
|
|
39
|
+
## Ports
|
|
40
|
+
|
|
41
|
+
| Port | Service | Description |
|
|
42
|
+
|------|---------|-------------|
|
|
43
|
+
| 8080 | noVNC | Web-based VNC access |
|
|
44
|
+
| 5930 | VNC | Native VNC client access |
|
|
45
|
+
| 2222 | SSH | VS Code Remote / terminal |
|
|
46
|
+
| 9222 | Chrome DevTools | Playwright debugging |
|
|
47
|
+
|
|
48
|
+
## SSH Key Setup
|
|
49
|
+
|
|
50
|
+
Your `~/.ssh/id_rsa.pub` is mounted automatically. If you use a different key:
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
volumes:
|
|
54
|
+
- ~/.ssh/your_key.pub:/home/dev/.ssh/authorized_keys:ro
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Recording Sessions
|
|
58
|
+
|
|
59
|
+
From inside the container (via SSH or VNC terminal):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
./capture-start.sh # Start ffmpeg recording
|
|
63
|
+
# ... do your work ...
|
|
64
|
+
./capture-stop.sh # Stop and save to output/
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Recordings are saved to `./output/` which is persisted on your host.
|
|
68
|
+
|
|
69
|
+
## Process Management
|
|
70
|
+
|
|
71
|
+
All services are managed by **supervisor** for robustness:
|
|
72
|
+
- Services auto-restart on failure
|
|
73
|
+
- Logs available in `./output/*.log`
|
|
74
|
+
- Check status: `docker compose exec haibun-recorder supervisorctl status`
|
|
75
|
+
|
|
76
|
+
## Customization
|
|
77
|
+
|
|
78
|
+
### Resolution
|
|
79
|
+
Change in docker-compose.yml:
|
|
80
|
+
```yaml
|
|
81
|
+
environment:
|
|
82
|
+
- RES=2560x1440
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### SSH Key Location
|
|
86
|
+
If your public key is not at `~/.ssh/id_rsa.pub`, specify it:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
SSH_PUBKEY_PATH=~/.ssh/id_ed25519.pub docker compose up -d
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Mount Your Project
|
|
93
|
+
By default, the parent directory (`../../..`) is mounted to `/workspace`. Override this:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
WORKSPACE_MOUNT=~/my-project docker compose up -d
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Troubleshooting SSH
|
|
100
|
+
|
|
101
|
+
If prompted for a password:
|
|
102
|
+
1. Ensure you mounted the **public key** (`.pub`), not private key.
|
|
103
|
+
2. If host key changed: `ssh-keygen -R "[localhost]:2222"`
|
|
104
|
+
3. Bypass host key checks:
|
|
105
|
+
```bash
|
|
106
|
+
```
|
|
107
|
+
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 node@localhost
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### VNC Password
|
|
111
|
+
To secure VNC access (defaults to no password):
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
VNC_PASSWORD=mysecret docker compose up -d
|
|
115
|
+
```
|
|
@@ -5,5 +5,36 @@ services:
|
|
|
5
5
|
dockerfile: Dockerfile
|
|
6
6
|
working_dir: /app
|
|
7
7
|
ports:
|
|
8
|
-
- "8080:8080" # noVNC
|
|
8
|
+
- "8080:8080" # noVNC web interface
|
|
9
9
|
- "9222:9222" # Chrome DevTools
|
|
10
|
+
- "2222:22" # SSH for VS Code Remote
|
|
11
|
+
- "5930:5930" # VNC direct (optional, for native VNC clients)
|
|
12
|
+
volumes:
|
|
13
|
+
# Mount your SSH public key for authentication
|
|
14
|
+
# Override with: SSH_PUBKEY_PATH=~/.ssh/id_ed25519.pub docker compose up
|
|
15
|
+
- ${SSH_PUBKEY_PATH:-~/.ssh/id_rsa.pub}:/home/node/.ssh/authorized_keys:ro,z
|
|
16
|
+
# Persist output/recordings
|
|
17
|
+
- ./output:/app/output
|
|
18
|
+
# Mount your project directory (Usage: WORKSPACE_MOUNT=~/dev/repo docker compose up)
|
|
19
|
+
- ${WORKSPACE_MOUNT:-../../..}:/workspace:z
|
|
20
|
+
environment:
|
|
21
|
+
- DISPLAY=:99
|
|
22
|
+
- RES=1920x1080
|
|
23
|
+
- VNC_PASSWORD=${VNC_PASSWORD:-} # Optional: set password for VNC access
|
|
24
|
+
shm_size: 1gb
|
|
25
|
+
# Health check to ensure services are running
|
|
26
|
+
healthcheck:
|
|
27
|
+
test: ["CMD-SHELL", "x11vnc -version && pgrep -x Xvfb > /dev/null"]
|
|
28
|
+
interval: 30s
|
|
29
|
+
timeout: 10s
|
|
30
|
+
retries: 3
|
|
31
|
+
start_period: 15s
|
|
32
|
+
# Graceful shutdown
|
|
33
|
+
stop_grace_period: 30s
|
|
34
|
+
# Resource limits (optional)
|
|
35
|
+
deploy:
|
|
36
|
+
resources:
|
|
37
|
+
limits:
|
|
38
|
+
memory: 4G
|
|
39
|
+
reservations:
|
|
40
|
+
memory: 1G
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup virtual audio sink after pipewire-pulse is ready
|
|
3
|
+
|
|
4
|
+
echo "Waiting for PulseAudio to be ready..."
|
|
5
|
+
max_attempts=30
|
|
6
|
+
attempt=1
|
|
7
|
+
|
|
8
|
+
while ! pactl info >/dev/null 2>&1; do
|
|
9
|
+
echo "Waiting for audio services... attempt $attempt of $max_attempts"
|
|
10
|
+
if [ $attempt -ge $max_attempts ]; then
|
|
11
|
+
echo "Audio services failed to start after $max_attempts attempts"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
sleep 1
|
|
15
|
+
attempt=$((attempt + 1))
|
|
16
|
+
done
|
|
17
|
+
|
|
18
|
+
echo "PulseAudio ready. Setting up virtual sink..."
|
|
19
|
+
pactl load-module module-virtual-sink sink_name=v1
|
|
20
|
+
pactl set-default-sink v1
|
|
21
|
+
pactl set-default-source v1.monitor
|
|
22
|
+
pactl info
|
|
23
|
+
|
|
24
|
+
echo "Audio setup complete."
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Start x11vnc with optional password support
|
|
3
|
+
# Use /home/node explicitly to avoid tilde expansion issues in supervisord
|
|
4
|
+
|
|
5
|
+
echo "START-VNC: Script started. USER=$(whoami) DISPLAY=$DISPLAY"
|
|
6
|
+
|
|
7
|
+
if [ -n "$VNC_PASSWORD" ]; then
|
|
8
|
+
# Trim whitespace (safe operation)
|
|
9
|
+
VNC_PASSWORD=$(echo "$VNC_PASSWORD" | xargs)
|
|
10
|
+
echo "START-VNC: VNC_PASSWORD is set (trimmed length: ${#VNC_PASSWORD}). Configuring password auth via file."
|
|
11
|
+
|
|
12
|
+
mkdir -p /home/node/.vnc
|
|
13
|
+
rm -f /home/node/.vnc/passwd
|
|
14
|
+
|
|
15
|
+
# Store password in file (standard VNC auth)
|
|
16
|
+
x11vnc -storepasswd "$VNC_PASSWORD" /home/node/.vnc/passwd
|
|
17
|
+
if [ $? -ne 0 ]; then
|
|
18
|
+
echo "START-VNC: Failed to store password!"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
chmod 600 /home/node/.vnc/passwd
|
|
22
|
+
ls -l /home/node/.vnc/passwd
|
|
23
|
+
|
|
24
|
+
# Use -rfbauth (standard) with verbose logging
|
|
25
|
+
exec /usr/bin/x11vnc -rfbport 5930 -display ${DISPLAY:-:99} -forever -noxdamage -shared -noshm -listen 0.0.0.0 -verbose -rfbauth /home/node/.vnc/passwd
|
|
26
|
+
else
|
|
27
|
+
echo "START-VNC: VNC_PASSWORD is NOT set. Starting without password..."
|
|
28
|
+
echo "START-VNC: WARNING - No password set. Anyone can connect."
|
|
29
|
+
exec /usr/bin/x11vnc -rfbport 5930 -display ${DISPLAY:-:99} -forever -noxdamage -shared -noshm -listen 0.0.0.0 -verbose -nopw
|
|
30
|
+
fi
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
[supervisord]
|
|
2
|
+
nodaemon=true
|
|
3
|
+
logfile=/app/output/supervisord.log
|
|
4
|
+
pidfile=/var/run/supervisord.pid
|
|
5
|
+
user=root
|
|
6
|
+
|
|
7
|
+
[program:dbus]
|
|
8
|
+
command=/usr/bin/dbus-daemon --system --nofork
|
|
9
|
+
autostart=true
|
|
10
|
+
autorestart=true
|
|
11
|
+
priority=10
|
|
12
|
+
stdout_logfile=/dev/stdout
|
|
13
|
+
stdout_logfile_maxbytes=0
|
|
14
|
+
stderr_logfile=/dev/stderr
|
|
15
|
+
stderr_logfile_maxbytes=0
|
|
16
|
+
|
|
17
|
+
[program:xvfb]
|
|
18
|
+
command=/usr/bin/Xvfb %(ENV_DISPLAY)s -screen 0 %(ENV_RES)sx24 -ac +extension GLX +render -noreset
|
|
19
|
+
user=node
|
|
20
|
+
autostart=true
|
|
21
|
+
autorestart=true
|
|
22
|
+
priority=20
|
|
23
|
+
stdout_logfile=/dev/stdout
|
|
24
|
+
stdout_logfile_maxbytes=0
|
|
25
|
+
stderr_logfile=/dev/stderr
|
|
26
|
+
stderr_logfile_maxbytes=0
|
|
27
|
+
|
|
28
|
+
[program:x11vnc]
|
|
29
|
+
command=/app/start-vnc.sh
|
|
30
|
+
user=node
|
|
31
|
+
environment=HOME="/home/node",USER="node",DISPLAY="%(ENV_DISPLAY)s",VNC_PASSWORD="%(ENV_VNC_PASSWORD)s"
|
|
32
|
+
autostart=true
|
|
33
|
+
autorestart=true
|
|
34
|
+
priority=30
|
|
35
|
+
startsecs=3
|
|
36
|
+
stdout_logfile=/dev/stdout
|
|
37
|
+
stdout_logfile_maxbytes=0
|
|
38
|
+
stderr_logfile=/dev/stderr
|
|
39
|
+
stderr_logfile_maxbytes=0
|
|
40
|
+
|
|
41
|
+
[program:novnc]
|
|
42
|
+
command=/opt/noVNC/utils/novnc_proxy --vnc localhost:5930 --listen 8080
|
|
43
|
+
autostart=true
|
|
44
|
+
autorestart=true
|
|
45
|
+
priority=40
|
|
46
|
+
startsecs=5
|
|
47
|
+
stdout_logfile=/dev/stdout
|
|
48
|
+
stdout_logfile_maxbytes=0
|
|
49
|
+
stderr_logfile=/dev/stderr
|
|
50
|
+
stderr_logfile_maxbytes=0
|
|
51
|
+
|
|
52
|
+
[program:pipewire]
|
|
53
|
+
command=/usr/bin/pipewire
|
|
54
|
+
environment=HOME="/home/node",XDG_RUNTIME_DIR="/run/user/1000"
|
|
55
|
+
user=node
|
|
56
|
+
autostart=true
|
|
57
|
+
autorestart=true
|
|
58
|
+
priority=50
|
|
59
|
+
stdout_logfile=/dev/stdout
|
|
60
|
+
stdout_logfile_maxbytes=0
|
|
61
|
+
stderr_logfile=/dev/stderr
|
|
62
|
+
stderr_logfile_maxbytes=0
|
|
63
|
+
|
|
64
|
+
[program:wireplumber]
|
|
65
|
+
command=/usr/bin/wireplumber
|
|
66
|
+
environment=HOME="/home/node",XDG_RUNTIME_DIR="/run/user/1000"
|
|
67
|
+
user=node
|
|
68
|
+
autostart=true
|
|
69
|
+
autorestart=true
|
|
70
|
+
priority=51
|
|
71
|
+
startsecs=2
|
|
72
|
+
stdout_logfile=/dev/stdout
|
|
73
|
+
stdout_logfile_maxbytes=0
|
|
74
|
+
stderr_logfile=/dev/stderr
|
|
75
|
+
stderr_logfile_maxbytes=0
|
|
76
|
+
|
|
77
|
+
[program:pipewire-pulse]
|
|
78
|
+
command=/usr/bin/pipewire-pulse
|
|
79
|
+
environment=HOME="/home/node",XDG_RUNTIME_DIR="/run/user/1000"
|
|
80
|
+
user=node
|
|
81
|
+
autostart=true
|
|
82
|
+
autorestart=true
|
|
83
|
+
priority=52
|
|
84
|
+
startsecs=3
|
|
85
|
+
stdout_logfile=/dev/stdout
|
|
86
|
+
stdout_logfile_maxbytes=0
|
|
87
|
+
stderr_logfile=/dev/stderr
|
|
88
|
+
stderr_logfile_maxbytes=0
|
|
89
|
+
|
|
90
|
+
[program:sshd]
|
|
91
|
+
command=/usr/sbin/sshd -D
|
|
92
|
+
autostart=true
|
|
93
|
+
autorestart=true
|
|
94
|
+
priority=60
|
|
95
|
+
stdout_logfile=/dev/stdout
|
|
96
|
+
stdout_logfile_maxbytes=0
|
|
97
|
+
stderr_logfile=/dev/stderr
|
|
98
|
+
stderr_logfile_maxbytes=0
|
|
99
|
+
|
|
100
|
+
[program:xfce4]
|
|
101
|
+
command=/usr/bin/xfce4-session
|
|
102
|
+
environment=HOME="/home/node",USER="node",DISPLAY="%(ENV_DISPLAY)s",XDG_RUNTIME_DIR="/run/user/1000"
|
|
103
|
+
user=node
|
|
104
|
+
autostart=true
|
|
105
|
+
autorestart=true
|
|
106
|
+
priority=70
|
|
107
|
+
startsecs=5
|
|
108
|
+
stdout_logfile=/dev/stdout
|
|
109
|
+
stdout_logfile_maxbytes=0
|
|
110
|
+
stderr_logfile=/dev/stderr
|
|
111
|
+
stderr_logfile_maxbytes=0
|
|
112
|
+
|
|
113
|
+
[program:audio-setup]
|
|
114
|
+
command=/app/setup-audio.sh
|
|
115
|
+
user=node
|
|
116
|
+
environment=HOME="/home/node",XDG_RUNTIME_DIR="/run/user/1000"
|
|
117
|
+
autostart=true
|
|
118
|
+
autorestart=false
|
|
119
|
+
startsecs=0
|
|
120
|
+
priority=55
|
|
121
|
+
stdout_logfile=/dev/stdout
|
|
122
|
+
stdout_logfile_maxbytes=0
|
|
123
|
+
stderr_logfile=/dev/stderr
|
|
124
|
+
stderr_logfile_maxbytes=0
|
package/scaffold/.eslintrc.in
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"parser": "@typescript-eslint/parser",
|
|
3
|
-
"parserOptions": {
|
|
4
|
-
"ecmaVersion": 12,
|
|
5
|
-
"sourceType": "module",
|
|
6
|
-
},
|
|
7
|
-
"plugins": ["@typescript-eslint"],
|
|
8
|
-
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
|
9
|
-
|
|
10
|
-
"rules": {
|
|
11
|
-
"@typescript-eslint/no-unused-vars": "warn",
|
|
12
|
-
// to enforce using type for object type definitions, can be type or interface
|
|
13
|
-
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
"env": {
|
|
17
|
-
"browser": false,
|
|
18
|
-
"es2021": true
|
|
19
|
-
}
|
|
20
|
-
}
|
package/scaffold/.prettierrc.in
DELETED