448 Commits
v1 ... master

Author SHA1 Message Date
Chris Richardson
06b3cdadb4 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 6m0s
Main / Push arm64v8 image (push) Successful in 2m2s
Main / Push manifest (push) Failing after 14s
Main / Publish GitHub release (push) Has been skipped
2025-07-11 01:38:08 -04:00
Chris Richardson
2ba5712784 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 4m13s
Main / Push arm64v8 image (push) Successful in 2m24s
Main / Push manifest (push) Failing after 14s
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:59:02 -04:00
Chris Richardson
0c21d5e626 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m39s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:52:56 -04:00
Chris Richardson
5be7976f0a asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m53s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:45:31 -04:00
Chris Richardson
959769a05c asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 27s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:40:16 -04:00
Chris Richardson
6883446078 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 28s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:32:56 -04:00
Chris Richardson
dc02217869 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 22s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:28:58 -04:00
Chris Richardson
968880f2cc asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 10m46s
Main / Push arm64v8 image (push) Successful in 2m2s
Main / Push manifest (push) Failing after 16s
Main / Publish GitHub release (push) Has been skipped
2025-07-10 22:20:14 -04:00
Chris Richardson
01e08053a2 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 1m29s
Main / Push arm64v8 image (push) Failing after 1m7s
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 21:49:19 -04:00
Chris Richardson
6fd275c24b asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m1s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 21:21:36 -04:00
Chris Richardson
f3294ccbdc asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 8m59s
Main / Push arm64v8 image (push) Failing after 54s
2025-07-10 21:05:49 -04:00
Chris Richardson
5a9a1d969e asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 57s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:56:23 -04:00
Chris Richardson
71b2f80c3a asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 1m1s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:47:49 -04:00
Chris Richardson
00e50f9bb5 asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 10m5s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:29:08 -04:00
Chris Richardson
9b5bffe885 asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 10m17s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:09:13 -04:00
Chris Richardson
106fc86664 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 8m3s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 18:49:48 -04:00
Chris Richardson
b11206ea40 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m12s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 18:26:50 -04:00
Héctor Molinero Fernández
208f30a208 v126 2025-06-21 13:50:39 +02:00
Héctor Molinero Fernández
933f557a3e Disable glx module if /dev/dri/ does not exist 2025-06-21 13:49:35 +02:00
Héctor Molinero Fernández
4a45adaa58 Use dummy driver in headless Xorg 2025-06-21 13:49:26 +02:00
Héctor Molinero Fernández
558f1ec368 Fix service enabling conditions for xrdp bootstrap and headless X server 2025-06-21 12:43:03 +02:00
Héctor Molinero Fernández
29799461a9 v125 2025-06-13 01:09:47 +02:00
Héctor Molinero Fernández
a0a0b44fdc Add wlfreerdp script 2025-06-13 01:09:39 +02:00
Héctor Molinero Fernández
cdbd8bdcec Update xrdp PulseAudio module to v0.8 2025-06-13 01:04:09 +02:00
Héctor Molinero Fernández
fad6c80479 Update xorgxrdp to v0.10.4 2025-06-13 01:01:58 +02:00
Héctor Molinero Fernández
bf90f2e2c9 Update xrdp to v0.10.3 2025-06-13 01:00:56 +02:00
Héctor Molinero Fernández
f5bc5c507b Update TurboVNC to v3.2 2025-06-13 01:00:36 +02:00
Héctor Molinero Fernández
d87e512947 Update VirtualGL to v3.1.3 2025-06-13 00:59:57 +02:00
Héctor Molinero Fernández
68aa4e41b2 Update libjpeg-turbo to v3.1.1 2025-06-13 00:59:42 +02:00
Héctor Molinero Fernández
502bc991a4 v124 2025-05-25 19:09:31 +02:00
Héctor Molinero Fernández
746608daf3 Update Nvidia driver 2025-05-25 19:09:28 +02:00
Héctor Molinero Fernández
87fdd8774c v123 2025-03-04 23:19:50 +01:00
Héctor Molinero Fernández
1a2a2caa5b Update TurboVNC to v3.1.4 2025-03-04 22:44:51 +01:00
Héctor Molinero Fernández
ba6406cb67 Install Firefox from the official repository 2025-03-04 21:07:54 +01:00
Héctor Molinero Fernández
83eb922efd v122 2024-12-29 15:57:07 +01:00
Héctor Molinero Fernández
7c9d80b1b0 Enable H264, FreeType 2 and ImLib2 in XRDP build 2024-12-29 14:04:41 +01:00
Héctor Molinero Fernández
6869a904bc Update xrdp to v0.10.2 2024-12-29 13:15:57 +01:00
Héctor Molinero Fernández
88bf0653ab Update xorgxrdp to v0.10.3 2024-12-23 17:55:40 +01:00
Héctor Molinero Fernández
11368a2986 Update TurboVNC to v3.1.3 2024-12-23 17:55:25 +01:00
Héctor Molinero Fernández
2cc9bb11e6 Update VirtualGL to v3.1.2 2024-12-23 17:55:11 +01:00
Héctor Molinero Fernández
bd0dec32de Update libjpeg-turbo to v3.1.0 2024-12-23 17:54:57 +01:00
Héctor Molinero Fernández
8c37a4b662 v121 2024-08-04 20:40:59 +02:00
Héctor Molinero Fernández
9d800ab6f3 Update xorgxrdp to v0.10.2 2024-08-04 20:40:30 +02:00
Héctor Molinero Fernández
27c10c2d05 Update xrdp to v0.10.1 2024-08-04 20:40:08 +02:00
Héctor Molinero Fernández
d0da1406d3 v120 2024-07-26 23:17:17 +02:00
Héctor Molinero Fernández
48a2587abd Use t64 packages 2024-07-26 23:03:45 +02:00
Héctor Molinero Fernández
254306f608 Remove checkinstall 2024-07-26 22:59:48 +02:00
Héctor Molinero Fernández
0984d2aaf2 Use AVC444 2024-07-25 18:30:22 +02:00
Héctor Molinero Fernández
2a9a7c8f9d v119 2024-07-22 17:29:20 +02:00
Héctor Molinero Fernández
4f81948637 Clean up /run/ at startup and move the directory creation logic to each service 2024-07-22 17:27:13 +02:00
Héctor Molinero Fernández
f70e8725c0 v118 2024-07-21 22:52:04 +02:00
Héctor Molinero Fernández
35ac0ea77d Do not copy QEMU user binary 2024-07-20 16:43:33 +02:00
Héctor Molinero Fernández
f8aa69c376 Use "hectorm/ghaction-release" action 2024-07-20 15:42:00 +02:00
Héctor Molinero Fernández
8918d7cb6d Use "hectorm/ghaction-trigger-workflow" action 2024-07-20 14:53:43 +02:00
Héctor Molinero Fernández
3823e68554 Update Dependabot config 2024-07-20 12:51:50 +02:00
Héctor Molinero Fernández
3414b17506 Reformat GitHub YAML files 2024-07-20 12:02:09 +02:00
Héctor Molinero Fernández
573d30cc72 v117 2024-05-28 19:36:31 +02:00
Héctor Molinero Fernández
649bc33cb7 Update base image to Ubuntu 24.04 2024-05-28 19:36:22 +02:00
Héctor Molinero Fernández
e732499b5b v116 2024-05-15 23:11:24 +02:00
Héctor Molinero Fernández
ea5444c43a Remove transitional packages 2024-05-15 22:55:20 +02:00
Héctor Molinero Fernández
7f89089a66 Update NVIDIA driver to 550 2024-05-15 22:54:18 +02:00
Héctor Molinero Fernández
90e45a0a73 Merge pull request #28 from colpari/colpari-xrdp-0.10.0-pr
bump dependencies: xrdp v0.10.0, xorgxrdp v0.10.1, libjpeg-turbo 3.0.3
2024-05-15 22:52:53 +02:00
Frank Fricke
773ac39da5 bump dependencies: xrdp v0.10.0, xorgxrdp v0.10.1, libjpeg-turbo 3.0.3 2024-05-15 19:46:47 +02:00
Héctor Molinero Fernández
1f1e45efed v115 2024-04-04 22:19:12 +02:00
Héctor Molinero Fernández
caa77669a2 Update xrdp to v0.9.25.1 2024-04-04 22:19:05 +02:00
Héctor Molinero Fernández
8e98e5fa8c v114 2024-03-12 00:11:14 +01:00
Héctor Molinero Fernández
e56f28a0eb Update xorgxrdp to v0.9.20 2024-03-12 00:11:05 +01:00
Héctor Molinero Fernández
33f4616cd4 Update xrdp to v0.9.25 2024-03-12 00:10:51 +01:00
Héctor Molinero Fernández
af85f8a53c Update TurboVNC to v3.1.1 2024-03-12 00:10:37 +01:00
Héctor Molinero Fernández
ade40c8aa0 Update VirtualGL to v3.1.1 2024-03-12 00:10:14 +01:00
Héctor Molinero Fernández
30479df306 Update libjpeg-turbo to v3.0.2 2024-01-24 20:18:53 +01:00
Héctor Molinero Fernández
3459b2af97 Preserve credentials of binfmt binary 2024-01-22 20:30:55 +01:00
Héctor Molinero Fernández
1227012757 Use ${branch}-dirty as image tag when repository is not clean 2024-01-21 17:52:48 +01:00
Héctor Molinero Fernández
aace1b7de7 Set platform during build and register binfmt interpreters in memory 2024-01-21 17:38:48 +01:00
Héctor Molinero Fernández
e31363aaa9 Update xrdp to v0.9.24 2024-01-21 16:39:11 +01:00
Héctor Molinero Fernández
69af7d68a1 Update TurboVNC to v3.1.0 2024-01-21 16:38:49 +01:00
Héctor Molinero Fernández
8ebb39ed3b Update libjpeg-turbo to v3.0.1 2024-01-21 16:38:31 +01:00
Héctor Molinero Fernández
5cbd7af148 Merge pull request #25 from hectorm/dependabot/github_actions/actions/download-artifact-4
Bump actions/download-artifact from 3 to 4
2023-12-18 20:33:56 +01:00
Héctor Molinero Fernández
d618ef03bf Merge pull request #26 from hectorm/dependabot/github_actions/actions/upload-artifact-4
Bump actions/upload-artifact from 3 to 4
2023-12-18 20:33:48 +01:00
dependabot[bot]
de21db45cd Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 07:44:27 +00:00
dependabot[bot]
d60daa7262 Bump actions/download-artifact from 3 to 4
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 07:44:24 +00:00
Héctor Molinero Fernández
9a5baa89c3 v113 2023-10-02 20:50:45 +02:00
Héctor Molinero Fernández
869d927cf9 Update xrdp to v0.9.23.1 2023-10-02 20:46:30 +02:00
Héctor Molinero Fernández
a49debc1f3 Update libjpeg-turbo to v3.0.0 2023-10-02 20:46:11 +02:00
Héctor Molinero Fernández
342b527576 Merge pull request #22 from hectorm/dependabot/github_actions/docker/login-action-3
Bump docker/login-action from 2 to 3
2023-09-18 21:20:22 +02:00
dependabot[bot]
92ca4240ee Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 07:40:10 +00:00
Héctor Molinero Fernández
0dec14d46b Merge pull request #21 from hectorm/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-09-12 22:51:18 +02:00
dependabot[bot]
c5f93589ea Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 07:25:42 +00:00
Héctor Molinero Fernández
d4b60cb964 v112 2023-07-07 14:57:04 +02:00
Héctor Molinero Fernández
c155272e13 Update NVIDIA driver to 535 2023-07-07 14:13:46 +02:00
Héctor Molinero Fernández
09cf978b01 v111 2023-06-10 12:19:14 +02:00
Héctor Molinero Fernández
caf13d7bbc Enable IPv6 2023-06-10 12:19:07 +02:00
Héctor Molinero Fernández
f43cd10437 v110 2023-05-08 19:13:10 +02:00
Héctor Molinero Fernández
0064119cd8 Update xrdp to v0.9.22 2023-05-08 18:21:03 +02:00
Héctor Molinero Fernández
1fbc079713 Delete script to run with Xorg headless,
it is no longer necessary to mount /dev/tty*
2023-04-28 21:23:12 +02:00
Héctor Molinero Fernández
838b70f866 Rename run script 2023-04-28 20:19:47 +02:00
Héctor Molinero Fernández
833ae5b33a v109 2023-04-27 21:10:18 +02:00
Héctor Molinero Fernández
fe0f37139f Add a service to initialise the user session and rename the xdummy service 2023-04-27 21:05:09 +02:00
Héctor Molinero Fernández
dae5769065 v108 2023-04-26 00:25:51 +02:00
Héctor Molinero Fernández
fde0c7ac21 Update NVIDIA driver to 530 2023-04-26 00:24:47 +02:00
Héctor Molinero Fernández
4a48f23071 Update xdummy service default configuration to avoid a black screen on the host 2023-04-26 00:24:29 +02:00
Héctor Molinero Fernández
9a476de285 v107 2023-03-16 19:48:03 +01:00
Héctor Molinero Fernández
2b92486634 Update VirtualGL to v3.1 2023-03-16 19:26:18 +01:00
Héctor Molinero Fernández
8cedffb3fc Remove trailing slash from user home directory 2023-03-16 19:24:47 +01:00
Héctor Molinero Fernández
7fe951ed76 v106 2023-03-03 19:03:32 +01:00
Héctor Molinero Fernández
ac49f16646 Set permissions only on files copied from /etc/skel/ 2023-03-03 18:56:40 +01:00
Héctor Molinero Fernández
e62ab29a7c v105 2023-03-01 23:08:16 +01:00
Héctor Molinero Fernández
903196d0d7 Copy /etc/skell/ if .profile file does not exist 2023-03-01 23:02:19 +01:00
Héctor Molinero Fernández
9ddf1cdec5 Refactor startup to not require files in /etc/skel/ 2023-03-01 22:47:33 +01:00
Héctor Molinero Fernández
9cf354ff56 Update xrdp PulseAudio module to v0.7 2023-02-28 18:57:54 +01:00
Héctor Molinero Fernández
ebf855ef1d Update xrdp to v0.9.21.1 2023-02-28 18:57:25 +01:00
Héctor Molinero Fernández
f6ab9f390f Update TurboVNC to v3.0.3 2023-02-28 18:57:01 +01:00
Héctor Molinero Fernández
ab6f0a4530 Update libjpeg-turbo to v2.1.5.1 2023-02-28 18:56:33 +01:00
Héctor Molinero Fernández
faa5b62f4f v104 2023-01-29 13:53:15 +01:00
Héctor Molinero Fernández
3c4d5e7dc1 Remove 32-bit support 2023-01-29 13:53:10 +01:00
Héctor Molinero Fernández
5446941630 Remove year from license 2023-01-19 00:10:53 +01:00
Héctor Molinero Fernández
910d67ab55 v103 2022-12-11 13:51:06 +01:00
Héctor Molinero Fernández
de78b026d7 Update VirtualGL to v3.1beta1 2022-12-11 13:40:19 +01:00
Héctor Molinero Fernández
07f129eabb Update NVIDIA driver to 525 2022-12-11 13:39:51 +01:00
Héctor Molinero Fernández
99ed9a8c35 Update xrdp to v0.9.21 2022-12-11 13:39:09 +01:00
Héctor Molinero Fernández
89a0e403aa Update TurboVNC to v3.0.2 2022-12-11 13:38:50 +01:00
Héctor Molinero Fernández
81fe814caf v102 2022-10-23 13:03:50 +02:00
Héctor Molinero Fernández
d853165aed Update VirtualGL to v3.0.2 2022-10-23 12:55:33 +02:00
Héctor Molinero Fernández
5ddbd1dd52 v101 2022-09-15 19:31:13 +02:00
Héctor Molinero Fernández
a6d230fb48 Update xrdp to v0.9.20 2022-09-15 19:13:13 +02:00
Héctor Molinero Fernández
43b9e5474f v100 2022-09-10 12:32:35 +02:00
Héctor Molinero Fernández
5f74ac3792 Update xorgxrdp to v0.9.19 2022-09-10 12:32:23 +02:00
Héctor Molinero Fernández
28c028cb3b v99 2022-08-28 17:12:52 +02:00
Héctor Molinero Fernández
bd91aa6a6f Install Firefox from Mozilla Team repository 2022-08-25 23:36:52 +02:00
Héctor Molinero Fernández
55aac9fc26 Split package installation into multiple layers 2022-08-25 23:32:13 +02:00
Héctor Molinero Fernández
9b97a876f0 Merge branch 'master' into ubuntu-22.04 2022-08-19 16:04:05 +02:00
Héctor Molinero Fernández
87b822d72a v98 2022-08-19 16:03:49 +02:00
Héctor Molinero Fernández
614643dd01 Switch from tini to catatonit 2022-08-19 15:00:22 +02:00
Héctor Molinero Fernández
6771e41d35 Merge branch 'master' into ubuntu-22.04 2022-08-19 14:59:01 +02:00
Héctor Molinero Fernández
9836e997ff Update TurboVNC to v3.0.1 2022-08-19 14:57:07 +02:00
Héctor Molinero Fernández
bbf10b519a Update libjpeg-turbo to v2.1.4 2022-08-19 14:56:40 +02:00
Héctor Molinero Fernández
560075b20e Merge branch 'master' into ubuntu-22.04 2022-07-03 14:43:33 +02:00
Héctor Molinero Fernández
e5cbe3ef2b v97 2022-07-02 11:25:49 +02:00
Héctor Molinero Fernández
9866d977e9 Update NVIDIA driver to 515 2022-07-02 11:13:38 +02:00
Héctor Molinero Fernández
caa5722084 Explicitly define global permissions for the GitHub token 2022-05-21 17:29:22 +02:00
Héctor Molinero Fernández
14efd247c8 Merge branch 'master' into ubuntu-22.04 2022-05-21 17:05:49 +02:00
Héctor Molinero Fernández
9ba692cfb9 Modified Dependabot interval from daily to weekly 2022-05-21 17:04:18 +02:00
Héctor Molinero Fernández
b2c6e4b132 Merge branch 'master' into ubuntu-22.04 2022-05-17 19:09:18 +02:00
Héctor Molinero Fernández
ee08f3b8c5 v96 2022-05-17 19:09:07 +02:00
Héctor Molinero Fernández
a157c87963 Update VirtualGL to v3.0.1 2022-05-17 18:58:51 +02:00
Héctor Molinero Fernández
3841a7ecb7 Merge pull request #14 from hectorm/dependabot/github_actions/docker/login-action-2
Bump docker/login-action from 1 to 2
2022-05-06 16:06:36 +02:00
dependabot[bot]
af623b574a Bump docker/login-action from 1 to 2
Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-06 07:37:27 +00:00
Héctor Molinero Fernández
991404eb79 Merge branch 'master' into ubuntu-22.04 2022-05-04 21:44:18 +02:00
Héctor Molinero Fernández
2638d7bf40 v95 2022-05-04 21:44:08 +02:00
Héctor Molinero Fernández
b8a52a2c29 Merge branch 'master' into ubuntu-22.04 2022-05-04 21:43:50 +02:00
Héctor Molinero Fernández
d002d7d974 Update TurboVNC to v3.0 2022-05-04 21:43:38 +02:00
Héctor Molinero Fernández
91dabccc4c Update to Ubuntu 22.04 2022-05-04 19:40:01 +02:00
Héctor Molinero Fernández
65ca286709 v94 2022-04-28 23:18:27 +02:00
Héctor Molinero Fernández
562798da0e Do not upload native artifact 2022-04-28 22:59:19 +02:00
Héctor Molinero Fernández
686dd06d10 Use environment variable instead of context 2022-04-28 22:41:03 +02:00
Héctor Molinero Fernández
a8e366f5e7 Use environment variable instead of context 2022-04-28 21:46:05 +02:00
Héctor Molinero Fernández
c8c18bcb01 Use environment variable instead of context 2022-04-28 21:34:24 +02:00
Héctor Molinero Fernández
9a0bfd2d43 Removed unnecessary cat 2022-04-28 21:09:28 +02:00
Héctor Molinero Fernández
00a393065a v93 2022-04-26 23:33:03 +02:00
Héctor Molinero Fernández
40978527b9 Migration to GitHub Actions and image namespace update 2022-04-26 23:32:52 +02:00
Héctor Molinero Fernández
05b0ef567e v92 2022-03-17 22:42:30 +01:00
Héctor Molinero Fernández
79c4c63131 Updated xrdp to v0.9.19 2022-03-17 18:23:18 +01:00
Héctor Molinero Fernández
1bd4b1ae6b Removed apt-transport-https 2022-03-17 18:22:42 +01:00
Héctor Molinero Fernández
dcfeddccbf Updated "actions/checkout" to v3 2022-03-02 19:48:11 +01:00
Héctor Molinero Fernández
3b3a685373 v91 2022-02-26 12:58:12 +01:00
Héctor Molinero Fernández
56b345e7a0 Updated libjpeg-turbo to v2.1.3 2022-02-26 12:37:40 +01:00
Héctor Molinero Fernández
5044521411 v90 2022-02-19 15:08:03 +01:00
Héctor Molinero Fernández
5b207c7c4a Use bind mount to install packages 2022-02-19 14:33:06 +01:00
Héctor Molinero Fernández
c6e2fe55c4 Added workflow to rebuild the latest release 2022-02-10 20:01:26 +01:00
Héctor Molinero Fernández
d4beb993f4 v89 2022-02-08 20:44:22 +01:00
Héctor Molinero Fernández
05942748f2 Updated xrdp to v0.9.18.1 2022-02-08 20:40:05 +01:00
Héctor Molinero Fernández
6d36cb7cc2 v88 2022-02-07 23:08:13 +01:00
Héctor Molinero Fernández
5c30b08131 Added GitHub workflow for CI 2022-02-07 22:56:54 +01:00
Héctor Molinero Fernández
9f20b829ea Updated NVIDIA driver to 510 2022-02-07 22:54:15 +01:00
Héctor Molinero Fernández
57cedd6c95 Removed version file 2022-02-07 22:53:47 +01:00
Héctor Molinero Fernández
cb581b5ebc Simplified .gitlab-ci.yml 2022-02-07 22:51:28 +01:00
Héctor Molinero Fernández
9203132d2d Updated license year 2022-02-07 22:50:14 +01:00
Héctor Molinero Fernández
8d56b77ac0 v87 2022-01-16 02:11:01 +01:00
Héctor Molinero Fernández
63d836a4da Reordered some tasks in the init script 2022-01-16 02:05:05 +01:00
Héctor Molinero Fernández
c34261f8aa Skip unnecessary message 2022-01-16 01:36:30 +01:00
Héctor Molinero Fernández
2bec9aa8cd Start D-Bus without creating a PID file 2022-01-16 01:36:01 +01:00
Héctor Molinero Fernández
a2a7ddc95f Create "/run/sshd/" directory in the init script 2022-01-16 01:34:25 +01:00
Héctor Molinero Fernández
b593eb1385 The creation of the RANDFILE file is not really necessary 2022-01-16 01:33:19 +01:00
Héctor Molinero Fernández
43f3bfcaa3 v86 2022-01-15 16:34:52 +01:00
Héctor Molinero Fernández
236b7e5df1 Added udev service 2022-01-15 16:32:46 +01:00
Héctor Molinero Fernández
a9f6d16fe6 v85 2022-01-11 21:46:22 +01:00
Héctor Molinero Fernández
65c52639bb Updated xorgxrdp to v0.2.18 2022-01-11 21:04:27 +01:00
Héctor Molinero Fernández
a43eb064a9 Updated xrdp to v0.9.18 2022-01-11 21:04:10 +01:00
Héctor Molinero Fernández
1336d88b43 v84 2021-12-30 21:47:30 +01:00
Héctor Molinero Fernández
afd097de93 Configured chansrv logging 2021-12-30 21:03:35 +01:00
Héctor Molinero Fernández
c19dcfd020 Set deferupdate to 1 2021-12-30 21:02:59 +01:00
Héctor Molinero Fernández
0cfdb42954 Added vulkan-tools and moved some packages to the last installation step 2021-12-30 19:31:18 +01:00
Héctor Molinero Fernández
d5f8cc276d Added librsvg thumbnailer 2021-12-30 18:09:12 +01:00
Héctor Molinero Fernández
5f0267db96 Added xterm and x11-utils 2021-12-30 17:55:26 +01:00
Héctor Molinero Fernández
6daf0794f0 Added TurboVNC backend to xrdp 2021-12-30 16:32:40 +01:00
Héctor Molinero Fernández
d3083562d8 Use RemoteFX 2021-12-30 16:28:18 +01:00
Héctor Molinero Fernández
0914f608d3 Call Xorg directly 2021-12-30 16:19:04 +01:00
Héctor Molinero Fernández
327d87f244 "-Wno-format" is no longer necessary 2021-12-30 16:18:36 +01:00
Héctor Molinero Fernández
f3244bf106 Explicitly defined some chansrv options 2021-12-30 16:16:37 +01:00
Héctor Molinero Fernández
732eec6c52 Added Adwaita icon theme 2021-12-30 16:14:41 +01:00
Héctor Molinero Fernández
4220106bf2 Quoted some variables 2021-12-30 11:51:07 +01:00
Héctor Molinero Fernández
ea5880341b v83 2021-11-20 01:56:34 +01:00
Héctor Molinero Fernández
dc6f8cb5e0 Updated VirtualGL to v3.0 2021-11-20 01:39:40 +01:00
Héctor Molinero Fernández
a554a76b9f v82 2021-11-20 01:30:32 +01:00
Héctor Molinero Fernández
1f899a7dc4 Updated xrdp PulseAudio module to v0.6 2021-11-20 00:38:11 +01:00
Héctor Molinero Fernández
c16e56469b Updated libjpeg-turbo to v2.1.2 2021-11-20 00:36:43 +01:00
Héctor Molinero Fernández
82c35d4dba v81 2021-11-16 23:03:36 +01:00
Héctor Molinero Fernández
58dcc832d4 Updated NVIDIA driver to 495 2021-11-16 22:53:40 +01:00
Héctor Molinero Fernández
b7a8deb80e v80 2021-10-31 19:14:46 +01:00
Héctor Molinero Fernández
e7304ed057 Explicitly set permissions for all copied files 2021-10-31 19:13:55 +01:00
Héctor Molinero Fernández
c92ec4c034 Removed unnecessary "--" from printf 2021-10-31 18:55:02 +01:00
Héctor Molinero Fernández
a0c51fe378 v79 2021-10-31 14:24:10 +01:00
Héctor Molinero Fernández
25426d4cb2 Enabled BuildKit 2021-10-31 14:23:34 +01:00
Héctor Molinero Fernández
fc5f885b45 Replaced "docker.io/docker:stable" with "docker.io/docker:latest" 2021-10-31 14:23:30 +01:00
Héctor Molinero Fernández
badfc940f5 v78 2021-10-24 23:02:57 +02:00
Héctor Molinero Fernández
a3000ca6f8 Updated VirtualGL to v3.0rc1 2021-10-24 22:47:22 +02:00
Héctor Molinero Fernández
0de47cf29b v77 2021-09-05 13:34:26 +02:00
Héctor Molinero Fernández
a6ecf8a3d6 Updated xorgxrdp to v0.2.17 2021-09-05 13:34:11 +02:00
Héctor Molinero Fernández
726781e0b2 Updated xrdp to v0.9.17 2021-09-05 13:33:48 +02:00
Héctor Molinero Fernández
ddc8576c05 v76 2021-08-11 20:10:35 +02:00
Héctor Molinero Fernández
5c4201cebf Updated libjpeg-turbo to v2.1.1 2021-08-11 19:41:06 +02:00
Héctor Molinero Fernández
1d03df8505 v75 2021-07-25 16:43:06 +02:00
Héctor Molinero Fernández
ad1a12aaa8 Updated NVIDIA driver to 470 2021-07-25 16:43:01 +02:00
Héctor Molinero Fernández
999c86b1bc v74 2021-06-17 20:38:33 +02:00
Héctor Molinero Fernández
64f822e762 Updated VirtualGL to v3.0beta1 2021-06-17 19:35:14 +02:00
Héctor Molinero Fernández
4a1ca2c9c0 v73 2021-06-04 01:13:27 +02:00
Héctor Molinero Fernández
2e0ef9953d Updated NVIDIA driver to 465 2021-06-04 01:12:04 +02:00
Héctor Molinero Fernández
94521abb78 v72 2021-06-01 21:45:29 +02:00
Héctor Molinero Fernández
056d2d9088 Switch to 256-bit ECDSA RDP key 2021-06-01 21:40:09 +02:00
Héctor Molinero Fernández
429a9b7b8d Renamed default user 2021-06-01 21:19:43 +02:00
Héctor Molinero Fernández
7c6cdc6f3f Avoid exporting variables with secrets 2021-06-01 20:58:07 +02:00
Héctor Molinero Fernández
e29c3797c8 Print RDP certificate fingerprint 2021-06-01 20:57:20 +02:00
Héctor Molinero Fernández
a9e5abf3b1 Generate RDP certificate with Subject Alternative Name (SAN) 2021-06-01 20:53:16 +02:00
Héctor Molinero Fernández
d3e67be89a Do not make critical the deletion of temporary files 2021-06-01 20:47:25 +02:00
Héctor Molinero Fernández
435672fb10 Added NVIDIA Jetson devices 2021-06-01 20:11:24 +02:00
Héctor Molinero Fernández
809e88638e Updated VirtualGL to 10c1138 2021-06-01 19:56:20 +02:00
Héctor Molinero Fernández
fbc6460b11 v71 2021-05-27 22:08:01 +02:00
Héctor Molinero Fernández
25f776a52e Updated VirtualGL to 9d04f00 2021-05-27 21:47:08 +02:00
Héctor Molinero Fernández
a15071966a v70 2021-05-18 22:55:12 +02:00
Héctor Molinero Fernández
c02f65fed4 Reset binfmt entries 2021-05-18 22:55:09 +02:00
Héctor Molinero Fernández
444d9eea6d Updated readme 2021-05-13 00:42:04 +02:00
Héctor Molinero Fernández
9c639218f2 v69 2021-05-11 22:29:54 +02:00
Héctor Molinero Fernández
b9e8dbf30f Prioritize VirtualGL on the PATH 2021-05-11 21:18:25 +02:00
Héctor Molinero Fernández
90ab1ae1f8 vglserver_config is not really necessary 2021-05-11 20:54:02 +02:00
Héctor Molinero Fernández
32a7b64850 Install OpenCL development files 2021-05-11 19:34:02 +02:00
Héctor Molinero Fernández
7bbbeb327b v68 2021-05-11 00:17:26 +02:00
Héctor Molinero Fernández
4ce5c3ab4c Throw error if variable is not set 2021-05-11 00:02:06 +02:00
Héctor Molinero Fernández
f122a7e5f3 Allow configuring AMD, Intel and Nvidia GPUs support independently 2021-05-10 23:58:53 +02:00
Héctor Molinero Fernández
b085871d30 v67 2021-05-09 18:37:45 +02:00
Héctor Molinero Fernández
882ae6ec72 Removed redundant option 2021-05-09 18:37:22 +02:00
Héctor Molinero Fernández
4cf1d645e1 Updated X11 headless configuration with Nvidia example 2021-05-09 17:50:23 +02:00
Héctor Molinero Fernández
608981cd13 Try to use the VirtualGL's EGL backend 2021-05-09 17:14:06 +02:00
Héctor Molinero Fernández
02f94da242 Switch to VirtualGL dev branch to enable the new EGL backend 2021-05-09 16:11:56 +02:00
Héctor Molinero Fernández
17f254e75c Mount devices automatically in sample scripts 2021-05-09 16:07:41 +02:00
Héctor Molinero Fernández
d6e530a9b0 Use new packages instead of the transitional dummy packages 2021-05-09 13:32:39 +02:00
Héctor Molinero Fernández
eb32bbf9b4 Install 32bit nvidia libraries 2021-05-09 12:36:45 +02:00
Héctor Molinero Fernández
fa1916e038 Install nvidia libraries explicitly instead of the metapackage 2021-05-09 12:36:22 +02:00
Héctor Molinero Fernández
c098e22ac0 Use dynamic resolution 2021-05-07 16:26:59 +02:00
Héctor Molinero Fernández
abc1b04ad5 v66 2021-05-07 16:26:16 +02:00
Héctor Molinero Fernández
faea6f30ea Readded fbdev and VESA display drivers 2021-05-07 16:02:05 +02:00
Héctor Molinero Fernández
06cfaff083 v65 2021-05-06 23:12:20 +02:00
Héctor Molinero Fernández
3f58c008de Added headless configuration to Xorg 2021-05-06 23:12:03 +02:00
Héctor Molinero Fernández
827bf195f2 Install nvidia driver 2021-05-06 21:46:14 +02:00
Héctor Molinero Fernández
1861574eb3 v64 2021-05-05 00:22:12 +02:00
Héctor Molinero Fernández
d6e0235724 Add GPU devices groups to additional groups 2021-05-05 00:12:40 +02:00
Héctor Molinero Fernández
a223859e95 v63 2021-05-02 20:55:20 +02:00
Héctor Molinero Fernández
3b616a9911 Removed xserver-xorg-video-intel 2021-05-02 20:55:09 +02:00
Héctor Molinero Fernández
50bb033ae3 v62 2021-05-02 19:42:53 +02:00
Héctor Molinero Fernández
4f9b1c0df6 Install Xorg drivers explicitly instead of the metapackage 2021-05-02 19:42:47 +02:00
Héctor Molinero Fernández
64f4a886e0 v61 2021-05-02 19:07:07 +02:00
Héctor Molinero Fernández
e50704ca70 Removed AMDGPU X_GLXCreatePbuffer workaround 2021-05-02 19:05:29 +02:00
Héctor Molinero Fernández
cce460b6a9 v60 2021-04-30 18:48:00 +02:00
Héctor Molinero Fernández
61512bc041 Updated xorgxrdp to v0.2.16 2021-04-30 17:38:45 +02:00
Héctor Molinero Fernández
f0f35e7b96 Updated xrdp to v0.9.16 2021-04-30 17:36:48 +02:00
Héctor Molinero Fernández
dc2e62b6e6 Updated libjpeg-turbo to v2.1.0 2021-04-30 17:34:37 +02:00
Héctor Molinero Fernández
944a4fc65b v59 2021-04-15 00:34:02 +02:00
Héctor Molinero Fernández
cc6739ecc7 Added lshw 2021-04-15 00:20:48 +02:00
Héctor Molinero Fernández
bda71b543c Merge pull request #8 from colpari/master
bump XRDP_PULSEAUDIO_TREEISH to 0.5
2021-04-15 00:12:32 +02:00
colpari
9bc395b304 bump XRDP_PULSEAUDIO_TREEISH to 0.5 2021-04-14 13:16:34 +00:00
Héctor Molinero Fernández
3962b82bf5 v58 2021-01-17 12:43:10 +01:00
Héctor Molinero Fernández
d23846a06f Increased compression level 2021-01-15 19:44:20 +01:00
Héctor Molinero Fernández
6e6733270f Updated license year 2021-01-15 19:44:09 +01:00
Héctor Molinero Fernández
1df216cb98 v57 2021-01-15 01:07:33 +01:00
Héctor Molinero Fernández
17ff460251 Updated readme 2021-01-15 01:07:01 +01:00
Héctor Molinero Fernández
a71c1905e8 Merge pull request #6 from dtinth/patch-2
Add docker-compose example
2021-01-15 00:59:58 +01:00
Héctor Molinero Fernández
07c7666b47 Split package installation 2021-01-14 22:47:15 +01:00
Thai Pangsakulyanont
34f32d09d7 Add docker-compose example 2021-01-13 22:57:26 +07:00
Héctor Molinero Fernández
ce6f06336d v56 2020-12-28 18:58:37 +01:00
Héctor Molinero Fernández
cf1dd7f57d Updated xrdp to v0.9.15 2020-12-28 18:42:22 +01:00
Héctor Molinero Fernández
ae301753ea v55 2020-12-24 13:23:08 +01:00
Héctor Molinero Fernández
2cfd7d30e9 Added xfreerdp script 2020-12-24 13:21:50 +01:00
Héctor Molinero Fernández
43c8de6592 Updated xorgxrdp to v0.2.15 2020-12-24 12:18:52 +01:00
Héctor Molinero Fernández
4f64977590 Added some extra libraries in preparation for VirtualGL 3.0 2020-12-24 12:18:11 +01:00
Héctor Molinero Fernández
e13d70dc40 v54 2020-11-18 20:25:55 +01:00
Héctor Molinero Fernández
ed137628f8 Updated VirtualGL to v2.6.5 2020-11-18 18:22:16 +01:00
Héctor Molinero Fernández
11485710ed Added Audacity 2020-11-18 18:18:57 +01:00
Héctor Molinero Fernández
34bfb60287 Removed OpenJDK 2020-11-18 18:18:35 +01:00
Héctor Molinero Fernández
3b5ef360ad v53 2020-10-16 16:45:46 +02:00
Héctor Molinero Fernández
a09f47730e Removed arm32v7 support,
too much hassle to maintain
2020-10-16 16:44:46 +02:00
Héctor Molinero Fernández
906b37963e v52 2020-10-14 20:38:08 +02:00
Héctor Molinero Fernández
90166629cc Merge pull request #3 from dtinth/patch-1
Clean up `/tmp` in `container-init`
2020-10-14 20:33:09 +02:00
Héctor Molinero Fernández
5d4abe1caf Empty "/tmp/" directory at init 2020-10-14 20:32:44 +02:00
Héctor Molinero Fernández
d04a095f59 It is not necessary to create the directory manually 2020-10-14 20:10:41 +02:00
Héctor Molinero Fernández
e91db811eb Copy packages to "/opt/pkg/" 2020-10-14 20:04:36 +02:00
Héctor Molinero Fernández
8825b2fea7 Disabled Immediate-Configure due to errors installing libc6:i386 2020-10-14 19:03:49 +02:00
Héctor Molinero Fernández
eed7e67b68 Workaround for neutrinolabs/xrdp#1678 2020-10-14 18:38:53 +02:00
Héctor Molinero Fernández
66cc216319 Defined flags with CMake 2020-10-14 18:36:16 +02:00
Héctor Molinero Fernández
b3150bb0ed Use Zstandard to transfer Docker images between CI jobs 2020-10-14 18:29:45 +02:00
Thai Pangsakulyanont
8123a21f3e Clean up /tmp in container-init
I ran into a problem where the container does not start after 10 startups.

The reason for this is `/tmp/.X10-lock` file are not deleted when running `docker stop`.
On next `docker-start`, `/tmp/.X11-lock` is allocated instead.
This keeps going until `/tmp/.X19-lock` and from that it gives up.

Another workaround is to use `--tmpfs` in `docker run`.
But not all users always use it.
2020-10-14 01:35:09 +07:00
Héctor Molinero Fernández
6efb24389f Added quotes 2020-09-16 22:44:29 +02:00
Héctor Molinero Fernández
cff2cf895b XRDP -> xrdp 2020-08-31 16:03:44 +02:00
Héctor Molinero Fernández
2c474cfe0a Updated xorgxrdp to v0.2.14 2020-08-31 16:02:02 +02:00
Héctor Molinero Fernández
5cdd17b3f2 Updated XRDP to v0.9.14 2020-08-31 16:01:06 +02:00
Héctor Molinero Fernández
7d9e534592 Sort 2020-08-31 15:59:48 +02:00
Héctor Molinero Fernández
8852a46d7b Updated readme 2020-07-11 18:30:42 +02:00
Héctor Molinero Fernández
fb3a889a62 v51 2020-06-30 18:02:37 +02:00
Héctor Molinero Fernández
b18dd64b29 Updated XRDP to v0.9.13.1 2020-06-30 18:02:23 +02:00
Héctor Molinero Fernández
36d4f51091 v50 2020-06-28 23:53:53 +02:00
Héctor Molinero Fernández
eb8a0b7a15 Build CMake with "_FILE_OFFSET_BITS=64" 2020-06-28 17:24:52 +02:00
Héctor Molinero Fernández
2e52097e4e Updated base image to Ubuntu 20.04 2020-06-27 12:27:32 +02:00
Héctor Molinero Fernández
56795fa0f7 v49 2020-05-22 19:39:06 +02:00
Héctor Molinero Fernández
76ee8f6cc9 Always pull images in CI 2020-05-22 19:21:11 +02:00
Héctor Molinero Fernández
c8cda18ee3 Removed FUNDING.yml file 2020-05-22 17:29:26 +02:00
Héctor Molinero Fernández
b662835423 v48 2020-04-29 01:08:05 +02:00
Héctor Molinero Fernández
b6f377f485 Use xdummy if possible 2020-04-29 01:00:57 +02:00
Héctor Molinero Fernández
9a74a97b3d v47 2020-04-28 01:44:22 +02:00
Héctor Molinero Fernández
cce078e0da Dump variables to /etc/environment 2020-04-28 01:44:13 +02:00
Héctor Molinero Fernández
caaf9b6b24 v46 2020-04-27 02:21:04 +02:00
Héctor Molinero Fernández
ae87a8296b Some refactoring and fixes 2020-04-27 02:21:00 +02:00
Héctor Molinero Fernández
731face8d3 v45 2020-04-26 13:54:25 +02:00
Héctor Molinero Fernández
6f662338ba Updated PATH 2020-04-26 13:54:02 +02:00
Héctor Molinero Fernández
544504fd0b v44 2020-03-21 17:55:04 +01:00
Héctor Molinero Fernández
fbd74971f1 Added VAAPI, VDPAU and Vulkan drivers 2020-03-21 17:54:54 +01:00
Héctor Molinero Fernández
a1ab1be01a Added fuse 2020-03-21 15:27:48 +01:00
Héctor Molinero Fernández
c27045a8cf Removed some packages 2020-03-21 12:02:12 +01:00
Héctor Molinero Fernández
4e14173436 v43 2020-03-20 19:45:41 +01:00
Héctor Molinero Fernández
594a7b7ad5 Removed some packages 2020-03-20 18:57:35 +01:00
Héctor Molinero Fernández
21573d3df9 v42 2020-03-17 19:23:09 +01:00
Héctor Molinero Fernández
8c6b619fcb Added lsof and xfce4-screenshooter 2020-03-17 19:22:51 +01:00
Héctor Molinero Fernández
c1de1644a2 v41 2020-03-11 22:12:34 +01:00
Héctor Molinero Fernández
117caa2045 Updated xorgxrdp to v0.2.13 2020-03-11 18:08:51 +01:00
Héctor Molinero Fernández
ac9d5b86da Updated XRDP to v0.9.13 2020-03-11 18:07:58 +01:00
Héctor Molinero Fernández
92f690e93b v40 2020-03-07 12:51:25 +01:00
Héctor Molinero Fernández
bf511bc7cd Added XDG_SESSION_TYPE variable to .xsessionrc 2020-03-07 12:43:49 +01:00
Héctor Molinero Fernández
33d4ba057a Check if /dev/urandom exists 2020-03-07 12:37:44 +01:00
Héctor Molinero Fernández
a69eb10dde Delete user password if UNPRIVILEGED_USER_PASSWORD is empty 2020-03-07 12:33:51 +01:00
Héctor Molinero Fernández
74aaf70835 Updated comment 2020-03-07 12:27:22 +01:00
Héctor Molinero Fernández
fdb47448b9 v39 2020-03-07 02:22:13 +01:00
Héctor Molinero Fernández
e0289918d6 Permit PulseAudio over SSH 2020-03-07 02:19:36 +01:00
Héctor Molinero Fernández
7b9aa24e42 v38 2020-03-06 20:02:30 +01:00
Héctor Molinero Fernández
859a3ab28a Reuse XRDP's X server for VirtualGL 2020-03-06 20:01:07 +01:00
Héctor Molinero Fernández
366e2200e3 v37 2020-03-02 21:29:22 +01:00
Héctor Molinero Fernández
ca6db03334 "--tty" is not needed 2020-03-02 21:29:16 +01:00
Héctor Molinero Fernández
0e4a1171f8 v36 2020-03-02 00:02:42 +01:00
Héctor Molinero Fernández
6f2c7b8922 Added clinfo and mesa-opencl-icd:i386 packages 2020-03-02 00:02:33 +01:00
Héctor Molinero Fernández
d628a9de57 v35 2020-03-01 22:48:28 +01:00
Héctor Molinero Fernández
fe8bb82525 Added missing i386 libs 2020-03-01 22:48:07 +01:00
Héctor Molinero Fernández
474a6eb405 Remove default keys and certificates 2020-03-01 20:28:50 +01:00
Héctor Molinero Fernández
0dc2a4b2d8 Updated SSH config 2020-03-01 20:15:16 +01:00
Héctor Molinero Fernández
b2b8322aad Updated run commands 2020-03-01 20:12:03 +01:00
Héctor Molinero Fernández
7389ea56c2 Single line 2020-03-01 20:09:53 +01:00
Héctor Molinero Fernández
1aa3e47232 Added missing semicolons 2020-03-01 17:43:44 +01:00
Héctor Molinero Fernández
8a3b2625e2 Remove pidfile on service 2020-03-01 17:40:13 +01:00
Héctor Molinero Fernández
0b0f5818b1 Changed order of actions 2020-03-01 17:38:15 +01:00
Héctor Molinero Fernández
00432431cd This is not really necessary 2020-03-01 16:18:14 +01:00
Héctor Molinero Fernández
c38d79edc1 container-foreground-cmd -> container-init 2020-03-01 16:16:48 +01:00
Héctor Molinero Fernández
7cf3f7a1f9 Always run sshd 2020-03-01 16:13:40 +01:00
Héctor Molinero Fernández
259f66693c WORKDIR is not needed 2020-03-01 16:08:48 +01:00
Héctor Molinero Fernández
8a59747535 Separated core and optional packages 2020-03-01 16:08:28 +01:00
Héctor Molinero Fernández
0f59517a51 Explicitly added some dependencies and removed some unnecessary ones 2020-03-01 12:58:00 +01:00
Héctor Molinero Fernández
6edf7e3184 Wrong ln order 2020-03-01 12:54:42 +01:00
Héctor Molinero Fernández
ddbda24cca ./ 2020-03-01 12:53:11 +01:00
Héctor Molinero Fernández
6a22687928 Updated license year 2020-03-01 12:52:09 +01:00
Héctor Molinero Fernández
99b6689565 v34 2019-12-31 19:10:00 +01:00
Héctor Molinero Fernández
f88202716a Updated libjpeg-turbo to v2.0.4 2019-12-31 15:58:00 +01:00
Héctor Molinero Fernández
f7a9e96fd2 Updated XRDP to v0.9.12 2019-12-31 15:57:29 +01:00
Héctor Molinero Fernández
dec0eeb571 v33 2019-12-15 21:04:41 +01:00
Héctor Molinero Fernández
a42b192cce Remove dbus pidfile at startup 2019-12-15 20:59:50 +01:00
Héctor Molinero Fernández
abb0eb51f1 v32 2019-12-14 19:05:07 +01:00
Héctor Molinero Fernández
f3752dc33e Added some drivers 2019-12-14 19:04:33 +01:00
Héctor Molinero Fernández
de7426030a Do not create user and group if they already exist 2019-12-14 18:56:14 +01:00
Héctor Molinero Fernández
ff007b12c6 v31 2019-12-14 18:13:06 +01:00
Héctor Molinero Fernández
b9b2999225 Create additional groups dynamically 2019-12-14 18:12:58 +01:00
Héctor Molinero Fernández
2d61753e73 v30 2019-12-12 16:29:01 +01:00
Héctor Molinero Fernández
7f737322b0 Updated xorgxrdp to v0.2.12 and enabled glamor for hardware acceleration without VirtualGL 2019-12-12 16:19:01 +01:00
Héctor Molinero Fernández
57d9bb76ce Updated GitLab CI 2019-12-12 12:56:29 +01:00
Héctor Molinero Fernández
899a40f1d7 v29 2019-11-03 16:34:27 +01:00
Héctor Molinero Fernández
d48998e06c Updated binfmt targets 2019-11-03 16:26:25 +01:00
Héctor Molinero Fernández
742c4f2e4d v28 2019-10-26 19:38:31 +02:00
Héctor Molinero Fernández
2841831e1f Fixed architecture of deb packages 2019-10-26 19:38:20 +02:00
Héctor Molinero Fernández
51c8a3b339 v27 2019-10-25 19:22:00 +02:00
Héctor Molinero Fernández
c430eb6056 Added missing dependencies 2019-10-25 19:21:40 +02:00
Héctor Molinero Fernández
3e64a9478b Updated VirtualGL to v2.6.3 2019-10-25 17:10:17 +02:00
Héctor Molinero Fernández
5250675fa9 v26 2019-10-21 21:03:55 +02:00
Héctor Molinero Fernández
5f52379ded Updated XRDP PulseAudio module to v0.4 2019-10-21 21:03:46 +02:00
Héctor Molinero Fernández
3841c944cb v25 2019-10-13 13:14:50 +02:00
Héctor Molinero Fernández
92da9e1612 Updated sshd config 2019-10-13 13:13:58 +02:00
Héctor Molinero Fernández
e75903fce6 v24 2019-09-15 10:26:14 +02:00
Héctor Molinero Fernández
a32d77db32 Updated GitLab CI 2019-09-15 10:26:11 +02:00
Héctor Molinero Fernández
c7fd605e8c v23 2019-09-06 18:04:58 +02:00
Héctor Molinero Fernández
0b3199aca0 Updated libjpeg-turbo to v2.0.3 2019-09-06 17:31:33 +02:00
Héctor Molinero Fernández
9a23937b5a v22 2019-09-04 19:48:06 +02:00
Héctor Molinero Fernández
0d7f78ca3a Disabled TurboVNC 2019-09-04 19:47:57 +02:00
Héctor Molinero Fernández
526a5ba576 v21 2019-09-02 21:52:36 +02:00
Héctor Molinero Fernández
357e5c5c9b Improvements to the build system imported from other projects 2019-09-02 21:52:36 +02:00
Héctor Molinero Fernández
3657a753e1 v20 2019-08-20 22:04:34 +02:00
Héctor Molinero Fernández
4e37b6ccd9 Updated XRDP to v0.9.11 2019-08-20 21:34:00 +02:00
Héctor Molinero Fernández
64d34ed639 v19 2019-08-17 21:16:34 +02:00
Héctor Molinero Fernández
16f06b90a5 Updated xorgxrdp to v0.2.11 2019-08-17 12:46:10 +02:00
Héctor Molinero Fernández
b82330f25a v18 2019-07-31 16:05:55 +02:00
Héctor Molinero Fernández
07570c4d9d Added TurboVNC 2019-07-31 16:05:45 +02:00
Héctor Molinero Fernández
a36b9af6fd v17 2019-07-20 17:20:26 +02:00
Héctor Molinero Fernández
17c73fe546 Regenerate SSH keys 2019-07-20 17:20:22 +02:00
Héctor Molinero Fernández
85da01153c v16 2019-07-20 11:56:56 +02:00
Héctor Molinero Fernández
358726e3ce Expose SSH port 2019-07-20 11:42:14 +02:00
Héctor Molinero Fernández
ea0a885e56 Added openjdk-8-jre 2019-07-20 11:40:46 +02:00
Héctor Molinero Fernández
61c582d98d Added iputils-ping 2019-07-20 10:46:05 +02:00
Héctor Molinero Fernández
56506d49e6 v15 2019-07-10 18:43:41 +02:00
Héctor Molinero Fernández
27b0db526c Create RANDFILE if it does not exist 2019-07-10 18:43:35 +02:00
Héctor Molinero Fernández
13687b9dfb Small corrections when exporting environment variables 2019-07-10 18:43:20 +02:00
Héctor Molinero Fernández
852fbcbeaf v14 2019-07-07 20:22:14 +02:00
Héctor Molinero Fernández
6e4e8fcf80 v13 2019-07-07 20:02:54 +02:00
Héctor Molinero Fernández
876508cd9c Dynamically create unprivileged user 2019-07-07 20:01:51 +02:00
Héctor Molinero Fernández
14de99b480 Added binutils and wget 2019-07-07 18:15:37 +02:00
Héctor Molinero Fernández
3b9be69e78 v12 2019-07-07 18:09:43 +02:00
Héctor Molinero Fernández
9467264c26 Added git and p7zip-full 2019-07-07 18:09:35 +02:00
Héctor Molinero Fernández
cff63b48c0 v11 2019-07-04 22:27:54 +02:00
Héctor Molinero Fernández
92bfd0901a Added apt-transport-https and gnupg 2019-07-04 22:27:43 +02:00
Héctor Molinero Fernández
b6306401d2 v10 2019-07-03 18:29:48 +02:00
Héctor Molinero Fernández
b3b425d7da Added net-tools and netcat-openbsd 2019-07-03 18:29:34 +02:00
Héctor Molinero Fernández
ddac386be3 Create FUNDING.yml 2019-06-30 18:38:48 +02:00
Héctor Molinero Fernández
15e0079269 v9 2019-06-30 14:24:56 +02:00
Héctor Molinero Fernández
7361f3d85e Disabled "KillDisconnected" by default 2019-06-30 14:17:25 +02:00
Héctor Molinero Fernández
50de472d6d v8 2019-06-23 11:06:42 +02:00
Héctor Molinero Fernández
d358d27092 Split package installation 2019-06-23 11:06:27 +02:00
Héctor Molinero Fernández
d391df3cbc v7 2019-06-20 23:39:53 +02:00
Héctor Molinero Fernández
f4c8532587 Added some utilities 2019-06-20 23:18:43 +02:00
Héctor Molinero Fernández
3b9b46c753 v6 2019-06-20 21:40:31 +02:00
Héctor Molinero Fernández
3838c5a0b2 Copy /etc/skel/ to guest user home if empty 2019-06-19 20:43:24 +02:00
Héctor Molinero Fernández
f8533bb5e9 v5 2019-06-18 21:27:41 +02:00
Héctor Molinero Fernández
1ab8ed9d49 Added input group 2019-06-18 20:48:48 +02:00
Héctor Molinero Fernández
ba5a78fa37 v4 2019-06-17 22:58:05 +02:00
Héctor Molinero Fernández
34b19bb8d0 Workaround for AMDGPU X_GLXCreatePbuffer issue 2019-06-17 22:54:18 +02:00
Héctor Molinero Fernández
8812941ac8 Use HWE 2019-06-17 22:52:39 +02:00
Héctor Molinero Fernández
b8e7435ee5 v3 2019-06-16 22:02:17 +02:00
Héctor Molinero Fernández
44783414a5 Added some missing packages and small fixes 2019-06-16 22:01:08 +02:00
Héctor Molinero Fernández
4146a45117 v2 2019-06-16 15:07:38 +02:00
Héctor Molinero Fernández
ec0bfbcc56 Added bash-completion and small fixes 2019-06-16 15:03:00 +02:00
35 changed files with 1072 additions and 631 deletions

19
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
# yaml-language-server: $schema=https://json.schemastore.org/dependabot-2.0.json
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
groups:
docker-all:
patterns: ["*"]
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
github-actions-all:
patterns: ["*"]

94
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,94 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: "Main"
on:
push:
tags: ["*"]
branches: ["*"]
pull_request:
branches: ["*"]
workflow_dispatch:
permissions: {}
jobs:
build:
name: "Build ${{ matrix.arch }} image"
runs-on: "ubuntu-latest"
permissions:
contents: "read"
strategy:
matrix:
arch: ["arm64v8"]
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Register binfmt entries"
if: "matrix.arch != 'native'"
run: |
make binfmt-register
- name: "Build and save image"
run: |
make IMAGE_BUILD_OPTS="--pull" "build-${{ matrix.arch }}-image" "save-${{ matrix.arch }}-image"
- name: "Upload artifacts"
if: "startsWith(github.ref, 'refs/tags/v') && matrix.arch != 'native'"
uses: "christopherhx/gitea-upload-artifact@v4"
with:
name: "dist-${{ matrix.arch }}"
path: "./dist/"
retention-days: 1
push:
name: "Push ${{ matrix.arch }} image"
if: "startsWith(github.ref, 'refs/tags/v')"
needs: ["build"]
runs-on: "ubuntu-latest"
permissions:
contents: "read"
strategy:
matrix:
arch: ["arm64v8"]
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Download artifacts"
uses: "christopherhx/gitea-download-artifact@v4"
with:
name: "dist-${{ matrix.arch }}"
path: "./dist/"
# - name: "Login to Docker Hub"
# uses: "docker/login-action@v3"
# with:
# registry: "d.lilpenguins.com"
- name: "Load and push image"
run: |
make "load-${{ matrix.arch }}-image" "push-${{ matrix.arch }}-image"
push-manifest:
name: "Push manifest"
if: "startsWith(github.ref, 'refs/tags/v')"
needs: ["push"]
runs-on: "ubuntu-latest"
permissions:
contents: "read"
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
# - name: "Login to Docker Hub"
# uses: "docker/login-action@v3"
# with:
# registry: "d.lilpenguins.com"
- name: "Push manifest"
run: |
make push-cross-manifest
publish-github-release:
name: "Publish GitHub release"
if: "startsWith(github.ref, 'refs/tags/v')"
needs: ["push-manifest"]
runs-on: "ubuntu-latest"
permissions:
contents: "write"
steps:
- name: "Publish"
uses: "hectorm/ghaction-release@066200d04c3549852afa243d631ea3dc93390f68"

View File

@@ -0,0 +1,22 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
#name: "Rebuild latest release"
#on:
# schedule:
# - cron: "20 04 * * 1"
# workflow_dispatch:
#permissions: {}
#jobs:
# trigger-rebuild:
# name: "Trigger rebuild"
# runs-on: "ubuntu-latest"
# permissions:
# actions: "write"
# contents: "read"
# steps:
# - name: "Trigger rebuild"
# uses: "hectorm/ghaction-trigger-workflow@04c79e7a4e0c0b94bbcff3829f38359e34f1ea9e"
# with:
# workflow-id: "main.yml"

View File

@@ -1,137 +0,0 @@
image: docker:stable
services:
- docker:dind
stages:
- build:images
- push:images
- push:manifests
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
build:native-image:
stage: build:images
before_script:
- docker info
- apk add --no-cache coreutils git m4 make xz
script:
- make build-native-image save-native-image
except:
- tags
artifacts:
expire_in: 1 day
paths:
- dist/
build:amd64-image:
stage: build:images
before_script:
- docker info
- apk add --no-cache coreutils git m4 make xz
- make binfmt-register
script:
- make build-amd64-image save-amd64-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
artifacts:
expire_in: 1 week
paths:
- dist/
build:arm32v7-image:
stage: build:images
before_script:
- docker info
- apk add --no-cache coreutils git m4 make xz
- make binfmt-register
script:
- make build-arm32v7-image save-arm32v7-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
artifacts:
expire_in: 1 week
paths:
- dist/
build:arm64v8-image:
stage: build:images
before_script:
- docker info
- apk add --no-cache coreutils git m4 make xz
- make binfmt-register
script:
- make build-arm64v8-image save-arm64v8-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
artifacts:
expire_in: 1 week
paths:
- dist/
push:amd64-image:
stage: push:images
before_script:
- apk add --no-cache coreutils git make xz
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" >/dev/null 2>&1
script:
- make load-amd64-image push-amd64-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
dependencies:
- build:amd64-image
push:arm32v7-image:
stage: push:images
before_script:
- apk add --no-cache coreutils git make xz
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" >/dev/null 2>&1
script:
- make load-arm32v7-image push-arm32v7-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
dependencies:
- build:arm32v7-image
push:arm64v8-image:
stage: push:images
before_script:
- apk add --no-cache coreutils git make xz
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" >/dev/null 2>&1
script:
- make load-arm64v8-image push-arm64v8-image
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
dependencies:
- build:arm64v8-image
push:cross-manifest:
stage: push:manifests
before_script:
- apk add --no-cache coreutils git make xz
- "mkdir -p ~/.docker/ && printf '%s\n' '{\"experimental\": \"enabled\"}' > ~/.docker/config.json"
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" >/dev/null 2>&1
script:
- make push-cross-manifest
only:
- /^v([0-9.]+)(-.+)?$/
except:
- branches
dependencies:
- push:amd64-image
- push:arm32v7-image
- push:arm64v8-image

View File

@@ -4,35 +4,49 @@ m4_changequote([[, ]])
## "build" stage
##################################################
m4_ifdef([[CROSS_ARCH]], [[FROM docker.io/CROSS_ARCH/ubuntu:18.04]], [[FROM docker.io/ubuntu:18.04]]) AS build
m4_ifdef([[CROSS_QEMU]], [[COPY --from=docker.io/hectormolinero/qemu-user-static:latest CROSS_QEMU CROSS_QEMU]])
m4_ifdef([[CROSS_ARCH]], [[FROM dtcooper/raspberrypi-os:latest]], [[FROM dtcooper/raspberrypi-os:latest]]) AS build
# Install system packages
RUN export DEBIAN_FRONTEND=noninteractive \
# Remove Canonical's "partner" repository
&& sed -i '/archive\.canonical\.com/d;' /etc/apt/sources.list \
# Uncomment source packages repositories
&& sed -i 's/^#\s*\(deb-src\s\)/\1/g' /etc/apt/sources.list \
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
# Enable multiarch support
&& dpkg --add-architecture i386 \
]])m4_dnl
&& apt-get update \
&& apt-get install -y --no-install-recommends \
SHELL ["/bin/sh", "-euc"]
# Enable source repositories
RUN <<-EOF
sed -i '/^Types: deb$/s/$/ deb-src/' /etc/apt/sources.list.d/debian.sources
sed -i '/^Components: main$/s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list.d/debian.sources
EOF
# Install packages
RUN <<-EOF
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
autoconf \
automake \
bison \
build-essential \
ca-certificates \
checkinstall \
cmake \
dbus-x11 \
devscripts \
doxygen \
dpkg-dev \
flex \
git \
intltool \
libbz2-dev \
libdrm-dev \
libegl-dev \
libegl1-mesa-dev \
libepoxy-dev \
libfdk-aac-dev \
libfuse-dev \
libgl1-mesa-dev \
libfreetype-dev \
libfuse3-dev \
libgbm-dev \
libgl-dev \
libgles-dev \
libglu1-mesa-dev \
libglvnd-dev \
libglx-dev \
libimlib2-dev \
libmp3lame-dev \
libopus-dev \
libpam0g-dev \
@@ -42,49 +56,45 @@ m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
libsystemd-dev \
libtool \
libx11-dev \
libx11-xcb-dev \
libx264-dev \
libxcb-glx0-dev \
libxcb-keysyms1-dev \
libxcb1-dev \
libxext-dev \
libxfixes-dev \
libxml2-dev \
libxrandr-dev \
libxshmfence-dev \
libxt-dev \
libxtst-dev \
libxv-dev \
nasm \
ocl-icd-opencl-dev \
pkg-config \
python \
python-libxml2 \
texinfo \
x11-xkb-utils \
xauth \
xkb-data \
xserver-xorg-core \
xserver-xorg-dev \
xsltproc \
xutils-dev \
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
g++-multilib \
libgl1-mesa-dev:i386 \
libglu1-mesa-dev:i386 \
libxtst-dev:i386 \
libxv-dev:i386 \
]])m4_dnl
&& rm -rf /var/lib/apt/lists/*
zlib1g-dev
apt-get clean
EOF
# Build libjpeg-turbo
ARG LIBJPEG_TURBO_TREEISH=2.0.2
ARG LIBJPEG_TURBO_TREEISH=3.1.1
ARG LIBJPEG_TURBO_REMOTE=https://github.com/libjpeg-turbo/libjpeg-turbo.git
WORKDIR /tmp/libjpeg-turbo/
RUN git clone "${LIBJPEG_TURBO_REMOTE}" ./
RUN git checkout "${LIBJPEG_TURBO_TREEISH}"
RUN git submodule update --init --recursive
WORKDIR ./build/
RUN cmake ./ \
-G 'Unix Makefiles' \
-D PKGNAME=libjpeg-turbo \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/opt/libjpeg-turbo \
-D CMAKE_POSITION_INDEPENDENT_CODE=1 \
../
RUN make -j"$(nproc)" && make deb
RUN dpkg -i --force-architecture ./libjpeg-turbo_*.deb
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
WORKDIR ../build32/
RUN CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
RUN <<-EOF
git clone "${LIBJPEG_TURBO_REMOTE:?}" ./
git checkout "${LIBJPEG_TURBO_TREEISH:?}"
git submodule update --init --recursive
EOF
WORKDIR /tmp/libjpeg-turbo/build/
RUN <<-EOF
cmake ./ \
-G 'Unix Makefiles' \
-D PKGNAME=libjpeg-turbo \
@@ -92,334 +102,485 @@ RUN CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
-D CMAKE_INSTALL_PREFIX=/opt/libjpeg-turbo \
-D CMAKE_POSITION_INDEPENDENT_CODE=1 \
../
RUN make -j"$(nproc)" && make deb
RUN dpkg -i --force-architecture ./libjpeg-turbo32_*.deb
]])m4_dnl
make -j"$(nproc)" install
EOF
# Build VirtualGL
ARG VIRTUALGL_TREEISH=2.6.2
ARG VIRTUALGL_TREEISH=3.1.3
ARG VIRTUALGL_REMOTE=https://github.com/VirtualGL/virtualgl.git
WORKDIR /tmp/virtualgl/
RUN git clone "${VIRTUALGL_REMOTE}" ./
RUN git checkout "${VIRTUALGL_TREEISH}"
RUN git submodule update --init --recursive
WORKDIR ./build/
RUN cmake ./ \
-G 'Unix Makefiles' \
-D PKGNAME=virtualgl \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/opt/VirtualGL \
-D CMAKE_POSITION_INDEPENDENT_CODE=1 \
../
RUN make -j"$(nproc)" && make deb
RUN dpkg -i --force-architecture ./virtualgl_*.deb
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
WORKDIR ../build32/
RUN CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
RUN <<-EOF
git clone "${VIRTUALGL_REMOTE:?}" ./
git checkout "${VIRTUALGL_TREEISH:?}"
git submodule update --init --recursive
EOF
WORKDIR /tmp/virtualgl/build/
RUN <<-EOF
cmake ./ \
-G 'Unix Makefiles' \
-D PKGNAME=virtualgl \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/opt/VirtualGL \
-D CMAKE_POSITION_INDEPENDENT_CODE=1 \
-D VGL_EGLBACKEND=1 \
../
RUN make -j"$(nproc)" && make deb
RUN dpkg -i --force-architecture ./virtualgl32_*.deb
]])m4_dnl
make -j"$(nproc)" install
EOF
# Build XRDP
ARG XRDP_TREEISH=v0.9.10
# Build TurboVNC
ARG TURBOVNC_TREEISH=3.2
ARG TURBOVNC_REMOTE=https://github.com/TurboVNC/turbovnc.git
WORKDIR /tmp/turbovnc/
RUN <<-EOF
git clone "${TURBOVNC_REMOTE:?}" ./
git checkout "${TURBOVNC_TREEISH:?}"
git submodule update --init --recursive
EOF
WORKDIR /tmp/turbovnc/build/
RUN <<-EOF
cmake ./ \
-G 'Unix Makefiles' \
-D PKGNAME=turbovnc \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/opt/TurboVNC \
-D TVNC_BUILDSERVER=1 \
-D TVNC_BUILDWEBSERVER=0 \
-D TVNC_BUILDVIEWER=0 \
-D TVNC_BUILDHELPER=0 \
-D TVNC_SYSTEMLIBS=1 \
-D TVNC_SYSTEMX11=1 \
-D TVNC_DLOPENSSL=1 \
-D TVNC_USEPAM=1 \
-D TVNC_GLX=1 \
-D TVNC_NVCONTROL=1 \
../
make -j"$(nproc)" install
EOF
# Build xrdp
ARG XRDP_TREEISH=v0.10.3
ARG XRDP_REMOTE=https://github.com/neutrinolabs/xrdp.git
WORKDIR /tmp/xrdp/
RUN git clone "${XRDP_REMOTE}" ./
RUN git checkout "${XRDP_TREEISH}"
RUN git submodule update --init --recursive
RUN ./bootstrap
RUN ./configure \
--prefix=/usr \
RUN <<-EOF
git clone "${XRDP_REMOTE:?}" ./
git checkout "${XRDP_TREEISH:?}"
git submodule update --init --recursive
EOF
RUN <<-EOF
./bootstrap
./configure \
--prefix=/opt/xrdp \
--enable-strict-locations \
--enable-vsock \
--enable-tjpeg \
--enable-fuse \
--enable-pixman \
--enable-x264 \
--enable-rfxcodec \
--enable-painter \
--enable-rdpsndaudin \
--enable-fdkaac \
--enable-opus \
--enable-mp3lame \
--enable-pixman
RUN make -j"$(nproc)"
RUN checkinstall --default --pkgname=xrdp --pkgversion=0 --pkgrelease=0
--enable-fuse \
--enable-ipv6 \
--with-freetype2 \
--with-imlib2
make -j"$(nproc)" install
rm -f /opt/xrdp/etc/xrdp/rsakeys.ini /opt/xrdp/etc/xrdp/*.pem
EOF
# Build xorgxrdp
ARG XORGXRDP_TREEISH=v0.2.10
ARG XORGXRDP_TREEISH=v0.10.4
ARG XORGXRDP_REMOTE=https://github.com/neutrinolabs/xorgxrdp.git
WORKDIR /tmp/xorgxrdp/
RUN git clone "${XORGXRDP_REMOTE}" ./
RUN git checkout "${XORGXRDP_TREEISH}"
RUN git submodule update --init --recursive
RUN ./bootstrap
RUN ./configure
RUN make -j"$(nproc)"
RUN checkinstall --default --pkgname=xorgxrdp --pkgversion=0 --pkgrelease=0
RUN <<-EOF
git clone "${XORGXRDP_REMOTE:?}" ./
git checkout "${XORGXRDP_TREEISH:?}"
git submodule update --init --recursive
EOF
RUN <<-EOF
./bootstrap
./configure \
--prefix=/opt/xrdp \
--enable-strict-locations \
--enable-glamor \
PKG_CONFIG_PATH=/opt/xrdp/lib/pkgconfig
make -j"$(nproc)" install
EOF
# Build XRDP PulseAudio module
ARG XRDP_PULSEAUDIO_TREEISH=v0.3
# Build xrdp PulseAudio module
ARG XRDP_PULSEAUDIO_TREEISH=v0.8
ARG XRDP_PULSEAUDIO_REMOTE=https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
WORKDIR /tmp/xrdp-pulseaudio/
RUN git clone "${XRDP_PULSEAUDIO_REMOTE}" ./
RUN git checkout "${XRDP_PULSEAUDIO_TREEISH}"
RUN git submodule update --init --recursive
RUN apt-get update
RUN apt-get build-dep -y pulseaudio
RUN apt-get source pulseaudio
WORKDIR ./pulseaudio-11.1/
RUN ./configure
WORKDIR ../
RUN ./bootstrap
RUN ./configure PULSE_DIR="$(pwd)"/pulseaudio-11.1/
RUN make -j"$(nproc)"
RUN checkinstall --default --pkgname=xrdp-pulseaudio --pkgversion=0 --pkgrelease=0
WORKDIR /tmp/
RUN <<-EOF
DEBIAN_FRONTEND=noninteractive apt-get build-dep -y pulseaudio
apt-get source pulseaudio && mv ./pulseaudio-*/ ./pulseaudio/
meson setup ./pulseaudio/build/ ./pulseaudio/
EOF
WORKDIR /tmp/pulseaudio-module-xrdp/
RUN <<-EOF
git clone "${XRDP_PULSEAUDIO_REMOTE:?}" ./
git checkout "${XRDP_PULSEAUDIO_TREEISH:?}"
git submodule update --init --recursive
EOF
RUN <<-EOF
./bootstrap
./configure \
--prefix=/opt/xrdp \
--with-module-dir=/opt/xrdp/lib/pulse/modules \
PKG_CONFIG_PATH=/opt/xrdp/lib/pkgconfig \
PULSE_DIR=/tmp/pulseaudio/
make -j"$(nproc)" install
EOF
##################################################
## "xubuntu" stage
## "main" stage
##################################################
m4_ifdef([[CROSS_ARCH]], [[FROM docker.io/CROSS_ARCH/ubuntu:18.04]], [[FROM docker.io/ubuntu:18.04]]) AS xubuntu
m4_ifdef([[CROSS_QEMU]], [[COPY --from=docker.io/hectormolinero/qemu-user-static:latest CROSS_QEMU CROSS_QEMU]])
m4_ifdef([[CROSS_ARCH]], [[FROM dtcooper/raspberrypi-os:latest]], [[FROM dtcooper/raspberrypi-os:latest]]) AS main
# Install system packages
RUN export DEBIAN_FRONTEND=noninteractive \
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
&& dpkg --add-architecture i386 \
]])m4_dnl
&& apt-get update \
&& apt-get install -y --no-install-recommends \
adwaita-qt \
apt-utils \
atril \
bash \
SHELL ["/bin/sh", "-euc"]
# Copy APT config
COPY --chown=root:root ./config/apt/preferences.d/ /etc/apt/preferences.d/
RUN <<-EOF
find /etc/apt/preferences.d/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /etc/apt/preferences.d/ -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
EOF
RUN <<-EOF
sed -i '/^Types: deb$/s/$/ deb-src/' /etc/apt/sources.list.d/debian.sources
sed -i '/^Components: main$/s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list.d/debian.sources
EOF
# Install base packages
RUN <<-EOF
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
at-spi2-core \
ca-certificates \
catatonit \
curl \
dbus \
dbus-x11 \
gnupg \
libbz2-1.0 \
libegl1 \
libepoxy0 \
libfdk-aac2 \
libfreetype6 \
libfuse3-3 \
libgbm1 \
libgl1 \
libgl1-mesa-dri \
libgles2 \
libgles2-mesa \
libgles2-mesa-dev \
libglu1 \
libglvnd0 \
libglx-mesa0 \
libimlib2 \
libmp3lame0 \
libopus0 \
libpam0g \
libpixman-1-0 \
libpulse0 \
libssl3 \
libsystemd0 \
libx11-6 \
libx11-xcb1 \
libx264-164 \
libxcb-glx0 \
libxcb-keysyms1 \
libxcb1 \
libxext6 \
libxfixes3 \
libxml2 \
libxrandr2 \
libxshmfence1 \
libxt6 \
libxtst6 \
libxv1 \
locales \
lsb-release \
mesa-opencl-icd \
mesa-va-drivers \
mesa-vdpau-drivers \
mesa-vulkan-drivers \
ocl-icd-opencl-dev \
openssh-server \
openssl \
perl-base \
policykit-1 \
pulseaudio \
runit \
tzdata \
udev \
xauth \
xkb-data \
xserver-xorg-core \
xserver-xorg-input-evdev \
xserver-xorg-input-joystick \
xserver-xorg-input-libinput \
xserver-xorg-video-dummy \
xserver-xorg-video-fbdev \
xserver-xorg-video-vesa \
xorg-dev \
zlib1g
m4_ifelse(ENABLE_AMD_SUPPORT, 1, [[m4_dnl
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
libdrm-amdgpu1 \
xserver-xorg-video-amdgpu
]])m4_dnl
m4_ifelse(ENABLE_INTEL_SUPPORT, 1, [[m4_dnl
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
intel-opencl-icd \
libdrm-intel1 \
xserver-xorg-video-intel
]])m4_dnl
m4_ifelse(ENABLE_NVIDIA_SUPPORT, 1, [[m4_dnl
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
libdrm-nouveau2 \
libnvidia-cfg1-570 \
libnvidia-compute-570 \
libnvidia-decode-570 \
libnvidia-encode-570 \
libnvidia-extra-570 \
libnvidia-fbc1-570 \
libnvidia-gl-570 \
xserver-xorg-video-nouveau \
xserver-xorg-video-nvidia-570
]])m4_dnl
rm -rf /var/lib/apt/lists/*
rm -f /etc/ssh/ssh_host_*_key
EOF
# Add Mozilla repository
RUN <<-EOF
curl --proto '=https' --tlsv1.3 -sSf 'https://packages.mozilla.org/apt/repo-signing-key.gpg' | gpg --dearmor -o /etc/apt/trusted.gpg.d/mozilla.gpg
printf '%s\n' 'deb [signed-by=/etc/apt/trusted.gpg.d/mozilla.gpg] https://packages.mozilla.org/apt mozilla main' > /etc/apt/sources.list.d/mozilla.list
EOF
# Install extra packages
RUN <<-EOF
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
adwaita-icon-theme-full \
adwaita-qt \
audacity \
bash \
bash-completion \
binutils \
clinfo \
desktop-file-utils \
dialog \
engrampa \
exo-utils \
file \
firefox \
fonts-dejavu \
fonts-liberation \
fonts-noto \
fonts-noto-color-emoji \
fuse \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-ugly \
fonts-ubuntu \
fuse3 \
git \
gnome-keyring \
gtk2-engines-pixbuf \
gtk2-engines-xfce \
gtk3-engines-xfce \
htop \
ayatana-indicator-messages \
iproute2 \
less \
iputils-ping \
libavcodec-extra \
libcanberra-gtk-module \
libcanberra-gtk3-module \
libfdk-aac1 \
libgl1-mesa-dri \
libgl1-mesa-glx \
libglu1-mesa \
libgtk-3-bin \
libmp3lame0 \
libopus0 \
libpam0g \
libpixman-1-0 \
libpulse0 \
libssl1.1 \
libsystemd0 \
libx11-6 \
libxext6 \
libxfixes3 \
libxml2 \
libxrandr2 \
libxtst6 \
libxv1 \
locales \
librsvg2-common \
lshw \
lsof \
lsscsi \
media-types \
menu \
menu-xdg \
menulibre \
mesa-utils \
mesa-utils-extra \
mime-support \
mousepad \
mugshot \
nano \
openssh-server \
openssl \
net-tools \
netcat-openbsd \
parole \
pavucontrol \
pciutils \
procps \
psmisc \
pulseaudio \
pulseaudio-utils \
ristretto \
runit \
strace \
sudo \
thunar-archive-plugin \
thunar-volman \
tzdata \
tumbler \
unzip \
vlc \
usbutils \
vulkan-tools \
wget \
x11-utils \
x11-xkb-utils \
xauth \
xdg-user-dirs \
xdg-utils \
xfce4 \
xfce4-indicator-plugin \
xfce4-notifyd \
xfce4-panel \
xfce4-panel-profiles \
xfce4-pulseaudio-plugin \
xfce4-statusnotifier-plugin \
xfce4-screenshooter \
xfce4-taskmanager \
xfce4-terminal \
xfce4-whiskermenu-plugin \
xfce4-xkb-plugin \
xfonts-base \
xfpanel-switch \
xserver-xorg-core \
xserver-xorg-video-all \
xinput \
xterm \
xubuntu-default-settings \
debian-mate-default-settings \
xutils \
xz-utils \
zenity \
zip \
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
libgl1-mesa-dri:i386 \
libgl1-mesa-glx:i386 \
libglu1-mesa:i386 \
libxtst6:i386 \
libxv1:i386 \
]])m4_dnl
&& rm -rf /var/lib/apt/lists/*
zip
rm -rf /var/lib/apt/lists/*
EOF
# Copy Tini build
m4_define([[TINI_IMAGE_TAG]], m4_ifdef([[CROSS_ARCH]], [[latest-CROSS_ARCH]], [[latest]]))m4_dnl
COPY --from=docker.io/hectormolinero/tini:TINI_IMAGE_TAG --chown=root:root /usr/bin/tini /usr/bin/tini
# Copy libjpeg-turbo build
COPY --from=build /opt/libjpeg-turbo/ /opt/libjpeg-turbo/
# Install libjpeg-turbo from package
COPY --from=build --chown=root:root /tmp/libjpeg-turbo/build/libjpeg-turbo_*.deb /tmp/libjpeg-turbo.deb
RUN dpkg -i --force-architecture /tmp/libjpeg-turbo.deb && rm -f /tmp/libjpeg-turbo.deb
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
COPY --from=build --chown=root:root /tmp/libjpeg-turbo/build32/libjpeg-turbo32_*.deb /tmp/libjpeg-turbo32.deb
RUN dpkg -i --force-architecture /tmp/libjpeg-turbo32.deb && rm -f /tmp/libjpeg-turbo32.deb
]])m4_dnl
# Copy VirtualGL build
COPY --from=build /opt/VirtualGL/ /opt/VirtualGL/
# Install VirtualGL from package
COPY --from=build --chown=root:root /tmp/virtualgl/build/virtualgl_*.deb /tmp/virtualgl.deb
RUN dpkg -i --force-architecture /tmp/virtualgl.deb && rm -f /tmp/virtualgl.deb
m4_ifelse(ENABLE_32BIT, 1, [[m4_dnl
COPY --from=build --chown=root:root /tmp/virtualgl/build32/virtualgl32_*.deb /tmp/virtualgl32.deb
RUN dpkg -i --force-architecture /tmp/virtualgl32.deb && rm -f /tmp/virtualgl32.deb
]])m4_dnl
# Copy TurboVNC build
COPY --from=build /opt/TurboVNC/ /opt/TurboVNC/
# Install XRDP from package
COPY --from=build --chown=root:root /tmp/xrdp/xrdp_*.deb /tmp/xrdp.deb
RUN dpkg -i /tmp/xrdp.deb && rm -f /tmp/xrdp.deb
# Install xorgxrdp from package
COPY --from=build --chown=root:root /tmp/xorgxrdp/xorgxrdp_*.deb /tmp/xorgxrdp.deb
RUN dpkg -i /tmp/xorgxrdp.deb && rm -f /tmp/xorgxrdp.deb
# Install XRDP PulseAudio module from package
COPY --from=build --chown=root:root /tmp/xrdp-pulseaudio/xrdp-pulseaudio_*.deb /tmp/xrdp-pulseaudio.deb
RUN dpkg -i /tmp/xrdp-pulseaudio.deb && rm -f /tmp/xrdp-pulseaudio.deb
# Copy xrdp, xorgxrdp and PulseAudio module builds
COPY --from=build /opt/xrdp/ /opt/xrdp/
# Environment
ENV RDP_TLS_KEY_PATH=/etc/xrdp/key.pem
ENV RDP_TLS_CERT_PATH=/etc/xrdp/cert.pem
ENV PATH=/opt/VirtualGL/bin:"${PATH}"
ENV VGL_DISPLAY=:0
ENV SVDIR=/etc/service/
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
ENV PATH=/opt/libjpeg-turbo/bin:/opt/VirtualGL/bin:/opt/TurboVNC/bin:/opt/xrdp/sbin:/opt/xrdp/bin:${PATH}
ENV UNPRIVILEGED_USER_UID=1000
ENV UNPRIVILEGED_USER_GID=1000
ENV UNPRIVILEGED_USER_NAME=user
ENV UNPRIVILEGED_USER_PASSWORD=password
ENV UNPRIVILEGED_USER_GROUPS=
ENV UNPRIVILEGED_USER_SHELL=/bin/bash
ENV UNPRIVILEGED_USER_HOME=/home/user
ENV SERVICE_XRDP_BOOTSTRAP_ENABLED=false
ENV SERVICE_XORG_HEADLESS_ENABLED=false
ENV XRDP_RSAKEYS_PATH=/etc/xrdp/rsakeys.ini
ENV XRDP_TLS_KEY_PATH=/etc/xrdp/key.pem
ENV XRDP_TLS_CRT_PATH=/etc/xrdp/cert.pem
ENV STARTUP=xfce4-session
ENV DESKTOP_SESSION=xubuntu
ENV QT_STYLE_OVERRIDE=Adwaita
# Setup locale
RUN sed -i 's|^# \(en_US\.UTF-8 UTF-8\)$|\1|' /etc/locale.gen && locale-gen
ENV LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
RUN <<-EOF
printf '%s\n' "${LANG:?} UTF-8" > /etc/locale.gen
localedef -c -i "${LANG%%.*}" -f UTF-8 "${LANG:?}" ||:
EOF
# Setup timezone
ENV TZ=Etc/UTC
RUN ln -sf /usr/share/zoneinfo/"${TZ}" /etc/localtime
ENV TZ=UTC
RUN <<-EOF
printf '%s\n' "${TZ:?}" > /etc/timezone
ln -snf "/usr/share/zoneinfo/${TZ:?}" /etc/localtime
EOF
# Setup D-Bus
RUN mkdir /run/dbus/ && chown messagebus:messagebus /run/dbus/
RUN dbus-uuidgen > /etc/machine-id && ln -sf /var/lib/dbus/machine-id /etc/machine-id
RUN <<-EOF
dbus-uuidgen > /etc/machine-id
ln -sf /etc/machine-id /var/lib/dbus/machine-id
EOF
# Make sesman read environment variables
RUN <<-EOF
printf '%s\n' 'session required pam_env.so readenv=1' >> /etc/pam.d/xrdp-sesman
EOF
# Remove default user and group
RUN <<-EOF
if id -u "${UNPRIVILEGED_USER_UID:?}" >/dev/null 2>&1; then userdel -f "$(id -nu "${UNPRIVILEGED_USER_UID:?}")"; fi
if id -g "${UNPRIVILEGED_USER_GID:?}" >/dev/null 2>&1; then groupdel "$(id -nu "${UNPRIVILEGED_USER_GID:?}")"; fi
EOF
# Create symlinks for xrdp RSA keys and TLS certificates
RUN <<-EOF
ln -svf "${XRDP_RSAKEYS_PATH:?}" /opt/xrdp/etc/xrdp/rsakeys.ini
ln -svf "${XRDP_TLS_KEY_PATH:?}" /opt/xrdp/etc/xrdp/key.pem
ln -svf "${XRDP_TLS_CRT_PATH:?}" /opt/xrdp/etc/xrdp/cert.pem
EOF
# Forward logs to Docker log collector
RUN ln -sf /dev/stdout /var/log/xdummy.log
RUN ln -sf /dev/stdout /var/log/xrdp.log
RUN ln -sf /dev/stdout /var/log/xrdp-sesman.log
RUN <<-EOF
ln -svf /dev/stdout /var/log/xorg-headless.log
ln -svf /dev/stdout /var/log/xrdp.log
ln -svf /dev/stdout /var/log/xrdp-sesman.log
EOF
# Create /etc/skel/.xsession file
RUN printf '%s\n' 'xfce4-session' \
>> /etc/skel/.xsession
# Copy and enable services
COPY --chown=root:root ./scripts/service/ /etc/sv/
RUN <<-EOF
find /etc/sv/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /etc/sv/ -type f -not -perm 0755 -exec chmod 0755 '{}' ';'
ln -sv /etc/sv/dbus-daemon "${SVDIR:?}"
ln -sv /etc/sv/sshd "${SVDIR:?}"
ln -sv /etc/sv/udevadm-trigger "${SVDIR:?}"
ln -sv /etc/sv/udevd "${SVDIR:?}"
ln -sv /etc/sv/xrdp "${SVDIR:?}"
ln -sv /etc/sv/xrdp-sesman "${SVDIR:?}"
EOF
# Create /etc/skel/.xsessionrc file
RUN printf '%s\n' \
'export XDG_CACHE_HOME=${HOME}/.cache' \
'export XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg' \
'export XDG_CONFIG_HOME=${HOME}/.config' \
'export XDG_CURRENT_DESKTOP=XFCE' \
'export XDG_DATA_DIRS=/usr/share/xubuntu:/usr/share/xfce4:/usr/local/share:/usr/share' \
'export XDG_DATA_HOME=${HOME}/.local/share' \
'export XDG_MENU_PREFIX=xfce-' \
'export XDG_RUNTIME_DIR=/run/user/$(id -u)' \
'export XDG_SESSION_DESKTOP=xubuntu' \
>> /etc/skel/.xsessionrc
# Copy SSH config
COPY --chown=root:root ./config/ssh/ /etc/ssh/
RUN <<-EOF
find /etc/ssh/sshd_config -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
EOF
# Create /etc/skel/.Xauthority file
RUN touch /etc/skel/.Xauthority
# Copy X11 config
COPY --chown=root:root ./config/X11/ /etc/X11/
RUN <<-EOF
find /etc/X11/xorg.conf.d/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /etc/X11/xorg.conf.d/ -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
EOF
# Create /run/sshd directory
RUN mkdir /run/sshd/
# Copy xrdp config
COPY --chown=root:root ./config/xrdp/ /opt/xrdp/etc/xrdp/
RUN <<-EOF
find /opt/xrdp/etc/xrdp/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /opt/xrdp/etc/xrdp/ -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
find /opt/xrdp/etc/xrdp/ -type f -name '*.sh' -not -perm 0755 -exec chmod 0755 '{}' ';'
EOF
# Create socket directory for X server
RUN mkdir /tmp/.X11-unix/ \
&& chmod 1777 /tmp/.X11-unix/ \
&& chown root:root /tmp/.X11-unix/
# Configure server for use with VirtualGL
RUN vglserver_config -config +s +f -t
# Create guest user and group
ARG GUEST_USER_UID=1000
ARG GUEST_USER_GID=1000
RUN groupadd --gid "${GUEST_USER_GID}" guest
RUN useradd \
--uid "${GUEST_USER_UID}" \
--gid "${GUEST_USER_GID}" \
--shell "$(command -v bash)" \
--groups audio,video \
--home-dir /home/guest/ \
--create-home \
guest
# Set guest user password
ARG GUEST_USER_PASSWORD=guest
RUN printf '%s' guest:"${GUEST_USER_PASSWORD}" | chpasswd
# Create /run/user/${GUEST_USER_UID}/dbus-1/ directory
RUN mkdir -p /run/user/"${GUEST_USER_UID}"/dbus-1/ \
&& chmod -R 700 /run/user/"${GUEST_USER_UID}"/ \
&& chown -R guest:guest /run/user/"${GUEST_USER_UID}"/
# Copy config
COPY --chown=root:root config/ssh/sshd_config /etc/ssh/sshd_config
COPY --chown=root:root config/xrdp/xrdp.ini /etc/xrdp/xrdp.ini
COPY --chown=root:root config/xrdp/sesman.ini /etc/xrdp/sesman.ini
# Copy services
COPY --chown=root:root scripts/service/ /etc/sv/
RUN find /etc/sv/ -type d -mindepth 1 -maxdepth 1 -exec ln -sv '{}' /etc/service/ ';'
# Copy PulseAudio config
COPY --chown=root:root ./config/pulse/ /etc/pulse/
RUN <<-EOF
find /etc/pulse/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /etc/pulse/ -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
EOF
# Copy scripts
COPY --chown=root:root scripts/bin/ /usr/local/bin/
COPY --chown=root:root ./scripts/bin/ /usr/local/bin/
RUN <<-EOF
find /usr/local/bin/ -type d -not -perm 0755 -exec chmod 0755 '{}' ';'
find /usr/local/bin/ -type f -not -perm 0755 -exec chmod 0755 '{}' ';'
EOF
# Expose RDP port
# SSH
EXPOSE 3322/tcp
# RDP
EXPOSE 3389/tcp
WORKDIR /
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/usr/local/bin/docker-foreground-cmd"]
ENTRYPOINT ["/usr/bin/catatonit", "--", "/usr/local/bin/container-init"]

View File

@@ -1,7 +1,7 @@
The MIT License (MIT)
=====================
Copyright © 2019 Héctor Molinero Fernández
Copyright © Héctor Molinero Fernández
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

130
Makefile
View File

@@ -1,37 +1,39 @@
#!/usr/bin/make -f
SHELL := /bin/sh
.SHELLFLAGS := -eu -c
.SHELLFLAGS := -euc
DOCKER := $(shell command -v docker 2>/dev/null)
GIT := $(shell command -v git 2>/dev/null)
M4 := $(shell command -v m4 2>/dev/null)
DISTDIR := ./dist
VERSION_FILE = ./VERSION
DOCKERFILE_TEMPLATE := ./Dockerfile.m4
IMAGE_REGISTRY := docker.io
IMAGE_NAMESPACE := hectormolinero
IMAGE_REGISTRY := d.lilpenguins.com
IMAGE_NAMESPACE := desktop
IMAGE_PROJECT := xubuntu
IMAGE_NAME := $(IMAGE_REGISTRY)/$(IMAGE_NAMESPACE)/$(IMAGE_PROJECT)
IMAGE_VERSION := v0
ifneq ($(wildcard $(VERSION_FILE)),)
IMAGE_VERSION := $(shell cat '$(VERSION_FILE)')
ifeq ($(shell '$(GIT)' status --porcelain 2>/dev/null),)
IMAGE_GIT_TAG := $(shell '$(GIT)' tag --list --contains HEAD 2>/dev/null)
IMAGE_GIT_SHA := $(shell '$(GIT)' rev-parse --verify --short HEAD 2>/dev/null)
IMAGE_VERSION := $(if $(IMAGE_GIT_TAG),$(IMAGE_GIT_TAG),$(if $(IMAGE_GIT_SHA),$(IMAGE_GIT_SHA),nil))
else
IMAGE_GIT_BRANCH := $(shell '$(GIT)' symbolic-ref --short HEAD 2>/dev/null)
IMAGE_VERSION := $(if $(IMAGE_GIT_BRANCH),$(IMAGE_GIT_BRANCH)-dirty,nil)
endif
IMAGE_BUILD_OPTS :=
IMAGE_NATIVE_DOCKERFILE := $(DISTDIR)/Dockerfile
IMAGE_NATIVE_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).txz
IMAGE_NATIVE_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).tzst
IMAGE_AMD64_DOCKERFILE := $(DISTDIR)/Dockerfile.amd64
IMAGE_AMD64_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).amd64.txz
IMAGE_ARM32V7_DOCKERFILE := $(DISTDIR)/Dockerfile.arm32v7
IMAGE_ARM32V7_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).arm32v7.txz
IMAGE_AMD64_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).amd64.tzst
IMAGE_ARM64V8_DOCKERFILE := $(DISTDIR)/Dockerfile.arm64v8
IMAGE_ARM64V8_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).arm64v8.txz
IMAGE_ARM64V8_TARBALL := $(DISTDIR)/$(IMAGE_PROJECT).arm64v8.tzst
export DOCKER_BUILDKIT := 1
export BUILDKIT_PROGRESS := plain
##################################################
## "all" target
@@ -51,15 +53,17 @@ $(IMAGE_NATIVE_DOCKERFILE): $(DOCKERFILE_TEMPLATE)
mkdir -p '$(DISTDIR)'
'$(M4)' \
--prefix-builtins \
-D ENABLE_32BIT=1 \
'$(DOCKERFILE_TEMPLATE)' | cat --squeeze-blank > '$@'
'$(DOCKER)' build \
--define=ENABLE_AMD_SUPPORT=1 \
--define=ENABLE_INTEL_SUPPORT=1 \
--define=ENABLE_NVIDIA_SUPPORT=1 \
'$(DOCKERFILE_TEMPLATE)' > '$@'
'$(DOCKER)' build $(IMAGE_BUILD_OPTS) \
--tag '$(IMAGE_NAME):$(IMAGE_VERSION)' \
--tag '$(IMAGE_NAME):latest' \
--file '$@' ./
.PHONY: build-cross-images
build-cross-images: build-amd64-image build-arm32v7-image build-arm64v8-image
build-cross-images: build-amd64-image build-arm64v8-image
.PHONY: build-amd64-image
build-amd64-image: $(IMAGE_AMD64_DOCKERFILE)
@@ -68,28 +72,15 @@ $(IMAGE_AMD64_DOCKERFILE): $(DOCKERFILE_TEMPLATE)
mkdir -p '$(DISTDIR)'
'$(M4)' \
--prefix-builtins \
-D CROSS_ARCH=amd64 \
-D CROSS_QEMU=/usr/bin/qemu-x86_64-static \
-D ENABLE_32BIT=1 \
'$(DOCKERFILE_TEMPLATE)' | cat --squeeze-blank > '$@'
'$(DOCKER)' build \
--define=CROSS_ARCH=amd64 \
--define=ENABLE_AMD_SUPPORT=1 \
--define=ENABLE_INTEL_SUPPORT=1 \
--define=ENABLE_NVIDIA_SUPPORT=1 \
'$(DOCKERFILE_TEMPLATE)' > '$@'
'$(DOCKER)' build $(IMAGE_BUILD_OPTS) \
--tag '$(IMAGE_NAME):$(IMAGE_VERSION)-amd64' \
--tag '$(IMAGE_NAME):latest-amd64' \
--file '$@' ./
.PHONY: build-arm32v7-image
build-arm32v7-image: $(IMAGE_ARM32V7_DOCKERFILE)
$(IMAGE_ARM32V7_DOCKERFILE): $(DOCKERFILE_TEMPLATE)
mkdir -p '$(DISTDIR)'
'$(M4)' \
--prefix-builtins \
-D CROSS_ARCH=arm32v7 \
-D CROSS_QEMU=/usr/bin/qemu-arm-static \
'$(DOCKERFILE_TEMPLATE)' | cat --squeeze-blank > '$@'
'$(DOCKER)' build \
--tag '$(IMAGE_NAME):$(IMAGE_VERSION)-arm32v7' \
--tag '$(IMAGE_NAME):latest-arm32v7' \
--platform linux/amd64 \
--file '$@' ./
.PHONY: build-arm64v8-image
@@ -99,12 +90,12 @@ $(IMAGE_ARM64V8_DOCKERFILE): $(DOCKERFILE_TEMPLATE)
mkdir -p '$(DISTDIR)'
'$(M4)' \
--prefix-builtins \
-D CROSS_ARCH=arm64v8 \
-D CROSS_QEMU=/usr/bin/qemu-aarch64-static \
'$(DOCKERFILE_TEMPLATE)' | cat --squeeze-blank > '$@'
'$(DOCKER)' build \
--define=CROSS_ARCH=arm64v8 \
'$(DOCKERFILE_TEMPLATE)' > '$@'
'$(DOCKER)' build $(IMAGE_BUILD_OPTS) \
--tag '$(IMAGE_NAME):$(IMAGE_VERSION)-arm64v8' \
--tag '$(IMAGE_NAME):latest-arm64v8' \
--platform linux/arm64/v8 \
--file '$@' ./
##################################################
@@ -112,7 +103,7 @@ $(IMAGE_ARM64V8_DOCKERFILE): $(DOCKERFILE_TEMPLATE)
##################################################
define save_image
'$(DOCKER)' save '$(1)' | xz -T0 > '$(2)'
'$(DOCKER)' save '$(1)' | zstd -T0 > '$(2)'
endef
.PHONY: save-native-image
@@ -122,7 +113,7 @@ $(IMAGE_NATIVE_TARBALL): $(IMAGE_NATIVE_DOCKERFILE)
$(call save_image,$(IMAGE_NAME):$(IMAGE_VERSION),$@)
.PHONY: save-cross-images
save-cross-images: save-amd64-image save-arm32v7-image save-arm64v8-image
save-cross-images: save-amd64-image save-arm64v8-image
.PHONY: save-amd64-image
save-amd64-image: $(IMAGE_AMD64_TARBALL)
@@ -130,12 +121,6 @@ save-amd64-image: $(IMAGE_AMD64_TARBALL)
$(IMAGE_AMD64_TARBALL): $(IMAGE_AMD64_DOCKERFILE)
$(call save_image,$(IMAGE_NAME):$(IMAGE_VERSION)-amd64,$@)
.PHONY: save-arm32v7-image
save-arm32v7-image: $(IMAGE_ARM32V7_TARBALL)
$(IMAGE_ARM32V7_TARBALL): $(IMAGE_ARM32V7_DOCKERFILE)
$(call save_image,$(IMAGE_NAME):$(IMAGE_VERSION)-arm32v7,$@)
.PHONY: save-arm64v8-image
save-arm64v8-image: $(IMAGE_ARM64V8_TARBALL)
@@ -147,7 +132,7 @@ $(IMAGE_ARM64V8_TARBALL): $(IMAGE_ARM64V8_DOCKERFILE)
##################################################
define load_image
'$(DOCKER)' load -i '$(1)'
zstd -dc '$(1)' | '$(DOCKER)' load
endef
define tag_image
@@ -160,18 +145,13 @@ load-native-image:
$(call tag_image,$(IMAGE_NAME):$(IMAGE_VERSION),$(IMAGE_NAME):latest)
.PHONY: load-cross-images
load-cross-images: load-amd64-image load-arm32v7-image load-arm64v8-image
load-cross-images: load-amd64-image load-arm64v8-image
.PHONY: load-amd64-image
load-amd64-image:
$(call load_image,$(IMAGE_AMD64_TARBALL))
$(call tag_image,$(IMAGE_NAME):$(IMAGE_VERSION)-amd64,$(IMAGE_NAME):latest-amd64)
.PHONY: load-arm32v7-image
load-arm32v7-image:
$(call load_image,$(IMAGE_ARM32V7_TARBALL))
$(call tag_image,$(IMAGE_NAME):$(IMAGE_VERSION)-arm32v7,$(IMAGE_NAME):latest-arm32v7)
.PHONY: load-arm64v8-image
load-arm64v8-image:
$(call load_image,$(IMAGE_ARM64V8_TARBALL))
@@ -186,9 +166,8 @@ define push_image
endef
define push_cross_manifest
'$(DOCKER)' manifest create --amend '$(1)' '$(2)-amd64' '$(2)-arm32v7' '$(2)-arm64v8'
'$(DOCKER)' manifest create --amend '$(1)' '$(2)-amd64' '$(2)-arm64v8'
'$(DOCKER)' manifest annotate '$(1)' '$(2)-amd64' --os linux --arch amd64
'$(DOCKER)' manifest annotate '$(1)' '$(2)-arm32v7' --os linux --arch arm --variant v7
'$(DOCKER)' manifest annotate '$(1)' '$(2)-arm64v8' --os linux --arch arm64 --variant v8
'$(DOCKER)' manifest push --purge '$(1)'
endef
@@ -198,18 +177,13 @@ push-native-image:
@printf '%s\n' 'Unimplemented'
.PHONY: push-cross-images
push-cross-images: push-amd64-image push-arm32v7-image push-arm64v8-image
push-cross-images: push-amd64-image push-arm64v8-image
.PHONY: push-amd64-image
push-amd64-image:
$(call push_image,$(IMAGE_NAME):$(IMAGE_VERSION)-amd64)
$(call push_image,$(IMAGE_NAME):latest-amd64)
.PHONY: push-arm32v7-image
push-arm32v7-image:
$(call push_image,$(IMAGE_NAME):$(IMAGE_VERSION)-arm32v7)
$(call push_image,$(IMAGE_NAME):latest-arm32v7)
.PHONY: push-arm64v8-image
push-arm64v8-image:
$(call push_image,$(IMAGE_NAME):$(IMAGE_VERSION)-arm64v8)
@@ -225,11 +199,7 @@ push-cross-manifest:
.PHONY: binfmt-register
binfmt-register:
'$(DOCKER)' run --rm --privileged docker.io/multiarch/qemu-user-static:register
.PHONY: binfmt-reset
binfmt-reset:
'$(DOCKER)' run --rm --privileged docker.io/multiarch/qemu-user-static:register --reset
'$(DOCKER)' run --rm --privileged docker.io/hectorm/qemu-user-static:latest --reset --persistent yes --credential yes
##################################################
## "version" target
@@ -237,13 +207,13 @@ binfmt-reset:
.PHONY: version
version:
@if printf -- '%s' '$(IMAGE_VERSION)' | grep -q '^v[0-9]\{1,\}$$'; then \
NEW_IMAGE_VERSION=$$(awk -v 'v=$(IMAGE_VERSION)' 'BEGIN {printf "v%.0f", substr(v,2)+1}'); \
printf -- '%s\n' "$${NEW_IMAGE_VERSION}" > '$(VERSION_FILE)'; \
'$(GIT)' add '$(VERSION_FILE)'; '$(GIT)' commit -m "$${NEW_IMAGE_VERSION}"; \
'$(GIT)' tag -a "$${NEW_IMAGE_VERSION}" -m "$${NEW_IMAGE_VERSION}"; \
@LATEST_IMAGE_VERSION=$$('$(GIT)' describe --abbrev=0 2>/dev/null || printf 'v0'); \
if printf '%s' "$${LATEST_IMAGE_VERSION:?}" | grep -q '^v[0-9]\{1,\}$$'; then \
NEW_IMAGE_VERSION=$$(awk -v v="$${LATEST_IMAGE_VERSION:?}" 'BEGIN {printf("v%.0f", substr(v,2)+1)}'); \
'$(GIT)' commit --allow-empty -m "$${NEW_IMAGE_VERSION:?}"; \
'$(GIT)' tag -a "$${NEW_IMAGE_VERSION:?}" -m "$${NEW_IMAGE_VERSION:?}"; \
else \
>&2 printf -- 'Malformed version string: %s\n' '$(IMAGE_VERSION)'; \
>&2 printf 'Malformed version string: %s\n' "$${LATEST_IMAGE_VERSION:?}"; \
exit 1; \
fi
@@ -253,6 +223,6 @@ version:
.PHONY: clean
clean:
rm -f '$(IMAGE_NATIVE_DOCKERFILE)' '$(IMAGE_AMD64_DOCKERFILE)' '$(IMAGE_ARM32V7_DOCKERFILE)' '$(IMAGE_ARM64V8_DOCKERFILE)'
rm -f '$(IMAGE_NATIVE_TARBALL)' '$(IMAGE_AMD64_TARBALL)' '$(IMAGE_ARM32V7_TARBALL)' '$(IMAGE_ARM64V8_TARBALL)'
rm -f '$(IMAGE_NATIVE_DOCKERFILE)' '$(IMAGE_AMD64_DOCKERFILE)' '$(IMAGE_ARM64V8_DOCKERFILE)'
rm -f '$(IMAGE_NATIVE_TARBALL)' '$(IMAGE_AMD64_TARBALL)' '$(IMAGE_ARM64V8_TARBALL)'
if [ -d '$(DISTDIR)' ] && [ -z "$$(ls -A '$(DISTDIR)')" ]; then rmdir '$(DISTDIR)'; fi

View File

@@ -1,30 +1,56 @@
# Xubuntu on Docker
A Docker image based on Ubuntu 18.04 with Xfce desktop environment,
[VirtualGL](https://github.com/VirtualGL/virtualgl),
[XRDP](https://github.com/neutrinolabs/xrdp) and
[XRDP PulseAudio module](https://github.com/neutrinolabs/pulseaudio-module-xrdp).
A Docker image based on Ubuntu 24.04 with the Xfce desktop environment,
[xrdp](https://github.com/neutrinolabs/xrdp),
[xrdp PulseAudio module](https://github.com/neutrinolabs/pulseaudio-module-xrdp) and
[VirtualGL](https://github.com/VirtualGL/virtualgl).
![Preview](img/preview.png)
## Start an instance
### Docker CLI
```sh
docker run --detach \
docker run \
--name xubuntu \
--detach \
--shm-size 2g \
--publish 3322:3322/tcp \
--publish 3389:3389/tcp \
hectormolinero/xubuntu:latest
--device /dev/dri:/dev/dri \
docker.io/hectorm/xubuntu:latest
```
> You will be able to connect to the container via RDP through 3389/tcp port.
### Docker Compose
> **Important:** if you use the `--privileged` option the container will be able to use the GPU with
VirtualGL, but this will conflict with the host X server.
```yaml
services:
xubuntu:
image: 'docker.io/hectorm/xubuntu:latest'
shm_size: '2gb'
ports:
- '3322:3322/tcp'
- '3389:3389/tcp'
devices:
- '/dev/dri:/dev/dri'
```
> You will be able to connect to the container via SSH through 3322/TCP port and RDP through 3389/TCP port.
> **Important:** some software (like Firefox) need the shared memory to be increased, if you
encounter any problem related to this you may use the `--shm-size` option.
## Environment variables
* `GUEST_USER_PASSWORD`: guest user password (`guest` by default).
* `UNPRIVILEGED_USER_UID`: unprivileged user UID (`1000` by default).
* `UNPRIVILEGED_USER_GID`: unprivileged user GID (`1000` by default).
* `UNPRIVILEGED_USER_NAME`: unprivileged user name (`user` by default).
* `UNPRIVILEGED_USER_PASSWORD`: unprivileged user password (`password` by default).
* `UNPRIVILEGED_USER_GROUPS`: comma-separated list of additional GIDs for the unprivileged user (none by default).
* `UNPRIVILEGED_USER_SHELL`: unprivileged user shell (`/bin/bash` by default).
* `SERVICE_XRDP_BOOTSTRAP_ENABLED`: enable xrdp bootstrap service, initialises user session on startup (`false` by default).
* `SERVICE_XORG_HEADLESS_ENABLED`: enable headless X server service (`false` by default).
## License

View File

@@ -1 +0,0 @@
v1

View File

@@ -0,0 +1,15 @@
#!/bin/sh
if [ -z "${VGL_DISPLAY-}" ]; then
# Try to use the EGL backend
for card in /dev/dri/card*; do
if /opt/VirtualGL/bin/eglinfo -B "${card:?}" 2>/dev/null; then
export VGL_DISPLAY="${card:?}"
break
fi
done
# And fallback to DISPLAY if the EGL backend is not available
if [ -z "${VGL_DISPLAY-}" ] && [ -n "${DISPLAY-}" ]; then
export VGL_DISPLAY="${DISPLAY:?}"
fi
fi

View File

@@ -0,0 +1,17 @@
#!/bin/sh
# shellcheck disable=SC2034
{
set -a
XDG_DATA_DIRS=/usr/share/xubuntu:/usr/share/xfce4:/usr/local/share:/usr/share
XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg
XDG_CURRENT_DESKTOP=XFCE
XDG_SESSION_DESKTOP=xubuntu
XDG_SESSION_TYPE=x11
XDG_MENU_PREFIX=xfce-
XDG_DATA_HOME="${HOME:?}"/.local/share
XDG_CONFIG_HOME="${HOME:?}"/.config
XDG_CACHE_HOME="${HOME:?}"/.cache
XDG_RUNTIME_DIR=/run/user/"$(id -u)"
set +a
}

View File

@@ -0,0 +1,50 @@
Section "Module"
Disable "glx"
EndSection
Section "ServerFlags"
Option "DefaultServerLayout" "ServerLayout0"
Option "DontVTSwitch" "on"
Option "PciForceNone" "on"
Option "AutoAddDevices" "off"
Option "AutoAddGPU" "off"
EndSection
Section "ServerLayout"
Identifier "ServerLayout0"
Screen "Screen0"
InputDevice "Keyboard0"
InputDevice "Mouse0"
EndSection
Section "Screen"
Identifier "Screen0"
Monitor "Monitor0"
Device "Device0"
SubSection "Display"
Modes "800x600"
EndSubSection
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
EndSection
Section "Device"
Identifier "Device0"
Driver "dummy"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "void"
Option "CoreKeyboard" "true"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "void"
Option "CorePointer" "true"
EndSection

View File

@@ -0,0 +1,4 @@
Section "Files"
ModulePath "/usr/lib/xorg/modules"
ModulePath "/opt/xrdp/lib/xorg/modules"
EndSection

View File

@@ -0,0 +1,3 @@
Package: firefox
Pin: release n=mozilla
Pin-Priority: 1000

View File

@@ -0,0 +1,3 @@
Package: snapd
Pin: release a=*
Pin-Priority: -10

1
config/pulse/client.conf Normal file
View File

@@ -0,0 +1 @@
autospawn=yes

View File

@@ -1,29 +1,29 @@
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
Port 3322
ListenAddress 0.0.0.0
StrictModes yes
UsePAM yes
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
ListenAddress 0.0.0.0
ListenAddress ::0
Port 3322
UseDNS no
UsePAM yes
X11Forwarding yes
X11UseLocalhost no
X11DisplayOffset 100
AllowTcpForwarding yes
AcceptEnv PULSE_SERVER
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
PubkeyAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
TCPKeepAlive yes
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 1
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
PrintMotd no
PrintLastLog yes
SyslogFacility AUTH
LogLevel INFO
GSSAPIAuthentication no
Subsystem sftp internal-sftp
LoginGraceTime 30
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 5
PrintMotd no
PrintLastLog no
SyslogFacility AUTH
LogLevel INFO

View File

@@ -1,6 +1,4 @@
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
@@ -14,27 +12,48 @@ AlwaysGroupCheck=false
[Sessions]
X11DisplayOffset=10
MaxSessions=10
KillDisconnected=true
DisconnectedTimeLimit=120
KillDisconnected=false
DisconnectedTimeLimit=0
IdleTimeLimit=0
Policy=Default
[Logging]
LogFile=/var/log/xrdp-sesman.log
LogLevel=INFO
EnableSyslog=0
EnableSyslog=false
SyslogLevel=INFO
[Xorg]
param=/usr/lib/xorg/Xorg
param=-config
param=xrdp/xorg.conf
param=/opt/xrdp/etc/X11/xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
[Xvnc]
param=/opt/TurboVNC/bin/Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96
param=-deferupdate
param=1
[Chansrv]
EnableFuseMount=true
FuseMountName=.thinclient_drives
FileUmask=077
[ChansrvLogging]
LogLevel=INFO
EnableSyslog=false
SyslogLevel=INFO
EnableConsole=true
ConsoleLevel=INFO
[SessionVariables]
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
PULSE_SCRIPT=/opt/xrdp/etc/xrdp/pulse/default.pa
PULSE_DLPATH=/opt/xrdp/lib/pulse/modules:/usr/lib/pulse-16.1+dfsg1/modules

View File

@@ -1,17 +1,17 @@
[Globals]
ini_version=1
fork=true
address=0.0.0.0
port=3389
use_vsock=false
tcp_nodelay=true
tcp_nodelay=false
tcp_keepalive=true
security_layer=tls
crypt_level=high
key_file=/etc/xrdp/key.pem
certificate=/etc/xrdp/cert.pem
ssl_protocols=TLSv1.2, TLSv1.3
tls_ciphers=HIGH
autorun=XorgOther
autorun=
allow_channels=true
allow_multimon=true
bitmap_cache=true
@@ -58,20 +58,19 @@ rail=true
xrdpvr=true
tcutils=true
[XorgGuest]
name=Guest
lib=libxup.so
username=guest
password=ask
ip=127.0.0.1
port=-1
code=20
[XorgOther]
name=Other
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

BIN
img/preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

64
run.sh
View File

@@ -3,42 +3,54 @@
set -eu
export LC_ALL=C
IMAGE_NAMESPACE=hectormolinero
DOCKER=$(command -v docker 2>/dev/null)
IMAGE_REGISTRY=docker.io
IMAGE_NAMESPACE=hectorm
IMAGE_PROJECT=xubuntu
IMAGE_TAG=latest
IMAGE_NAME=${IMAGE_NAMESPACE}/${IMAGE_PROJECT}:${IMAGE_TAG}
CONTAINER_NAME=${IMAGE_PROJECT}
IMAGE_NAME=${IMAGE_REGISTRY:?}/${IMAGE_NAMESPACE:?}/${IMAGE_PROJECT:?}:${IMAGE_TAG:?}
CONTAINER_NAME=${IMAGE_PROJECT:?}
imageExists() { [ -n "$(docker images -q "$1")" ]; }
containerExists() { docker ps -aqf name="$1" --format '{{.Names}}' | grep -Fxq "$1"; }
containerIsRunning() { docker ps -qf name="$1" --format '{{.Names}}' | grep -Fxq "$1"; }
imageExists() { [ -n "$("${DOCKER:?}" images -q "${1:?}")" ]; }
containerExists() { "${DOCKER:?}" ps -af name="${1:?}" --format '{{.Names}}' | grep -Fxq "${1:?}"; }
containerIsRunning() { "${DOCKER:?}" ps -f name="${1:?}" --format '{{.Names}}' | grep -Fxq "${1:?}"; }
if ! imageExists "${IMAGE_NAME}"; then
>&2 printf -- '%s\n' "\"${IMAGE_NAME}\" image doesn't exist!"
if ! imageExists "${IMAGE_NAME:?}" && ! imageExists "${IMAGE_NAME#docker.io/}"; then
>&2 printf '%s\n' "\"${IMAGE_NAME:?}\" image doesn't exist!"
exit 1
fi
if containerIsRunning "${CONTAINER_NAME}"; then
printf -- '%s\n' "Stopping \"${CONTAINER_NAME}\" container..."
docker stop "${CONTAINER_NAME}" >/dev/null
if containerIsRunning "${CONTAINER_NAME:?}"; then
printf '%s\n' "Stopping \"${CONTAINER_NAME:?}\" container..."
"${DOCKER:?}" stop "${CONTAINER_NAME:?}" >/dev/null
fi
if containerExists "${CONTAINER_NAME}"; then
printf -- '%s\n' "Removing \"${CONTAINER_NAME}\" container..."
docker rm "${CONTAINER_NAME}" >/dev/null
if containerExists "${CONTAINER_NAME:?}"; then
printf '%s\n' "Removing \"${CONTAINER_NAME:?}\" container..."
"${DOCKER:?}" rm "${CONTAINER_NAME:?}" >/dev/null
fi
printf -- '%s\n' "Creating \"${CONTAINER_NAME}\" container..."
docker run --detach \
--name "${CONTAINER_NAME}" \
--hostname "${CONTAINER_NAME}" \
--restart on-failure:3 \
--log-opt max-size=32m \
--publish 0.0.0.0:3322:3322/tcp \
--publish 0.0.0.0:3389:3389/tcp \
--privileged \
CONTAINER_DEVICES=$(find /dev/ -mindepth 1 -maxdepth 1 \
'(' -name 'dri' -or -name 'vga_arbiter' -or -name 'nvidia*' -or -name 'nvhost*' -or -name 'nvmap' ')' \
-exec printf '--device %s:%s\n' '{}' '{}' ';' \
)
printf '%s\n' "Creating \"${CONTAINER_NAME:?}\" container..."
# shellcheck disable=SC2086
"${DOCKER:?}" run \
--name "${CONTAINER_NAME:?}" \
--hostname "${CONTAINER_NAME:?}" \
--detach \
--shm-size 2g \
"${IMAGE_NAME}" "$@" >/dev/null
--publish 3322:3322/tcp \
--publish 3389:3389/tcp \
--mount type=tmpfs,dst=/etc/xrdp/ \
--mount type=tmpfs,dst=/home/ \
--mount type=tmpfs,dst=/tmp/ \
--mount type=tmpfs,dst=/run/ \
${CONTAINER_DEVICES?} \
"${IMAGE_NAME:?}" "$@" >/dev/null
printf -- '%s\n\n' 'Done!'
exec docker logs -f "${CONTAINER_NAME}"
printf '%s\n\n' 'Done!'
exec "${DOCKER:?}" logs -f "${CONTAINER_NAME:?}"

125
scripts/bin/container-init Executable file
View File

@@ -0,0 +1,125 @@
#!/bin/sh
set -eu
# Remove leftover files
find /tmp/ /run/ -mindepth 1 -delete ||:
# Add GPU devices groups to additional groups
for dev in /dev/dri/*; do
[ -c "${dev:?}" ] || continue
gid=$(stat -c '%g' "${dev:?}")
uug=${UNPRIVILEGED_USER_GROUPS?}
UNPRIVILEGED_USER_GROUPS="${uug:+${uug:?},}${gid:?}"
done
# Create additional groups
_IFS=${IFS}; IFS=,
for gid in ${UNPRIVILEGED_USER_GROUPS?}; do
if ! getent group "${gid:?}" >/dev/null 2>&1; then
groupadd --gid "${gid:?}" "g_${gid:?}"
fi
done
IFS=$_IFS
# Create unprivileged user and group
if ! getent group "${UNPRIVILEGED_USER_GID:?}" >/dev/null 2>&1; then
groupadd --gid "${UNPRIVILEGED_USER_GID:?}" "${UNPRIVILEGED_USER_NAME:?}"
fi
if ! getent passwd "${UNPRIVILEGED_USER_UID:?}" >/dev/null 2>&1; then
useradd \
--uid "${UNPRIVILEGED_USER_UID:?}" \
--gid "${UNPRIVILEGED_USER_GID:?}" \
--groups "${UNPRIVILEGED_USER_GROUPS?}" \
--shell "${UNPRIVILEGED_USER_SHELL:?}" \
--home-dir "${UNPRIVILEGED_USER_HOME:?}" \
--create-home \
"${UNPRIVILEGED_USER_NAME:?}"
fi
# Set unprivileged user password
if [ -n "${UNPRIVILEGED_USER_PASSWORD?}" ]; then
printf '%s' "${UNPRIVILEGED_USER_NAME:?}:${UNPRIVILEGED_USER_PASSWORD:?}" | chpasswd
else
passwd -d "${UNPRIVILEGED_USER_NAME:?}"
fi
if [ -w "${UNPRIVILEGED_USER_HOME:?}" ]; then
# Copy /etc/skel/ to unprivileged user home if certain files do not exist
if [ ! -e "${UNPRIVILEGED_USER_HOME:?}"/.profile ]; then
cp -aT /etc/skel/ "${UNPRIVILEGED_USER_HOME:?}" ||:
find /etc/skel/ -mindepth 1 -exec sh -c 'chown "$1:" "$2/${3#/etc/skel/}"' _ "${UNPRIVILEGED_USER_NAME:?}" "${UNPRIVILEGED_USER_HOME:?}" '{}' ';'
fi
# Set unprivileged user home permissions
if [ "$(stat -c '%u' "${UNPRIVILEGED_USER_HOME:?}")" != "${UNPRIVILEGED_USER_UID:?}" ]; then
chown "${UNPRIVILEGED_USER_NAME:?}:" "${UNPRIVILEGED_USER_HOME:?}"
fi
if [ "$(stat -c '%a' "${UNPRIVILEGED_USER_HOME:?}")" != '750' ]; then
chmod 750 "${UNPRIVILEGED_USER_HOME:?}"
fi
fi
# Create /run/user/${UNPRIVILEGED_USER_UID}/ directory if it does not exist
if [ ! -d /run/user/"${UNPRIVILEGED_USER_UID:?}"/ ]; then
mkdir -p /run/user/"${UNPRIVILEGED_USER_UID:?}"/
chmod 700 /run/user/"${UNPRIVILEGED_USER_UID:?}"/
chown "${UNPRIVILEGED_USER_NAME:?}:" /run/user/"${UNPRIVILEGED_USER_UID:?}"/
fi
# Disable glx module if /dev/dri/ does not exist
if [ ! -d /dev/dri/ ]; then
printf '%s\n' '"/dev/dri/" does not exist, glx module will be disabled' 1>&2
sed -i 's|Load \("glx"\)|Disable \1|g' /opt/xrdp/etc/X11/xrdp/xorg.conf
fi
# Enable xrdp bootstrap service
if [ "${SERVICE_XRDP_BOOTSTRAP_ENABLED:?}" = 'true' ] && [ ! -L "${SVDIR:?}"/xrdp-bootstrap ]; then
ln -s /etc/sv/xrdp-bootstrap "${SVDIR:?}"
fi
# Enable headless X server service
if [ "${SERVICE_XORG_HEADLESS_ENABLED:?}" = 'true' ] && [ ! -L "${SVDIR:?}"/xorg-headless ]; then
ln -s /etc/sv/xorg-headless "${SVDIR:?}"
fi
# Generate SSH keys if they do not exist
if [ ! -f /etc/ssh/ssh_host_ed25519_key ]; then
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' >/dev/null
fi
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N '' >/dev/null
fi
# Generate xrdp RSA keys if they do not exist
if [ ! -f "${XRDP_RSAKEYS_PATH:?}" ]; then
mkdir -p "$(dirname "${XRDP_RSAKEYS_PATH:?}")"
(umask 077 \
&& xrdp-keygen xrdp "${XRDP_RSAKEYS_PATH:?}" \
) >/dev/null
fi
# Generate RDP certificate if it does not exist
if [ ! -f "${XRDP_TLS_KEY_PATH:?}" ] || [ ! -f "${XRDP_TLS_CRT_PATH:?}" ]; then
FQDN=$(hostname --fqdn)
mkdir -p "$(dirname "${XRDP_TLS_KEY_PATH:?}")"
(umask 077 \
&& openssl ecparam -genkey -name prime256v1 > "${XRDP_TLS_KEY_PATH:?}" \
) >/dev/null
mkdir -p "$(dirname "${XRDP_TLS_CRT_PATH:?}")"
(umask 022 \
&& openssl req -x509 -sha256 -days 3650 -subj "/CN=${FQDN:?}" -addext "subjectAltName=DNS:${FQDN:?}" -key "${XRDP_TLS_KEY_PATH:?}" > "${XRDP_TLS_CRT_PATH:?}" \
) >/dev/null
fi
# Print RDP certificate fingerprint
openssl x509 -in "${XRDP_TLS_CRT_PATH:?}" -noout -fingerprint -sha1
openssl x509 -in "${XRDP_TLS_CRT_PATH:?}" -noout -fingerprint -sha256
# Dump environment variables
env | grep -Ev '^(PWD|OLDPWD|HOME|USER|SHELL|TERM|([^=]*(PASSWORD|SECRET)[^=]*))=' | sort > /etc/environment
# Start runit
exec runsvdir -P "${SVDIR:?}"

View File

@@ -1,37 +0,0 @@
#!/bin/sh
set -eu
# Disable xdummy if there is no graphics card
if [ ! -d /dev/dri/ ]; then
unlink /etc/service/xdummy
fi
# Update guest user password
if [ -n "${GUEST_USER_PASSWORD-}" ]; then
printf '%s' "guest:${GUEST_USER_PASSWORD}" | chpasswd
unset GUEST_USER_PASSWORD
fi
# Dump environment variables
export-env >> /etc/profile.d/env.sh
# Generate self-signed certificate
if [ ! -f "${RDP_TLS_KEY_PATH}" ] || [ ! -f "${RDP_TLS_CERT_PATH}" ]; then
KEY_FILE=${RDP_TLS_KEY_PATH}
CRT_FILE=${RDP_TLS_CERT_PATH}
CSR_FILE=$(mktemp -u)
(umask 077 \
&& openssl genrsa -out "${KEY_FILE}" 2048 \
) >/dev/null
(umask 022 \
&& openssl req -new -subj "/CN=$(uname -n)" -key "${KEY_FILE}" -out "${CSR_FILE}" \
&& openssl x509 -req -days 3650 -signkey "${KEY_FILE}" -in "${CSR_FILE}" -out "${CRT_FILE}" \
&& rm -f "${CSR_FILE}" \
) >/dev/null
fi
# Start all services
exec runsvdir -P /etc/service/

View File

@@ -1,12 +0,0 @@
#!/usr/bin/awk -f
BEGIN {
for (v in ENVIRON) {
if (v !~ /^(HOME|PWD|SHELL|USER|GROUP|UID|GID)$/) {
gsub(/[^0-9A-Za-z]/, "_", v)
gsub(/\n/, " ", ENVIRON[v])
gsub(/'/, "'\\''", ENVIRON[v])
print "export '"v"="ENVIRON[v]"'"
}
}
}

View File

@@ -1,3 +1,10 @@
#!/bin/sh
exec /usr/bin/sudo -u messagebus /usr/bin/dbus-daemon --system --nofork
set -eu
if [ ! -d /run/dbus/ ]; then
install -m 755 -o messagebus -g messagebus -d /run/dbus/
fi
exec 2>&1
exec chpst -u messagebus dbus-daemon --system --nofork --nopidfile

View File

@@ -1,3 +1,10 @@
#!/bin/sh
set -eu
if [ ! -d /run/sshd/ ]; then
install -m 755 -o root -g root -d /run/sshd/
fi
exec 2>&1
exec /usr/sbin/sshd -D

View File

@@ -0,0 +1,9 @@
#!/bin/sh
set -eu
sv start udevd >/dev/null
exec 2>&1
udevadm trigger ||:
exec chpst -b udevadm-trigger perl -MPOSIX -e 'pause()'

10
scripts/service/udevd/run Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -eu
if [ ! -d /run/udev/ ]; then
install -m 755 -o root -g root -d /run/udev/
fi
exec 2>&1
exec /lib/systemd/systemd-udevd

View File

@@ -1,7 +0,0 @@
#!/bin/sh
exec /usr/bin/Xorg \
-noreset -nolisten tcp \
+extension GLX +extension RANDR +extension RENDER \
-logfile /var/log/xdummy.log \
:0

View File

@@ -0,0 +1,6 @@
#!/bin/sh
set -eu
exec 2>&1
exec /usr/lib/xorg/Xorg -noreset -nolisten tcp -logfile /var/log/xorg-headless.log :0.0

View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -eu
sv start xrdp >/dev/null
sv start xrdp-sesman >/dev/null
exec 2>&1
xrdp-sesrun -p "${UNPRIVILEGED_USER_PASSWORD?}" "${UNPRIVILEGED_USER_NAME:?}"
exec chpst -b xrdp-bootstrap perl -MPOSIX -e 'pause()'

View File

@@ -1,3 +1,6 @@
#!/bin/sh
exec /usr/sbin/xrdp-sesman --nodaemon
set -eu
exec 2>&1
exec xrdp-sesman --config /opt/xrdp/etc/xrdp/sesman.ini --nodaemon

View File

@@ -1,3 +1,6 @@
#!/bin/sh
exec /usr/sbin/xrdp --nodaemon
set -eu
exec 2>&1
exec xrdp --config /opt/xrdp/etc/xrdp/xrdp.ini --nodaemon

20
wlfreerdp.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
set -eu
export LC_ALL=C
RDP_HOST=127.0.0.1
RDP_PORT=3389
RDP_DOMAIN=Xorg
RDP_USER=user
RDP_PASSWORD=password
exec wlfreerdp3 \
/v:"${RDP_HOST:?}":"${RDP_PORT:?}" \
/u:"${RDP_DOMAIN:?}"\\"${RDP_USER:?}" /p:"${RDP_PASSWORD:?}" \
/log-level:INFO /cert:ignore \
/gfx:AVC444v2 /bpp:32 /dynamic-resolution \
/audio-mode:0 /sound:sys:pulse,rate:44100 \
/microphone:sys:pulse,rate:44100 \
+clipboard +home-drive \
-compression -encryption

20
xfreerdp.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
set -eu
export LC_ALL=C
RDP_HOST=127.0.0.1
RDP_PORT=3389
RDP_DOMAIN=Xorg
RDP_USER=user
RDP_PASSWORD=password
exec xfreerdp3 \
/v:"${RDP_HOST:?}":"${RDP_PORT:?}" \
/u:"${RDP_DOMAIN:?}"\\"${RDP_USER:?}" /p:"${RDP_PASSWORD:?}" \
/log-level:INFO /cert:ignore \
/gfx:AVC444v2 /bpp:32 /dynamic-resolution \
/audio-mode:0 /sound:sys:pulse,rate:44100 \
/microphone:sys:pulse,rate:44100 \
+clipboard +home-drive \
-compression -encryption