Compare commits

...

1198 commits

Author SHA1 Message Date
Miroslav Šedivý
0765352abd fix regression for #522. #523 2025-04-27 09:43:50 +02:00
Miroslav Šedivý
f145bd58c9
Fix mobile keyboard behavior (#522)
* keep only openMobileKeyboard, do not focus when touch device.

* do not test for hover when checking touch device.
2025-04-26 11:55:55 +02:00
Xiuming Chen
23820f6255
Fix build script for Apple Silicon MacOS. (#520) 2025-04-22 20:19:20 +02:00
Xiuming Chen
33ce337cd3
Fix docker volume mount error in build script. (#519) 2025-04-22 09:35:09 +02:00
Miroslav Šedivý
11cef143a3 temporarily disable waterfox build due to Cloudflare blocked download link. 2025-04-21 16:11:46 +02:00
Miroslav Šedivý
73e61de52e add SECURITY.md file. 2025-04-21 16:03:51 +02:00
Miroslav Šedivý
01112c5e8f clipboard: use UTF8_STRING. #517 2025-04-19 10:23:16 +02:00
James Clark
fc3b3a4dc6
fix: link to Examples in docs/v3 (#514) 2025-04-18 08:56:57 +02:00
Miroslav Šedivý
a8cc365e0f firefox: comment out xpinstall prefs. #512 2025-04-12 23:41:07 +02:00
Miroslav Šedivý
c9ca4e7144 docs firefox: guide on how to find extension ID. 2025-04-12 23:38:52 +02:00
Miroslav Šedivý
c1ccae4ac4 docs: info about supporting only one provider at a time. #505 2025-04-07 22:45:42 +02:00
Miroslav Šedivý
a46cb0536b update user agent for waterfox. they seem to block Wget/ user agents. 2025-04-07 22:43:08 +02:00
Miroslav Šedivý
b2219396dd disable proxy for local requests, #509. 2025-04-07 19:33:58 +02:00
Sean Ezrol
2ec35d9d0c
Adds an https condition to the healthcheck (#503)
* Adds an https condition to the healthcheck

* Fix V2 to V3 naming change

* Update other dockerfiles
2025-04-06 23:33:52 +02:00
Miroslav Šedivý
4eec843ed2
https: if we have legacy mode, we need to start local http server too. (#507) 2025-04-06 19:55:35 +02:00
Miroslav Šedivý
46e9b19e09 docs: legacy mode explained. 2025-04-06 17:29:56 +02:00
Miroslav Šedivý
007b55a32b add link to docs in V2 configuration warning message. 2025-04-06 17:22:34 +02:00
Miroslav Šedivý
3c787baa40 legacy: forward ws ping messages #506. 2025-04-06 17:19:22 +02:00
Miroslav Šedivý
b8bfcaf4bf legacy: fix logging. 2025-04-06 16:19:40 +02:00
Miroslav Šedivý
6c5cd1260d websocket: fix unwrap err. 2025-04-06 16:16:45 +02:00
Miroslav Šedivý
b783a9adbe docs: add overview of available encoders. 2025-04-05 22:37:56 +02:00
Miroslav Šedivý
81c259cdc9 docs: add nvidis gpu examples. #502 2025-04-05 21:45:19 +02:00
Miroslav Šedivý
972d16031e docs: add missing filetransfer config to v2. 2025-04-05 18:27:38 +02:00
Miroslav Šedivý
3a8a5c30ef docs: use ConfigurationTab that allows switching between yaml, env and cmd. 2025-04-05 18:25:04 +02:00
Miroslav Šedivý
0e3bcedcd4 update config options naming, move scripts to own folder. 2025-04-05 18:24:23 +02:00
Miroslav Šedivý
e3a1929f7f reword implicit hosting option #501. 2025-04-05 11:01:39 +02:00
Miroslav Šedivý
936794da31 include filetransfer in migration guide. 2025-04-04 22:57:58 +02:00
Miroslav Šedivý
1e91dcd7d9 add links to Availability Matrix. 2025-04-04 22:22:10 +02:00
Miroslav Šedivý
a032c9f42e dockerhub: allow only one workflow to run at a time. 2025-04-04 22:15:53 +02:00
Miroslav Šedivý
8b49fb7ca9 dockerhub ignore changes in webpage. 2025-04-04 22:12:56 +02:00
Miroslav Šedivý
da35b05c9c update docker images and include versioning in naming convention. 2025-04-04 22:02:04 +02:00
Miroslav Šedivý
4d6ad8e17d update docs for v2 migration. 2025-04-04 21:28:05 +02:00
Miroslav Šedivý
a75424d2f3 generate legacy pipelines when specifying codec. 2025-04-04 08:59:45 +02:00
Miroslav Šedivý
1c63b56b94 legacyhandler: key/button action log only in trace level. 2025-04-03 21:50:09 +02:00
Miroslav Šedivý
9eb4c36596 dockerhub use github.actor. 2025-04-03 21:46:52 +02:00
Miroslav Šedivý
1f7d12b388 add net.m1k1o.neko.api-version label to image. 2025-04-03 21:44:54 +02:00
Miroslav Šedivý
68e23fa8e7 fix server dev. 2025-04-03 14:17:59 +02:00
Miroslav Šedivý
ec44bf0e04 legacy handler set server bind. 2025-04-03 14:17:47 +02:00
Miroslav Šedivý
b383e1e24d add HelloGitHub Badge #419. 2025-04-02 22:36:12 +02:00
Miroslav Šedivý
0d62acfe04
add mobile keyboard icon. (#497) 2025-04-02 21:44:30 +02:00
Miroslav Šedivý
d7e2e73945
Scroll to chat on mobile (#496)
* WIP: scroll to chat proof of concept on mobile, #381.

* update screen size to 1024px.

* login screen position fixed, #381.

* show chat with a small video on portrait mode.
2025-04-02 21:27:11 +02:00
Miroslav Šedivý
a2ba96632c icelite should not be enabled by default. 2025-04-02 11:55:10 +02:00
Miroslav Šedivý
551a217c3f fix server dev build. 2025-04-02 01:09:14 +02:00
Miroslav Šedivý
e566095cda fix supervisrod to use a new server.static flag. 2025-04-02 01:08:17 +02:00
Miroslav Šedivý
fe94c999c6 update deploy pages. 2025-04-02 00:05:45 +02:00
Miroslav Šedivý
dd412dd37f lint client. 2025-04-02 00:05:37 +02:00
Miroslav Šedivý
8061d5b182 Revert "lint client."
This reverts commit 3918f8f1e2.
2025-04-02 00:05:06 +02:00
Miroslav Šedivý
31714f8448 add setup docker buildx for dockerhub. 2025-04-01 23:55:47 +02:00
Miroslav Šedivý
295bbfde44
Merge pull request #423 from m1k1o/v3
Version 3 - Phase 1
2025-04-01 23:48:43 +02:00
Miroslav Šedivý
231238d21c add v3.0.0. release notes. 2025-04-01 23:45:35 +02:00
Miroslav Šedivý
f3c4e53450 add edge tag to images. 2025-04-01 23:44:45 +02:00
Miroslav Šedivý
3918f8f1e2 lint client. 2025-04-01 22:06:51 +02:00
Miroslav Šedivý
4aecc87852 add list of Query parameters for UI. 2025-03-31 23:13:56 +02:00
Miroslav Šedivý
bed6e3b675 remove -d from go get. 2025-03-31 23:09:39 +02:00
Miroslav Šedivý
b6742c92ce update developer guide. 2025-03-31 23:09:26 +02:00
Miroslav Šedivý
bfb917bbea add customization section. 2025-03-31 22:39:44 +02:00
Miroslav Šedivý
2ee23a7de3 add repository structure. 2025-03-31 21:59:53 +02:00
Miroslav Šedivý
7d323f7a63 add browsers customization. 2025-03-31 21:59:40 +02:00
Miroslav Šedivý
a9b8ef94a2 docs browser is not starting with persistent profile. 2025-03-31 19:35:55 +02:00
Miroslav Šedivý
3d48850197 docs - no internet in the remote browser. 2025-03-31 19:30:49 +02:00
Miroslav Šedivý
3de71dc038 move docker & xorg-deps to utils. 2025-03-31 10:28:14 +02:00
Miroslav Šedivý
9e9cd6f486 Merge remote-tracking branch 'origin/master' into v3 2025-03-30 22:52:14 +02:00
Miroslav Šedivý
bd7f8a5126 update readme. 2025-03-30 22:48:41 +02:00
Miroslav Šedivý
5ce4820ef8 add anchor to docker images in the table. 2025-03-30 22:48:17 +02:00
Miroslav Šedivý
cab1e14b2b refactor build. 2025-03-30 22:04:12 +02:00
Miroslav Šedivý
2a714aa1ec fix build when no client. 2025-03-30 21:52:40 +02:00
Miroslav Šedivý
eba9821614 rename base image. 2025-03-30 21:52:34 +02:00
Miroslav Šedivý
8b1bf1e6b1 add no drm support hint to arm images. 2025-03-30 21:45:17 +02:00
Miroslav Šedivý
0933235060 run remmina even without profile. 2025-03-30 21:42:45 +02:00
Miroslav Šedivý
49015a81c4 fix brave arch. 2025-03-30 21:32:38 +02:00
Miroslav Šedivý
518f41f9ff update dockerhub workflow. 2025-03-30 20:36:15 +02:00
Miroslav Šedivý
409a5f1426 update docs. 2025-03-30 20:20:30 +02:00
Miroslav Šedivý
3e8169f9dc add docker image to migration. 2025-03-30 20:13:38 +02:00
Miroslav Šedivý
060b868826 update vivaldi to always download latest version. 2025-03-30 20:05:55 +02:00
Miroslav Šedivý
a5f06de65c update arm docs. 2025-03-30 19:47:27 +02:00
Miroslav Šedivý
2231b7a5a6 make vivaldi cross-arch. 2025-03-30 19:47:00 +02:00
Miroslav Šedivý
92ccd2d2d1 update names. 2025-03-30 19:16:44 +02:00
Miroslav Šedivý
40db8f6602 add gha cache. 2025-03-30 19:10:58 +02:00
Miroslav Šedivý
dfc2e5505c update names. 2025-03-30 18:30:05 +02:00
Miroslav Šedivý
c89b01fb87 update workflows. 2025-03-30 17:58:44 +02:00
Miroslav Šedivý
4150ac48f0 update workflows. 2025-03-30 17:45:18 +02:00
Miroslav Šedivý
95360b7da6 update workflows. 2025-03-30 17:42:31 +02:00
Miroslav Šedivý
cda281b78f update workflows. 2025-03-30 17:29:44 +02:00
Miroslav Šedivý
4ab3dccc7f fix amd64 & build. 2025-03-30 16:16:58 +02:00
Miroslav Šedivý
a377f0f9f2 firefox combine arm with amd64. 2025-03-30 13:11:22 +02:00
Miroslav Šedivý
3780bff07d set dockerfile even if empty string. 2025-03-30 11:33:42 +02:00
Miroslav Šedivý
f396cea0a2 update workflows. 2025-03-30 11:24:27 +02:00
Miroslav Šedivý
2f045e2c66 fix image app dockerfile. 2025-03-30 10:13:47 +02:00
Miroslav Šedivý
1acdbc9b43 enable arm32v7. 2025-03-30 09:52:47 +02:00
Miroslav Šedivý
9bca3a9a09 pass secrets. 2025-03-30 09:52:06 +02:00
Miroslav Šedivý
bd648230b5 Reapply "use GHCR_ACCESS_TOKEN."
This reverts commit 7e2b6501bd.
2025-03-30 09:50:05 +02:00
Miroslav Šedivý
73a70eb5e7 use the same dockerfile for arm and amd64. 2025-03-30 00:30:37 +01:00
Miroslav Šedivý
7e2b6501bd Revert "use GHCR_ACCESS_TOKEN."
This reverts commit e24752aafe.
2025-03-30 00:14:20 +01:00
Miroslav Šedivý
921ca792e6 use format function. 2025-03-30 00:08:49 +01:00
Miroslav Šedivý
e7b65ff7eb use format function. 2025-03-30 00:07:55 +01:00
Miroslav Šedivý
e24752aafe use GHCR_ACCESS_TOKEN. 2025-03-30 00:04:58 +01:00
Miroslav Šedivý
b0df864636 DRY workflows. 2025-03-30 00:02:33 +01:00
Miroslav Šedivý
fc0074243c disable arm32v7. 2025-03-29 23:42:19 +01:00
Miroslav Šedivý
d21262596c fix build. 2025-03-29 23:41:40 +01:00
Miroslav Šedivý
4340c27435 dockerfiel generator fix alias collision and rewrite. 2025-03-29 23:38:59 +01:00
Miroslav Šedivý
315abbc385 update workflows. 2025-03-29 22:33:07 +01:00
Miroslav Šedivý
f1c9810a76 update workflows. 2025-03-29 22:24:06 +01:00
Miroslav Šedivý
88f52eae4d update workflows. 2025-03-29 01:00:51 +01:00
Miroslav Šedivý
c6e97a93c3 add docker image generator. 2025-03-29 00:54:46 +01:00
Miroslav Šedivý
d92c482eff disable buildx. 2025-03-28 21:52:21 +01:00
Miroslav Šedivý
c265e90ce4 use docker buildx if available. 2025-03-28 21:32:02 +01:00
Miroslav Šedivý
2672c120e0 Temporarily disable the trigger to avoid unnecessary builds. 2025-03-28 16:53:42 +01:00
Miroslav Šedivý
1ea833bbdd build implement git semver tag. 2025-03-28 16:38:02 +01:00
Miroslav Šedivý
1e5110b8c6 add support for multiple tags and push. 2025-03-28 16:07:14 +01:00
Miroslav Šedivý
f9868aa92e refactor build script. 2025-03-28 15:36:11 +01:00
Miroslav Šedivý
51bbad7650 rename package to github name. 2025-03-26 23:51:19 +01:00
Miroslav Šedivý
9f480f5581 update docs with more deeplinking. 2025-03-26 22:46:11 +01:00
Miroslav Šedivý
6dc21ec918 Merge remote-tracking branch 'origin/master' into v3 2025-03-22 23:57:16 +01:00
Javier Pérez
212bf8a607
feat(i18n): enhance language management by saving user preference and auto detect browser language (#487)
* feat(i18n): enhance language management by saving user preference and detecting browser language

- Added a watcher to save the selected language to localStorage on change.
- Implemented browser language detection to set the default language based on user settings or browser preferences.

* use ~/utils/localstorage, remove setting savedLang in mounted as this is already set in i18.ts.

* do not repeat fallbackLocale and remove console log.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2025-03-22 23:56:43 +01:00
Miroslav Šedivý
5e04c31222 fix links on webpage. 2025-03-22 23:02:57 +01:00
Miroslav Šedivý
7f2dd28f99 update workflows. 2025-03-22 20:39:41 +01:00
Miroslav Šedivý
718294bbbf move troubleshooting to Help & Support. 2025-03-22 19:58:07 +01:00
Miroslav Šedivý
e3cdad3f81 update docs. 2025-03-22 18:53:45 +01:00
Miroslav Šedivý
6f3760e5b9 change API index page. 2025-03-22 17:52:56 +01:00
Miroslav Šedivý
a2526aeee6 add Reverse Proxy Setup. 2025-03-22 16:30:30 +01:00
Miroslav Šedivý
7acaeba541 add warning to available flavors. 2025-03-22 16:06:58 +01:00
Miroslav Šedivý
11797b1764 add limitations to v2 legacy driver. 2025-03-22 16:06:34 +01:00
Miroslav Šedivý
1062f6fe08 update landing page. 2025-03-22 15:51:02 +01:00
Domenic Horner
4e335efb1e
disable textarea spellcheck (in firefox) (#482)
* Update policies.json

added `browser.tabs.allowTabDetach` to prevent drag-detaching tabs into seperate windows

* disable spellcheck on the text area
2025-03-09 15:10:01 +01:00
Domenic Horner
ddaf6e17eb
Update policies.json (#481)
added `browser.tabs.allowTabDetach` to prevent drag-detaching tabs into seperate windows
2025-03-08 21:45:43 +01:00
Miroslav Šedivý
cb0d9c4330 workaround for https://github.com/docker/setup-qemu-action/issues/198 2025-02-23 15:58:40 +01:00
Miroslav Šedivý
08930bcced include paths and fail fast. 2025-02-23 15:58:36 +01:00
Miroslav Šedivý
8e97a97f79 server multiarch build. 2025-02-23 15:37:07 +01:00
Miroslav Šedivý
9d1d30fc6b add server and test build for pull requests. 2025-02-23 12:15:15 +01:00
Miroslav Šedivý
d5a2b3f57d move CNAME to satic. 2025-02-23 12:00:25 +01:00
Miroslav Šedivý
3f75b5d52f add ghcr website. 2025-02-23 11:59:11 +01:00
Miroslav Šedivý
ac25950db6 fix website. 2025-02-23 11:52:53 +01:00
Miroslav Šedivý
89f4d25700 rework homepage. 2025-02-23 00:28:30 +01:00
Miroslav Šedivý
595526ab13 update contributing and non-goals. 2025-02-22 22:08:24 +01:00
Miroslav Šedivý
28f44ba212 add roadmap with release notes to first level. 2025-02-22 21:53:09 +01:00
Miroslav Šedivý
a09f9f2d73 move release notes to docs and add contact to main menu. 2025-02-22 21:31:36 +01:00
Miroslav Šedivý
6b82ae59f3 fix brave svg. 2025-02-20 21:49:47 +01:00
Miroslav Šedivý
4eadf996ed enable legacy supprot if at least one legacy config entry is found. 2025-02-20 20:10:07 +01:00
Miroslav Šedivý
3ac462e197 add v2 api migration guide. 2025-02-20 19:37:11 +01:00
Miroslav Šedivý
f8e9c20ff1 enable WebRTC legacy conditionally. 2025-02-20 19:33:57 +01:00
Miroslav Šedivý
8f693fc379 fix api: token is only included when logging in. 2025-02-20 19:07:00 +01:00
Miroslav Šedivý
33580fe440 add v2 migration configuration docs. 2025-02-19 19:25:10 +01:00
Miroslav Šedivý
4d0aea6040 various fixes. 2025-02-18 23:07:35 +01:00
Miroslav Šedivý
5886d946b2 add API reference. 2025-02-18 22:44:48 +01:00
Miroslav Šedivý
a7287dca25 cookie add domain & path, change expiration to duration from seconds. 2025-02-17 19:33:52 +01:00
Miroslav Šedivý
6957f51300 update browser logos. 2025-02-17 17:49:34 +01:00
Miroslav Šedivý
a750a078aa add waterfox. 2025-02-17 17:49:22 +01:00
Miroslav Šedivý
2dd5585b49 update docs and add examples + ungoogled chromium svg. 2025-02-16 23:43:53 +01:00
Miroslav Šedivý
d1a2717ec1 add troubleshooting page. 2025-02-16 18:53:12 +01:00
Miroslav Šedivý
d22f014fc6 add docker images and docker run docs. 2025-02-16 18:28:33 +01:00
Miroslav Šedivý
70b9992a59 update. 2025-02-16 15:50:22 +01:00
Miroslav Šedivý
0771de5107 use readme. 2025-02-16 15:04:51 +01:00
Miroslav Šedivý
a947a7ce21 add category for configuration. 2025-02-16 15:01:16 +01:00
Miroslav Šedivý
0ea50d4c9f add plugins. 2025-02-16 15:00:58 +01:00
Miroslav Šedivý
8c6a800b57 expand configuration index. 2025-02-16 14:16:15 +01:00
Miroslav Šedivý
856b0ec15a update configuration docs. 2025-02-16 11:27:20 +01:00
Miroslav Šedivý
76066aeae7 add webrtc docs. 2025-02-16 10:53:17 +01:00
Miroslav Šedivý
63f09c14bf add webrtc docs. 2025-02-16 00:51:46 +01:00
Miroslav Šedivý
bb6fe698ad update docs. 2025-02-16 00:24:37 +01:00
nakayama-muimu
220409e137
Added Japanese localization (#471) 2025-02-15 17:19:59 +01:00
Miroslav Šedivý
8a015ffd5f Merge branch 'master' into v3 2025-02-10 16:18:14 +01:00
Miroslav Šedivý
7e8aecd368 firefox switches to .tar.xz
https://blog.nightly.mozilla.org/2024/11/28/announcing-faster-lighter-firefox-downloads-for-linux-with-tar-xz-packaging/
2025-02-10 16:12:36 +01:00
Miroslav Šedivý
4fad1b5a57 WIP skeleton for new docs. 2025-02-08 20:30:50 +01:00
Miroslav Šedivý
b23ca1af04 WIP new docs. 2025-02-08 20:30:40 +01:00
Miroslav Šedivý
004e893921 update agr descs. 2025-02-08 20:12:40 +01:00
Miroslav Šedivý
0b543445a4 add v2 docs. 2025-02-08 15:04:31 +01:00
Miroslav Šedivý
7a9832695f move docs to new website. 2025-02-02 17:08:58 +01:00
Miroslav Šedivý
a4f5a9ab29 fix colors. 2025-02-02 15:48:20 +01:00
Miroslav Šedivý
d094bebe45 WIP add docusaurus webpage. 2025-02-01 19:10:47 +01:00
SomnusVeritas
e26e595af0
Update examples.md (#464) 2025-01-13 14:22:28 +01:00
Mmx
e3b6e00648
feat(general): add heartbeat to websocket control (#460)
* chore: ignore .idea

* feat: add heartbeat event to websocket

* feat: add HeartbeatInterval to websocket config

* feat: send HeartbeatInterval in SYSTEM_INIT message

* feat: add heartbeat logic

* fix: client events is not in WebSocketEvents type
2024-12-30 13:44:05 +01:00
Miroslav Šedivý
3082d3241b implement client heartbeat #460. 2024-12-30 13:41:22 +01:00
Miroslav Šedivý
5169e0aad3 fixes issue where url was updated after broadcast was started, #429. 2024-11-07 16:48:29 +01:00
Miroslav Šedivý
5d62e56d60 fixes issue where url was updated after broadcast was started, #429. 2024-11-07 16:47:31 +01:00
Miroslav Šedivý
a569f72087 ignore irrelevant legacy ws events. 2024-09-15 23:07:14 +02:00
Miroslav Šedivý
cd87c480f5 fix nvidia dockerfiles. 2024-09-15 22:56:52 +02:00
Miroslav Šedivý
a0565dd295 fix backend response error. 2024-09-09 00:08:21 +02:00
Miroslav Šedivý
b7fb738e3a legacy websockets: add mutex. 2024-09-09 00:05:14 +02:00
Miroslav Šedivý
063fa8821f fix legacy capture pipeline. 2024-09-08 23:26:34 +02:00
Miroslav Šedivý
5c91621223 legacy: fix banned ip. 2024-09-08 23:26:17 +02:00
Miroslav Šedivý
3cacb903f3 fix build. 2024-09-08 19:57:50 +02:00
Miroslav Šedivý
6fbdea979f fix duplicate screen sizes. 2024-09-08 19:53:04 +02:00
Miroslav Šedivý
e719109116 fix control give. 2024-09-08 19:48:57 +02:00
Miroslav Šedivý
38e8ac3e21 split base build to multiple dockerfiles. 2024-09-08 17:22:49 +02:00
Miroslav Šedivý
bbefb393f8 fix uint64 and cursors on 32bit systems. 2024-09-08 15:47:42 +02:00
Miroslav Šedivý
d42165a5fd fix structs alignment. 2024-09-08 15:01:31 +02:00
Miroslav Šedivý
a4c1f9877f fix arm dockerfile. 2024-09-08 12:11:56 +02:00
Miroslav Šedivý
284ca5efef add arm & intel Dockerfiles to server. 2024-09-08 12:06:30 +02:00
Miroslav Šedivý
e16eefce19 add client dockerfile. 2024-09-08 11:53:06 +02:00
Miroslav Šedivý
3d7be663ec move devs to client & server. 2024-09-08 11:52:47 +02:00
Miroslav Šedivý
b617c5cc32 update server dockerfiles. 2024-09-08 11:52:15 +02:00
Miroslav Šedivý
0c1d7ef229 base: move files to resources. 2024-09-08 11:11:32 +02:00
Miroslav Šedivý
bba8fce895 legacy only - implement ban. 2024-09-07 23:18:21 +02:00
Miroslav Šedivý
daf8f79eb5 update client to include username when connecting to websocket. 2024-09-07 22:54:05 +02:00
Miroslav Šedivý
13f91477df legacy: update dispaly name only if not set. 2024-09-07 22:50:25 +02:00
Miroslav Šedivý
136d2ba1da legacy hack: file transfer enabled in init. 2024-09-07 21:57:04 +02:00
Miroslav Šedivý
6aac5da08c legacy: fix sendControlHost. 2024-09-07 21:31:26 +02:00
Miroslav Šedivý
373e9970f9 add legacy simulcast stream that shows pointer. 2024-09-07 21:13:40 +02:00
Miroslav Šedivý
b3b31fba1f disable legacy mode if wanted. 2024-09-07 20:51:21 +02:00
Miroslav Šedivý
db297d246d fix legacy display name. 2024-09-07 20:48:51 +02:00
Miroslav Šedivý
e018bcc886 legacy: only update name if its different. 2024-09-07 20:18:45 +02:00
Miroslav Šedivý
82aa68097b fix kicked message for legacy implementation. 2024-09-07 20:10:43 +02:00
Miroslav Šedivý
4f401ac2b6 implement session stats, fixes last (admin|user) left at won't work for any provider that removed users after logout. 2024-09-07 18:55:27 +02:00
Miroslav Šedivý
356a566bc6 Merge branch 'demodesk-v3' into v3 2024-09-06 23:53:06 +02:00
Miroslav Šedivý
94717bdad9 legacy: implement files. 2024-09-06 23:26:44 +02:00
Miroslav Šedivý
47153d31a1 legacy: implement screenshot function. 2024-09-06 23:26:44 +02:00
Miroslav Šedivý
a1f2e379cd legacy: add stats. 2024-09-06 23:26:44 +02:00
Miroslav Šedivý
6a8f8052cd legacy: implement screen resolution API. 2024-09-06 23:26:44 +02:00
Miroslav Šedivý
17467dc3c8 update dev runtime config. 2024-09-06 23:26:44 +02:00
Miroslav Šedivý
15e805c9b2 rename package. 2024-09-06 23:26:29 +02:00
Miroslav Šedivý
168507dcd4 add evns to launch. 2024-09-06 23:21:57 +02:00
Miroslav Šedivý
b9ff172c15 only update name in profile. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
60910c2d37 api profile endpoint use default data. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
d62acec443 add Kick. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
ceb4e0c3f1 implement mute / unmute. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
3d0b245abf locks send immediate ID. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
df64a53e58 fix. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
45c90ce9c2 fix logging and server addr. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
679157ef6d update profile on join. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
0f1f218694 legacy: fix error reporting. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
3965bb870d fix locks. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
8ce16e2280 fix PluginSettings. 2024-09-06 22:59:23 +02:00
Miroslav Šedivý
15591287cf fix control give for users. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
610457a9d7 add ADMIN_CONTROL. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
c2b9c70c38 add emote & fix host id. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
65730694ff handle sessions on connected / disconnected. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
9ea9c1c208 add legacy webrtc handler. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
1d8ec58fbc legacy adapter - add http calls. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
1c4fc4653b WIP legacy adapter. 2024-09-06 22:59:04 +02:00
Miroslav Šedivý
1fd4e53637 WIP: legacy WS. 2024-09-06 22:59:00 +02:00
Miroslav Šedivý
6d72a795ef fix broadcast typo. 2024-09-06 22:58:25 +02:00
Miroslav Šedivý
6a9cb24743 add V2: prefix to all config options. 2024-09-06 22:57:34 +02:00
Miroslav Šedivý
96ab1c53bb allow setting desktop / capture display separately. 2024-09-06 22:57:34 +02:00
Miroslav Šedivý
e0a4b39cd5 add v2 compatible config. 2024-09-06 22:57:34 +02:00
Miroslav Šedivý
b5c3f8d4a6 WIP: legacy config integration. 2024-09-06 22:57:34 +02:00
Miroslav Šedivý
0ee11b661a add AV1 codec. 2024-09-06 22:57:34 +02:00
Miroslav Šedivý
cfb423b13d move server to server directory. 2024-09-06 22:56:24 +02:00
Emmanuel Ortiz
2cd4957472
add generic ArrayIn function with minimal type casting (#411) 2024-08-18 22:27:49 +02:00
RisedSky
d56c19b2aa
chore(docs): Add haproxy in the reverse-proxy section (#409) 2024-08-16 09:14:06 +02:00
Lukas Bachschwell
6486db601b
Add missing libgstreamer-plugins-base1.0-dev to compile dependency docs (#407) 2024-08-11 20:02:40 +02:00
Miroslav Šedivý
1b84c7e7ba fix invalid errors. 2024-07-20 14:48:54 +02:00
Miroslav Šedivý
21a4b2b797 autostart broadcast only if url is set. 2024-06-18 23:35:22 +02:00
Miroslav Šedivý
5e96bca296 update readme. 2024-06-17 23:20:42 +02:00
Miroslav Šedivý
c78d797fe7 fix typo. 2024-06-17 23:16:48 +02:00
Miroslav Šedivý
57596315e9 broadcast_autostart as config option, #398. 2024-06-17 23:14:12 +02:00
Miroslav Šedivý
0d7887e9d2 workaround for firefox read clipboard, #373.
Firefox 122+ incorrectly reports that it can read the clipboard but it can't instead it hangs when reading clipboard, until user clicks on the page and the click itself is not handled by the page at all, also the clipboard reads always fail with "Clipboard read operation is not allowed."
2024-06-16 22:55:13 +02:00
Miroslav Šedivý
978fd8977d google does not archive chrome 111 anymore. 2024-06-16 22:28:32 +02:00
Miroslav Šedivý
4ab5901ba9 sync clipboard only if in focus #373. 2024-06-16 22:27:46 +02:00
Miroslav Šedivý
da45f62ca8 chat: use can send & can receive in settings and profile. 2024-06-16 18:10:55 +02:00
Miroslav Šedivý
37b131c74c fix plugin settings unmarshal by changing to "name.key". 2024-06-16 18:08:46 +02:00
Miroslav Šedivý
43467dcac1 filetransfer: use enabeld in settings and profile. 2024-06-16 17:27:42 +02:00
Miroslav Šedivý
5a04066c55 add PluginSettings unmarshaller. 2024-06-16 16:42:32 +02:00
Miroslav Šedivý
ae117ccdbb fix dev scripts. 2024-06-16 16:26:42 +02:00
Miroslav Šedivý
f65f262d48 WIP: add chat plugin. 2024-06-09 19:05:21 +02:00
Miroslav Šedivý
fc3b6f2e21 OnProfileChanged add new & old profile. 2024-06-09 18:02:01 +02:00
Miroslav Šedivý
11a862f101 update docs. 2024-05-19 23:17:17 +02:00
Miroslav Šedivý
b938a4e09e update docs. 2024-05-19 17:07:52 +02:00
Miroslav Šedivý
59b2faec66 add control requesting to the host. 2024-05-10 12:41:51 +02:00
Miroslav Šedivý
0e8108e9a4 add session delete and disconnect to API. 2024-05-09 10:28:58 +02:00
Miroslav Šedivý
416faa3df4 add session to host change. 2024-05-06 23:47:13 +02:00
Miroslav Šedivý
b562c797b3 remove goformat from settings.json. 2024-05-05 00:03:47 +02:00
Miroslav Šedivý
57ffca0bed add session to settings change. 2024-05-05 00:03:32 +02:00
Miroslav Šedivý
d47302e2cd remo superfluous structs from keyboard api. 2024-05-03 22:41:42 +02:00
Miroslav Šedivý
b90eb87c22 unify types.ScreenSize and add ID to screen size update. 2024-05-03 22:40:56 +02:00
Miroslav Šedivý
0f45aa3f19 implement control protection. 2024-04-21 20:10:16 +02:00
Miroslav Šedivý
3ee6078256 add filetransfer lock. 2024-04-20 17:13:32 +02:00
Miroslav Šedivý
a61eade929 add LockedLogins to settings. 2024-04-20 14:27:15 +02:00
Miroslav Šedivý
a178bede87 add filetransfer plugin. 2024-04-19 20:22:43 +02:00
Peter Dave Hello
e26e4d2004
Add zh_TW Traditional Chinese locale (#388) 2024-04-17 15:49:57 +02:00
Miroslav Šedivý
5f698330fc hide controls on mobile when locked. #381 2024-04-04 23:55:13 +02:00
Miroslav Šedivý
f32fc989b9 overlay: no pointer events when not hosting. #381 2024-04-04 23:48:59 +02:00
Miroslav Šedivý
d1f1be4e86 add to docs faq: Run neko without docker on host #314. 2024-03-28 23:54:26 +01:00
Miroslav Šedivý
e754e66878 added Frequently Asked Questions to docs. 2024-03-28 23:47:20 +01:00
Miroslav Šedivý
26af1dc7f5 add Nat Hairpinning deployment to docs #378. 2024-03-28 23:31:22 +01:00
Miroslav Šedivý
0c9055e4f6 update docs, nvidia docker is replaced by NVIDIA Container Toolkit. 2024-03-28 23:30:34 +01:00
Miroslav Šedivý
c200326512 update changelog. 2024-03-28 22:57:54 +01:00
tt2468
00c7e6dfb2
Move X11 error handler registration to before screen sets (#62)
If X11 throws an error during screen config get/set, the default error
handler at the time will be one which causes a program exit. This
splits the error handler registration in xevent into its own call,
allowing us to register our error handler earlier on. This results in
the safe error handling logic actually being called instead of a full
program exit.
2024-03-27 21:38:33 +01:00
tt2468
b1ce755210
Add glib main loop to capture manager (#383)
The gstreamer documentation is not particularly amazing on whether or
not this is necessary, but it's clear that some gstreamer events will
not be delivered to their handlers without a running glib loop. This
runs one loop for all pipelines, which should be more than enough.

Disclaimer: This may conflict in demodesk/neko with the dragdrop
feature. Anyone backporting this bug fix to that repo should
investigate whether the loop created by `gtk_main()` will conflict with
this one before blindly porting.

Fixes #380
Fixes #284
2024-03-27 21:35:04 +01:00
tt2468
2b13220d63
Fix buffer overflow in Gstreamer log function (#382)
vsprintf() is dangerous, and can overflow easily, especially with small
buffers like the 100 byte one that was being used. This changes the
buffer size to a more sane 4KiB, and uses vsnprintf() to automatically
concatenate a large log message instead of overflowing and crashing.
2024-03-27 21:32:47 +01:00
FapFapDragon
db6f9c957e
add check for volume parameter in URL before setting volume (#372) 2024-03-10 13:43:30 +01:00
Miroslav Šedivý
8981051945 remove webrtc.iceservers from flags. 2024-02-20 18:16:02 +01:00
Miroslav Šedivý
5a16143cfe fix mode info memory leak. 2024-02-20 18:15:22 +01:00
Miroslav Šedivý
ce3830f6a0 fix: base64 password hash in file members provider to avoid json issues. 2024-02-14 21:45:04 +01:00
rare1k
798bf579c0
fix typo (#367) 2024-02-09 23:49:11 +01:00
Miroslav Šedivý
9353773bfb fix vscode settings. 2024-01-26 19:34:09 +01:00
Miroslav Šedivý
45ca1b7b6c fix docker nvidia. 2024-01-26 19:33:52 +01:00
Miroslav Šedivý
670b8ec5a7 upgrade go deps. 2024-01-26 18:54:40 +01:00
Miroslav Šedivý
014c8fa586
Bullseye alongside Bookworm (#61)
* revert to bullseye.

* add bookworm.

* add bookworm to variants.

* include xf86-video-dummy because the remote git instance is offline.

* fix configure.
2024-01-26 18:47:40 +01:00
Miroslav Šedivý
2f9964580f use 1 instead of true for consistency. 2024-01-06 17:33:39 +01:00
mbattista
b8881b3a46 added doc 2024-01-06 15:05:20 +01:00
mbattista
355c0eac0d add parameter for chat mute and show side 2024-01-06 15:02:13 +01:00
Mohan_J
4d023df692
update docs to explicitly differentiate between letter O and zero (#354) 2024-01-04 17:18:36 +01:00
Miroslav Šedivý
792b1ac111 remove any temporary files associated with a Form, fixes #347. 2023-12-26 15:49:16 +01:00
Miroslav Šedivý
a03b29ba01 add version sort to get the latest version, fixes #348. 2023-12-26 15:43:50 +01:00
Miroslav Šedivý
3dbcc41795 upload drop to config. 2023-11-24 10:44:24 +01:00
Miroslav Šedivý
b40c0778c8 file chooser dialog diabled by default. 2023-11-24 10:39:09 +01:00
Miroslav Šedivý
d9bcde3331
sha256 hash password. (#60) 2023-11-19 15:31:18 +01:00
Miroslav Šedivý
9d1ea87128
members bulk delete. (#59) 2023-11-19 15:19:47 +01:00
Miroslav Šedivý
683b750189 move proxy option to server. 2023-11-19 14:50:23 +01:00
Miroslav Šedivý
501280f8aa server proxy, router opts and optional CORS. 2023-11-19 14:35:19 +01:00
Miroslav Šedivý
cd9d31a627 upgrade go deps. 2023-11-06 15:21:05 +01:00
dependabot[bot]
801b5b198f
Bump golang.org/x/net from 0.12.0 to 0.17.0 (#58)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.12.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.12.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 11:16:47 +01:00
Miroslav Šedivý
3c4d7b9d60 upgrade go-chi to v5. 2023-10-15 13:18:43 +02:00
Miroslav Šedivý
8753e7b69a members: add multiuser profile. 2023-09-25 18:28:05 +02:00
Miroslav Šedivý
d09e421a51
Remove dbus (#55)
* remove dbus.

* xfce needs dbus installed.
2023-09-11 16:49:45 +02:00
Miroslav Šedivý
4da7869e70
Add Xorg modifiers (#57)
* implement additional modifiers to xorg.

* xorg modifiers to API.

* update modifiers api & add ws.

* scroll pos rename to delta and add ctrl key.
2023-09-11 16:34:57 +02:00
Miroslav Šedivý
a392163819 fix runtime dockerfile. 2023-09-10 19:38:07 +02:00
Miroslav Šedivý
5f321b52e5 cleanup nvidia dockerfile. 2023-09-09 15:25:12 +02:00
Miroslav Šedivý
6f61e0262a xf86-input-neko: extract init touch to own func. 2023-09-07 16:06:20 +02:00
Miroslav Šedivý
d82b640ecc xf86-input-neko: do not turn off device on uninit. 2023-09-07 14:27:24 +02:00
Miroslav Šedivý
5ceef394ca maintain backward compatibility with g_memdup. 2023-09-06 19:12:41 +02:00
Miroslav Šedivý
05403cc0c6
Upgrade to bookworm (#54)
* upgrade to bookworm.

* g_memdup is deprecated: Use g_memdup2 instead.

* upgrade nvidia dockerfile.

* revert devcontainer.
2023-09-05 23:01:18 +02:00
guangwu
7a9b33706a
chore: remove refs to deprecated io/ioutil (#329) 2023-08-31 13:32:16 +02:00
Miroslav Šedivý
052a961fd9 fix docs #327, 2023-08-26 21:13:20 +01:00
Miroslav Šedivý
25a65863bb fix devcontainer. 2023-08-17 17:00:09 +02:00
Miroslav Šedivý
ea5517b270
Xorg input driver (#53)
* add xf86 input driver.

* cleanup.

* rewrite to unix socket PoC.

* add input rebuild.

* lint & docs.

* add input driver struct.

* comments, lint, socket name from config.

* add touch events to webrtc.

* switch to uint32.

* misc update logging & linting,

* fix screen size

* set touchscreen as core pointer.

* add touch to ws control.

* SendCoreEvents.

* extract to own xinput folder.

* add debounce.

* switch pressure to uint8.

* check buffer size.

* send touch events with system init.
2023-08-17 16:14:59 +02:00
Miroslav Šedivý
4cb1b3e925
upgrade go dependencies. (#52) 2023-07-16 16:49:51 +02:00
Miroslav Šedivý
ecc68dd644 fix devcontainer. 2023-07-08 16:14:11 +02:00
Miroslav Šedivý
e3e9d1606d
Refactor signaling for video and audio (#51)
* add audio and signal request.

* disable audio by default.

* fix SignalProvide.

* disable estimator when track disabled.
2023-06-26 21:27:14 +02:00
Miroslav Šedivý
8ef9c1aff5 add firefox nvidia image to docs. 2023-06-26 17:39:34 +02:00
Miroslav Šedivý
cf17f4f503 add estimator comments to config. 2023-06-07 17:41:16 +02:00
Miroslav Šedivý
e83c447e52 fix control give API. 2023-06-06 21:49:57 +02:00
Miroslav Šedivý
6b3bc17334 update README.md. 2023-05-21 13:19:23 +02:00
Miroslav Šedivý
ac76c81f69
Upgrade go dependencies (#50)
* upgrade go dependencies.

* remove testify deep equal.
2023-05-19 22:29:25 +02:00
Miroslav Šedivý
dfc7eb3882
Fix noisy errors (#49)
* send message error.

* read message error.

* close webrtc conn only if not closed yet.

* file upload no files received.
2023-05-19 17:19:38 +02:00
Miroslav Šedivý
3e8d686c0f
Bandwidth estimator refactor (#46)
* rewrite to use stream selector.

* WIP.

* add nacks to metrics.

* add estimate trend.

* estimator based on trend detector.

* add estimator unstable duration.

* add estimator debug.

* add stalled duration.

* estimator move values to config.

* change default estimator values.

* minor style changes.

* fix websocket video messages.

* replace video track with ivdeo id.
2023-05-15 19:29:39 +02:00
Miroslav Šedivý
8660c1a256 add sessions to API. 2023-05-15 16:47:59 +02:00
Miroslav Šedivý
848556adbd add time stats to state. 2023-05-15 16:47:59 +02:00
Miroslav Šedivý
82401391c8 add locked_controls to openapi. 2023-05-15 16:47:28 +02:00
Miroslav Šedivý
0760976b4b set all settings initially using config. 2023-05-15 16:47:28 +02:00
Miroslav Šedivý
cf4e0666fe add locked controls to settings. 2023-05-15 16:47:28 +02:00
Miroslav Šedivý
6ed3493aa0 update LICENCE. 2023-05-11 00:42:12 +02:00
Miroslav Šedivý
5959d056f3
Fix arm build (#302)
* WIP.

* WIP.

* WIP.
2023-04-29 18:35:11 +02:00
Miroslav Šedivý
92ad202bfe
Add version to docker build (#301)
* add version to build.

* update docs.
2023-04-29 00:12:56 +02:00
Miroslav Šedivý
b8fccc4d07 add settings plugins to openapi. 2023-04-28 23:54:01 +02:00
Miroslav Šedivý
173bc6b053 CI build variant only on tag. 2023-04-28 23:53:05 +02:00
Miroslav Šedivý
a4f9f0bff5 CI build variant. 2023-04-28 23:12:26 +02:00
Miroslav Šedivý
a75ae187b4 add plugin scope to settings. 2023-04-28 22:53:41 +02:00
Miroslav Šedivý
52b4cbcbdf add path prefix to server. 2023-04-28 22:19:52 +02:00
Miroslav Šedivý
c70c8217de add unminimize. 2023-04-24 22:19:48 +02:00
Miroslav Šedivý
466185fc24 fixed by using XFlush. 2023-04-24 22:19:48 +02:00
Miroslav Šedivý
47a3f6d6fb twice toggle maximizes for fullscreen. 2023-04-24 22:19:48 +02:00
Miroslav Šedivý
3ef4c5ce0f use DefaultRootWindow. 2023-04-24 22:19:48 +02:00
Miroslav Šedivý
0ea1c2870f
Refactor websocket session sync (#44)
* refactor websocket peer and comment functions.

* update comments.

* add DestroyWebSocketPeer.
2023-04-23 11:23:20 +02:00
mbattista
cd4acb5eec
lang url parameter (#296)
* lang url parameter

* add ?lang to readme.

---------

Co-authored-by: Miroslav Šedivý <sedivy.miro@gmail.com>
2023-04-22 01:24:23 +02:00
Miroslav Šedivý
43f8fe339f webrtc peer do not set nil conn. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
5a2fcc1c8a move consts. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
3f375c037f fix track rtcp & paused. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
fcf6822833 move estimator to peer. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
1ba561b192 fix logging. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
c2b29ccf21 handle use webrtc logger. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
e8aab98012 refactro cursor image and pos. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
728e27da34 minor changes, moving things around. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
a2e0aeec77 receiver stop error reporting. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
dfea7fca42 refactor handler. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
c676d7a3a2 move collectors to metrics. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
5f0aafca51 remove deprecated functions. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
9d362ed036 move change funcs to peer. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
ec8560b290 add session & metrics to webrtc peer. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
9928feefef refactor metrics. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
7cd469f7bd cleanup peer. 2023-04-18 12:07:49 +02:00
Miroslav Šedivý
a32be0b44a
Update Dockerfile.nvidia for google-chrome 2023-04-16 00:31:05 +02:00
Miroslav Šedivý
b2080649ea add docs fixes #275. 2023-04-10 13:05:56 +02:00
Miroslav Šedivý
851c38b8fd update docs. 2023-04-10 13:01:00 +02:00
Miroslav Šedivý
e2336be568 update changelog. 2023-04-09 15:45:14 +02:00
Miroslav Šedivý
e417ec5dbe add XDG_RUNTIME_DIR to env. 2023-04-09 15:42:33 +02:00
Miroslav Šedivý
ad7e1f2b7b allow using supervisorctl. 2023-04-09 15:24:16 +02:00
Miroslav Šedivý
91e1a8b502 add firefox nvidia. 2023-04-09 15:22:44 +02:00
Miroslav Šedivý
9bdf9c8851 fix nvidia google chrome version, #229. 2023-04-07 20:20:05 +02:00
Miroslav Šedivý
c1360d3abc ensure that paths are writable by neko user, #277. 2023-04-06 00:00:59 +02:00
Miroslav Šedivý
e66cd3978d
Build gstreamer in nvidia image (#36)
* build gstreamer 1.20 for nvidia dockerfile.

* add nvidia to build.

* add nvidia to start.

* add config for nvidia.

* upgrade cuda ro 11.4.3.

* add cudaconvert to comment.

* fix paths.

* add cuda to ld.

* upgrade supervisord version.

* add config to suprtvisord in rebuild.

* update nvenc params.

* update nvidia dockerfile.

* h264 profile constrained-baseline.

* h264 send SPS PPS with every IDR.
2023-04-04 23:52:15 +02:00
Miroslav Šedivý
950095d6d8
update Dockerfile.nvidia, #274. 2023-04-03 20:06:52 +02:00
Miroslav Šedivý
009bc20969 update docs, #273. 2023-04-02 12:35:06 +02:00
Miroslav Šedivý
395db0fd54 version 2.8.0. 2023-04-01 23:01:10 +02:00
Miroslav Šedivý
13fa86d543 update changelog. 2023-04-01 22:59:39 +02:00
Miroslav Šedivý
8308c13382 update nvenc pipeline. 2023-04-01 22:59:39 +02:00
mbattista
ec175909a3 improve quality a little bit 2023-04-01 22:59:39 +02:00
mbattista
d2f51fa10f add h264parse to nvidia pipeline 2023-04-01 22:59:39 +02:00
Miroslav Šedivý
70325e0277 add nvenc pipeline. 2023-04-01 22:59:39 +02:00
Miroslav Šedivý
bdff0841ec add nvenc support for gstreamer. 2023-04-01 22:59:39 +02:00
Miroslav Šedivý
3c17dbe282 h264 encoding profile constrained-baseline, #109. 2023-03-31 21:43:20 +02:00
Miroslav Šedivý
3f117af3b9
upgrade go dependencies. (#41) 2023-03-31 19:35:09 +02:00
Miroslav Šedivý
bdebcd3221 pulseaudio log level error. 2023-03-31 19:07:38 +02:00
Miroslav Šedivý
1a752e43d2
Add plugins required flag (#40)
* add required plugins flag.

* update plugins logs.

* add plugins subcommand.

* move preflight to prerun.
2023-03-31 12:02:33 +02:00
Miroslav Šedivý
43a649d2c4
websockets set max payload log size. (#42) 2023-03-31 12:02:19 +02:00
Miroslav Šedivý
887413d536 update changelog. 2023-03-27 21:55:52 +02:00
Miroslav Šedivý
f9228e653d Merge branch 'pu/touch' 2023-03-27 21:47:49 +02:00
Miroslav Šedivý
df634be1c5 lint. 2023-03-27 21:47:41 +02:00
Miroslav Šedivý
2ff47ac920 fix: ensure webrtc close is executed only once. 2023-03-27 19:28:28 +02:00
Miroslav Šedivý
08a5d5abb4
Split ICE Servers to frontend and backend (#37)
* split iceservers to frontend and backend.

* no backend ice servers when ice lite enabled.

* update config.
2023-03-27 18:34:24 +02:00
Miroslav Šedivý
f8edd988b3
configure pulseaudio from env. (#39) 2023-03-27 18:34:05 +02:00
Miroslav Šedivý
09508638ce
session save & load from a file. (#38) 2023-03-27 18:33:51 +02:00
Miroslav Šedivý
2130daa02d add volume to docs. 2023-03-27 18:22:31 +02:00
Pawel Urbanek
aee7650d47 add touch events on touch monitor 2023-03-27 14:28:42 +02:00
Pawel Urbanek
98ba32c574 add url param for audio volume. 2023-03-27 13:04:11 +02:00
Miroslav Šedivý
d08d3eccef configure pulseaudio from ENV, #267. 2023-03-26 20:13:35 +02:00
Miroslav Šedivý
0dd9597519 create pulseaudio sink, fixes #267. 2023-03-26 18:59:10 +02:00
Miroslav Šedivý
fa69ddd984 streamsink total bytes metric counter. 2023-03-17 20:20:23 +01:00
Miroslav Šedivý
362bcd3852 nvidia switch to virtualgl 3.1. 2023-03-17 12:12:38 +01:00
Miroslav Šedivý
9936a04fea
add passive estimator & REMB back. (#35) 2023-03-13 17:55:52 +01:00
Miroslav Šedivý
0de8ffc773
update screen rate set. (#34) 2023-03-13 17:55:41 +01:00
Miroslav Šedivý
17bfd2d58f
Sample listeners chan (#33)
* switch to sample listeners.

* add streamsink total bytes to metrics.

* on rtcp to chan.

* change logs.

* streamsink add real bitrate.

* add timing information to sample.

* bitrate buckets.

* switch to WriteSample.
2023-03-07 00:08:53 +01:00
Miroslav Šedivý
38fc21aabc upgrade deps. 2023-02-28 10:09:18 +01:00
Miroslav Šedivý
a9e6736ca4 upgrade deps. 2023-02-28 10:02:20 +01:00
Miroslav Šedivý
977662affe
Upgrade to go 1.20 (#30)
* upgrade dependencies.

* videoscale element to nearest neighbor.
2023-02-26 21:57:02 +01:00
Miroslav Šedivý
a4a3ff79ad
Toggle estimator config (#32)
* add estimator to conifg.

* ensure video auto is false when estimator is disabled.
2023-02-26 21:54:10 +01:00
Miroslav Šedivý
64abfd0b1a cursors increase max serial to 300. 2023-02-21 00:14:50 +01:00
Miroslav Šedivý
ccaaacac7c do not round height to 8. 2023-02-20 19:49:39 +01:00
Miroslav Šedivý
30200d4057
Switch to listeners for webrtc pause (#31)
* switch to listeners for webrtc pause.

* group track vars.

* do not set or remove stream when paused.
2023-02-20 19:48:04 +01:00
Miroslav Šedivý
0086900053
GCC No-Op Pacer (#29)
* on rtcp send multiple packets.

* use no op pacer.
2023-02-14 21:19:14 +01:00
Miroslav Šedivý
124c5ae117
Wait for keyframe on switching streams (#28)
* stream sink add keyframe lobby.

* change streamsink keyframe identifier.

* add h264.

* use gstreamers is delta unit for sample.

* use delta unit.
2023-02-14 21:19:02 +01:00
Miroslav Šedivý
f8b128e1e9
Custom sizes with XRandR (#25)
* xserver dummy with RandR.

* update.

* remove screen configurations from xorg.

* screen size cannot be nil anymore.

* use predefined screen configurations.

* use screen configurations.

* fix error.

* remove comment.
2023-02-14 21:18:47 +01:00
Miroslav Šedivý
bfabee12e2
gst emit video keyframe on demand. (#27) 2023-02-07 21:43:14 +01:00
Miroslav Šedivý
2364facd60
WebRTC congestion control (#26)
* Add congestion control

* Improve stream matching, add manual stream selection, add metrics

* Use a ticker for bitrate estimation and make bandwidth drops switch to lower streams more aggressively

* Missing signal response, fix video auto bug

* Remove redundant mutex

* Bitrate history queue

* Get bitrate fn support h264 & float64

---------

Co-authored-by: Aleksandar Sukovic <aleksandar.sukovic@gmail.com>
2023-02-06 19:45:51 +01:00
Miroslav Šedivý
e80ae8019e
set answering dtls role as server. (#24) 2023-01-30 11:31:30 +01:00
Miroslav Šedivý
a72648c409
add dockerfile. (#22) 2023-01-27 22:32:33 +01:00
Gheorghe
94981e30aa chore: add more resolutions
- 25 fps 2k
- 25 fps 1600x900
- 25 fps 1368x768
- 25 fps 800x1600
2023-01-23 17:04:32 +01:00
Miroslav Šedivý
813a0da30c
WebRTC ping over data channel (#23)
* add datachannel ping to webrtc.

* add ping pong decode func.
2023-01-20 23:08:27 +01:00
Miroslav Šedivý
ba0dea8022 switch to xkb. 2023-01-16 13:54:17 +01:00
Miroslav Šedivý
eac9796c47 no free keycodes, pick last two keycodes anyway. 2023-01-16 13:54:17 +01:00
Miroslav Šedivý
67cc23fd53 circular list for free keycodes. 2023-01-16 13:54:17 +01:00
Miroslav Šedivý
bd04ca88e8 fix missing error message on wrong config. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
8381020415 default provider: multiuser. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
7601af9917 fix default pipeline. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
1fb5ae43dd allow multiple users to be set in object provider. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
107eba22a5 select profile primarily from corresponding session, if exists. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
2ff8d84ba2 fix errors. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
af95cb4d72 change dummy to noauth mode. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
319bd457f3 add multiuser provider. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
e5c84469ce MemberProvider: add variable names. 2023-01-13 12:01:58 +01:00
Miroslav Šedivý
6574470278 login logout proper http error handling. 2023-01-12 23:21:56 +01:00
Miroslav Šedivý
b793e5b377 add stereo to opus codec. 2023-01-12 20:34:09 +01:00
Miroslav Šedivý
3c3042d691
Add batch endpoint (#19)
* add batch endpoint.

* keep error code.

* use utils.HttpSuccess.

* add batch to openapi.

* body omitempty.
2023-01-09 23:18:47 +01:00
Miroslav Šedivý
fb8462b56a
Add WebRTC candidate metrics (#18)
* stats: add protocol to iceCandidates.

* add ice candidates used metric.

* NewICECandidate use whole struct.
2022-12-16 13:49:51 +01:00
Miroslav Šedivý
b49f545094 properly log unhandled panics. 2022-12-15 22:15:50 +01:00
Miroslav Šedivý
6b39e8e0e8
Fix WebRTC mux issues (#17)
* use NewMultiUDPMuxFromPort.

* tcp mux add write buffer size.
2022-12-13 11:35:03 +01:00
Miroslav Šedivý
919a554a9e track WriteSample fix log message. 2022-12-12 22:53:26 +01:00
Miroslav Šedivý
05c4fa34c5 fix indirect dependencies. 2022-11-28 22:09:33 +01:00
Miroslav Šedivý
833c0d5e86 upgrade dependencies. 2022-11-28 21:32:20 +01:00
Miroslav Šedivý
09f213f442 remove /var/log/neko fom Dockerfile. 2022-11-11 19:46:25 +01:00
Miroslav Šedivý
7946afaffe fix dev supervisord. 2022-11-11 19:43:09 +01:00
Miroslav Šedivý
2cb64d15a0
send heartbeat with ping. (#16) 2022-11-11 17:58:54 +01:00
Miroslav Šedivý
482476489e
supervisord add -s flag (#15)
* fix duplicate supervisord logs.

* add -s flag.
2022-11-11 17:40:50 +01:00
Miroslav Šedivý
3d131bb42a supervisord separate logging. 2022-11-10 18:18:39 +01:00
Miroslav Šedivý
d894e888b8 fix generic plugin error message. 2022-10-25 22:46:21 +02:00
Miroslav Šedivý
6067367acd
Capture bandwidth switch (#14)
* Handle bitrate change by finding the stream with closest bitrate as peer

* Convert video id into bitrate when creating peer or changing bitrate

* Try to fix prometheus panic

* Revert metrics label name change

* minor fixes.

* bitrate selector.

* skip if moving to the same stream.

* no closure for getting target bitrate.

* fix: high res switch to lo video, stream bitrate out of range

* revert dev config change.

* white space.

Co-authored-by: Aleksandar Sukovic <aleksandar.sukovic@gmail.com>
2022-10-25 20:25:00 +02:00
Miroslav Šedivý
e0bee67e85 fix build pipe redirection. 2022-10-24 22:54:28 +02:00
Miroslav Šedivý
d608e312eb
check if we already listen to requested stream. (#13) 2022-10-23 11:31:25 +02:00
Miroslav Šedivý
5ad5daa6bb
Stream bucket manager (#12)
* refactor webrtc.

* bind track with a single connection.

* audio+video codec.

* move stream selection to bucket manager.

* audio w/o bucket manager.

* revert peer changes.

* return video IDs.

* destroy & recreate all.

* add video ID change.

* Track -> Recevier.
2022-10-17 13:39:31 +02:00
Miroslav Šedivý
095f9fe8ee
gst as interface. (#11) 2022-10-13 19:57:31 +02:00
Miroslav Šedivý
0badeeee36
Fix cursor size. (#10)
* fix cursor size.

* folders -> config.
2022-10-04 20:21:40 +02:00
Miroslav Šedivý
c34a76c8a3 broadcast url in config. 2022-09-23 17:21:33 +02:00
Miroslav Šedivý
194fd29679 capture fix replaces for pipelines. 2022-09-23 17:21:33 +02:00
Miroslav Šedivý
da24f92e72 broadcast log url. 2022-09-23 17:21:33 +02:00
Miroslav Šedivý
3eedbbf8ea broadcast pipeline fn. 2022-09-23 17:21:33 +02:00
Miroslav Šedivý
a6f117686f create pipeline fn return error. 2022-09-23 17:21:33 +02:00
Miroslav Šedivý
d5863d8b95 set WebRTC video codec H.264 profile-level-id to 42e01f to be compatible with Firefox clients. 2022-09-13 22:21:56 +02:00
Miroslav Šedivý
f512b97708 fix whitespace. 2022-09-13 22:21:08 +02:00
Miroslav Šedivý
23ce5c0cdd switch to gtk popup window. 2022-09-12 21:19:21 +02:00
Miroslav Šedivý
d35c237f48 gst remove main loop. 2022-09-12 21:19:21 +02:00
Miroslav Šedivý
c793ff1ff6 kataras/go-events@v0.0.3 Once workaround. 2022-09-12 21:19:21 +02:00
Miroslav Šedivý
6d2ba7b640 name caps and encoder. 2022-09-10 23:26:41 +02:00
Miroslav Šedivý
0488976dd6 gstreamer add API. 2022-09-10 23:26:41 +02:00
Miroslav Šedivý
938ea38cd6 fix build git repo check. 2022-08-27 16:59:02 +02:00
Miroslav Šedivý
291750c1d7 fix build git repo check. 2022-08-26 20:21:00 +02:00
Miroslav Šedivý
691150900b
Temporary websocket disconnect handling (#6)
* fix websocket close log error.

* logger session interface no pointer.

* websocket delayet disconnect.

* session host: save id not pointer to a session.

* fix if hostId not stored.
2022-08-26 20:16:40 +02:00
Miroslav Šedivý
5612b80634 add README. 2022-08-01 00:26:53 +02:00
Miroslav Šedivý
a6813f994c ws control buttons & keys add optional pos. 2022-07-28 12:43:31 +02:00
Miroslav Šedivý
7d5ec0190a add button events to control WebSocket. 2022-07-28 12:43:31 +02:00
Miroslav Šedivý
f4a4e0152e webrtc SetCursorPosition. 2022-07-28 12:43:31 +02:00
Miroslav Šedivý
81531d74c1 websocket move cursor & scroll. 2022-07-28 12:43:31 +02:00
Miroslav Šedivý
babddacbf3
Go generics and changes in v1.18 (#5)
* ArrayIn to use generics.

* interface{} -> any.
2022-07-28 12:20:20 +02:00
Miroslav Šedivý
c725e96c90
change shutdown order. (#4) 2022-07-28 12:19:58 +02:00
Miroslav Šedivý
472fd5f346 add LICENSE. 2022-07-18 22:08:47 +02:00
Miroslav Šedivý
c85d1f3159
Add GitHub Actions (#2) 2022-07-15 00:29:57 +02:00
Miroslav Šedivý
52ba7d987f plugins buildvcs. 2022-07-14 23:47:45 +02:00
Miroslav Šedivý
d08829493a add plugins folder. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
b7926c335e dev config add round. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
3cd59b9f30 rename module name from gitlab to github. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
41df1bc8d3 build - ensure plugins folder exists. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
757437111e add build scripts. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
a1f7b23f9d add openapi. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
43fa56f5af update gitignore. 2022-07-14 22:10:41 +02:00
Miroslav Šedivý
e181abf577 set version from git tag. 2022-07-04 19:14:52 +02:00
Miroslav Šedivý
1064cc4eb5 go mod upgrade. 2022-07-04 18:28:38 +02:00
Miroslav Šedivý
2bf83f6217 add metrics to config. 2022-07-04 18:26:29 +02:00
Miroslav Šedivý
bf47e5a8d0 cleanup. 2022-07-04 18:23:35 +02:00
Miroslav Šedivý
8f83089c8e move to /health and exclude metrics from logging. 2022-07-04 18:09:47 +02:00
Miroslav Šedivý
e37f5c13ca fix bug. 2022-07-04 18:03:35 +02:00
Miroslav Šedivý
8ada0217d0 reset counters when closed. 2022-07-04 17:47:04 +02:00
Miroslav Šedivý
d5c934f2af add ReceiverReport. 2022-07-04 01:01:03 +02:00
Miroslav Šedivý
fb707f05a6 join bytes by a label. 2022-07-04 00:48:29 +02:00
Miroslav Šedivý
01b5d61e2b add receiverEstimatedMaximumBitrate. 2022-07-04 00:38:46 +02:00
Miroslav Šedivý
3fda00bac5 add video id for webrtc metrics. 2022-07-03 23:21:25 +02:00
Miroslav Šedivý
e4261c53b1 iceCandidatesMu. 2022-07-03 23:06:56 +02:00
Miroslav Šedivý
bb35695255 split sctp and ice bytes. 2022-07-01 00:16:39 +02:00
Miroslav Šedivý
7a1c8813e6 metrics connection State Count. 2022-06-30 23:54:06 +02:00
Miroslav Šedivý
fc5c017666 stats ice Candidates Count. 2022-06-30 23:50:47 +02:00
Miroslav Šedivý
8e80ef2c69 streamsrc mutex. 2022-06-25 23:53:19 +02:00
Miroslav Šedivý
527b1f08f8 add webrtc metrtics. 2022-06-25 20:12:42 +02:00
Miroslav Šedivý
555fd803bc add active pipelines. 2022-06-19 01:03:16 +02:00
Miroslav Šedivý
5ab4848580 join pipelines_total. 2022-06-19 00:51:17 +02:00
Miroslav Šedivý
ef7e9b1a53 move metrics to /metrics. 2022-06-14 22:34:51 +00:00
Miroslav Šedivý
6deaa64884 capture metrics. 2022-06-15 00:23:16 +02:00
Miroslav Šedivý
0952be6a94 add chi metrics middleware. 2022-06-15 00:22:27 +02:00
Miroslav Šedivý
5b7784f2a4 add auth test. 2022-05-14 17:40:49 +02:00
Miroslav Šedivý
ff85f0b11b PluginsGenericOnly debug types. 2022-05-14 00:30:58 +02:00
Miroslav Šedivý
a31ad44bb8 plugins generic only. 2022-05-12 00:12:15 +02:00
Miroslav Šedivý
91c8f0886b optionally rebuild plugins. 2022-05-08 00:32:20 +02:00
Miroslav Šedivý
0e6b411988 skip plugin build if no go.plug.mod. 2022-05-08 00:22:45 +02:00
Miroslav Šedivý
52642dbeb6 add plugins to member profile. 2022-05-08 00:15:36 +02:00
Miroslav Šedivý
d5425ea457 clipboard set for control paste. 2022-05-03 19:57:31 +00:00
Aleksandar Sukovic
49ff490640 load plugins in order of dependencies. 2022-05-03 11:17:04 +00:00
Aleksandar Sukovic
cd2d9b413d build plugins with own modfile. 2022-05-03 08:15:44 +00:00
Maksim Dorokhin
ae7e6dc2d7 add error to plugin start. 2022-04-20 09:31:37 +00:00
Miroslav Šedivý
61059c9b3c revert backwards compatibility. 2022-04-19 10:16:59 +00:00
Aleksandar Sukovic
fdd0639036 expose plugin service. 2022-04-19 10:14:59 +00:00
Aleksandar Sukovic
35892f4ed1 upgrade to go 1.18. 2022-04-15 19:38:12 +00:00
Miroslav Šedivý
a4bb108168 replace modules with go plugins. 2022-04-15 19:28:00 +00:00
Maksim Dorokhin
f447cabe2e add patch method to router. 2022-04-14 08:47:47 +00:00
Miroslav Šedivý
149d74150b sessions in private still get cursor info & send inactive. 2022-03-27 00:35:33 +01:00
Miroslav Šedivý
470f670865 private mode release control. 2022-03-27 00:32:21 +01:00
Miroslav Šedivý
58fca708a7 add settings update to API. 2022-03-27 00:26:25 +01:00
Miroslav Šedivý
7d53e59945 properly clear inactive cursors. 2022-03-27 00:26:11 +01:00
Miroslav Šedivý
81867d811b sessions: switch to settings struct. 2022-03-27 00:08:06 +01:00
Miroslav Šedivý
d004ddd68f private mode implementation. 2022-03-26 23:20:38 +01:00
Miroslav Šedivý
f549171ded opus useinbandfec. 2022-03-24 21:48:51 +01:00
Miroslav Šedivý
192095da86 upgrade dependencies. 2022-03-23 12:07:56 +01:00
Miroslav Šedivý
8593d2d0fd move shared code to pkg. 2022-03-20 11:43:00 +01:00
Miroslav Šedivý
94c17e9a42 rename module to gitlab.com/demodesk/neko/server. 2022-03-20 11:27:41 +01:00
Miroslav Šedivý
aa556b7839 go mod tidy. 2022-03-09 13:34:01 +01:00
Miroslav Šedivý
d108343ced Logs JSON output. 2022-03-07 10:05:02 +00:00
Miroslav Šedivý
f32e7e7075 fix-races. 2022-02-14 17:41:47 +00:00
Miroslav Šedivý
89ba775a71 add pprof. 2022-02-12 20:22:50 +01:00
Miroslav Šedivý
d068698836 update logging. 2022-02-12 18:55:56 +01:00
Miroslav Šedivý
55a2b14aea webrtc implement signal close. 2022-02-12 18:46:00 +01:00
Miroslav Šedivý
d20fa071e7 register negotiation event after initial offer. 2022-02-10 23:39:52 +01:00
Miroslav Šedivý
369d8f3ccf peer webrtc connection check. 2022-02-10 00:12:30 +01:00
Miroslav Šedivý
c83883fd1e vscode debugging. 2022-02-09 23:10:29 +01:00
Miroslav Šedivý
924be20505 WebRTC TCP and UDP mux. 2022-02-09 20:45:03 +00:00
Miroslav Šedivý
c2cf9277dc emit /recevie samples on demand. 2022-01-22 17:58:05 +01:00
Miroslav Šedivý
26ab7fa12d add control cut. 2022-01-30 17:53:22 +01:00
Miroslav Šedivý
e8c7ab421a control actions with requests. 2022-01-30 17:52:50 +01:00
Miroslav Šedivý
f6eb8d0315 ws handler simplify logging. 2022-01-30 17:47:28 +01:00
Miroslav Šedivý
fcc85aa9d6 desktop control websocket. 2022-01-30 01:25:04 +01:00
Miroslav Šedivý
0d6335ebcd fileChooserDialog use keypress. 2022-01-30 01:23:05 +01:00
Miroslav Šedivý
b261217cbe add KeyPress func. 2022-01-30 01:22:07 +01:00
Miroslav Šedivý
5c05d1009b add keysymdef generator. 2022-01-30 01:20:26 +01:00
Maksim Dorokhin
c129c99a36 add zip and curl to container. 2022-01-21 09:43:38 +01:00
Miroslav Šedivý
9475e917a3 upgrade deps. 2022-01-17 19:39:15 +01:00
Miroslav Šedivý
499256492a config flag with -c. 2022-01-16 21:03:37 +01:00
Miroslav Šedivý
646b6ecaff cookie expiration as time duration. 2022-01-16 21:03:25 +01:00
Miroslav Šedivý
0dd11fc1b7 move configs to serve. 2022-01-16 20:35:57 +01:00
Miroslav Šedivý
66d22dede4 configs to root. 2022-01-14 00:22:23 +01:00
Miroslav Šedivý
62353c776d move logic to serve. 2022-01-14 00:21:56 +01:00
Miroslav Šedivý
552c4e37bc change pulseaudio log level. 2022-01-08 23:56:10 +01:00
Miroslav Šedivý
8b6a2ed6d6 add webcam resolution + to config. 2022-01-08 23:53:45 +01:00
Miroslav Šedivý
dc33aa37bc add v4l2loopback to comments. 2022-01-06 22:35:12 +01:00
Miroslav Šedivý
14a2e698ac add stop fn to remote track. 2022-01-06 22:28:34 +01:00
Miroslav Šedivý
0f9f9a376c fix remote track logging. 2022-01-06 20:41:44 +01:00
Miroslav Šedivý
6b14e01415 add media to capture config. 2021-12-09 23:22:24 +01:00
Miroslav Šedivý
21140d3dd3 fix broadcast config. 2021-12-09 22:58:12 +01:00
Miroslav Šedivý
670e0ee17d member profile can share media. 2021-12-09 21:48:02 +01:00
Miroslav Šedivý
b653856994 fix v4l2sink sync. 2021-12-05 22:25:35 +01:00
Miroslav Šedivý
6431f63da7 v4l2 drop-allocation. 2021-12-05 22:11:52 +01:00
Miroslav Šedivý
9a6eb942a4 keep appsrc / appsink in ctx. 2021-12-05 22:06:42 +01:00
Miroslav Šedivý
8de5cb2f4a fix gst log. 2021-12-05 21:33:30 +01:00
Miroslav Šedivý
f9fe303b50 gst destroy remove. 2021-12-05 21:31:40 +01:00
Miroslav Šedivý
b932e94f77 gst refactor to use ctx. 2021-12-05 18:16:26 +01:00
Miroslav Šedivý
7c3a24a613 add zerolog to gst. 2021-12-05 17:52:25 +01:00
Miroslav Šedivý
09cb1e9c6a webcam add videoconvert. 2021-12-05 16:35:04 +01:00
Miroslav Šedivý
64c3449322 pipeline error handling. 2021-12-02 23:35:38 +01:00
Miroslav Šedivý
d70ae4410f implement webcam. 2021-12-02 23:06:21 +01:00
Miroslav Šedivý
9f9956d047 upgrade deps. 2021-12-02 21:41:53 +01:00
Miroslav Šedivý
5643e7abbc add streamsrc to capture. 2021-12-01 22:36:45 +01:00
Miroslav Šedivý
a6eca45e7f implement codec parse. 2021-12-01 22:34:36 +01:00
Miroslav Šedivý
0a94191a5f rename to StreamSink. 2021-12-01 20:30:18 +01:00
Miroslav Šedivý
065a7a2e84 gst minor changes. 2021-12-01 19:55:57 +01:00
Miroslav Šedivý
75b1e08874 virtual microphone OnTrack. 2021-11-28 23:16:26 +01:00
Miroslav Šedivý
7bc9a40677 gst push function. 2021-11-28 22:37:17 +01:00
Miroslav Šedivý
710d0c9cd0 gst extract appsink. 2021-11-28 22:19:06 +01:00
Miroslav Šedivý
7b2c1570bf add SDP answer. 2021-11-28 18:36:47 +01:00
Miroslav Šedivý
096efe9b38 add on track log. 2021-11-25 23:46:06 +01:00
Miroslav Šedivý
0075cdca2b implement OnNegotiationNeeded. 2021-11-25 21:43:39 +01:00
Miroslav Šedivý
44e74e3088 implement signal offer. 2021-11-25 00:07:17 +01:00
Miroslav Šedivý
a260ce6a60 fix comments. 2021-11-18 22:01:41 +01:00
Miroslav Šedivý
ddf44cbeac add audio input sink. 2021-11-18 21:48:43 +01:00
Miroslav Šedivý
097e8d2a87 Inactive cursors - multiple positions. 2021-11-12 15:27:05 +00:00
Maksim Dorokhin
8dbe0d1d2d add .idea to .gitignore. 2021-11-09 15:40:47 +00:00
Miroslav Šedivý
1b95728870 clear CanHost dependency from SendsInactiveCursor. 2021-11-08 18:45:34 +01:00
Miroslav Šedivý
15cb4300a5 cursors add currentEmpty. 2021-11-07 21:23:23 +01:00
Miroslav Šedivý
6b77f54b8c inactiveCursors to own func. 2021-11-03 23:52:44 +01:00
Miroslav Šedivý
437eb44003 inactive cursors access control. 2021-11-03 21:59:38 +01:00
Miroslav Šedivý
6b417131f2 inactive cursors default false. 2021-11-01 21:35:15 +01:00
Miroslav Šedivý
6fa2f4513f add InactiveCursors to ws init. 2021-11-01 18:38:16 +01:00
Miroslav Šedivý
3528766e7f inactive cursors to config. 2021-11-01 17:49:02 +01:00
Miroslav Šedivý
28c22a254b use types.Cursor. 2021-11-01 17:31:00 +01:00
Miroslav Šedivý
1025eedc22 inactive cursor length rewrite. 2021-10-26 22:35:38 +02:00
Miroslav Šedivý
78e4c38264 lastEmpty session cursors. 2021-10-26 21:07:57 +02:00
Miroslav Šedivý
0b5e064cab add sessions cursors. 2021-10-24 01:09:41 +02:00
Miroslav Šedivý
318b833b30 set position in session. 2021-10-23 20:25:18 +02:00
Miroslav Šedivý
60f459392a webrtc handle. 2021-10-21 22:55:01 +02:00
Miroslav Šedivý
2068c0ee05 webrtc remote desktop from cursor pos. 2021-10-21 22:53:54 +02:00
Miroslav Šedivý
d5c0c62675 lint fix minor problems. 2021-10-07 21:41:19 +02:00
Miroslav Šedivý
e45bd7098f replace chan struct{}. 2021-10-04 14:40:20 +02:00
Miroslav Šedivý
74dbdea78a fix typo. 2021-10-02 13:51:22 +02:00
Miroslav Šedivý
8960fc2371 MoveListenerTo ensure atomic execution. 2021-10-01 14:41:21 +02:00
Miroslav Šedivý
27cb473ef9 stream implement MoveListenerTo. 2021-10-01 13:46:10 +02:00
Miroslav Šedivý
0245c73e2b rename to PeerStreamTrack. 2021-10-01 00:02:54 +02:00
Miroslav Šedivý
c9c8cc67ca refactor broadcast pipeline. 2021-09-30 20:06:43 +02:00
Miroslav Šedivý
4debddf27d remove leftover variable from capture manager. 2021-09-30 20:03:30 +02:00
Miroslav Šedivý
550084e195 refactor screencast pipeline. 2021-09-30 20:01:26 +02:00
Miroslav Šedivý
e9502b0d9b session update mutex logic. 2021-09-30 19:42:25 +02:00
Miroslav Šedivý
325af8fc5a RemoveListener add dispatcher. 2021-09-29 01:03:39 +02:00
Miroslav Šedivý
5bae3503d0 session websocket & webrtc add mutex. 2021-09-29 01:01:03 +02:00
Miroslav Šedivý
77d2ef9aaf stream listener use channel dispatcher. 2021-09-29 00:22:51 +02:00
Miroslav Šedivý
18fbdb2ff8 stream listener count <0 handling. 2021-09-29 00:21:53 +02:00
Miroslav Šedivý
5bb2da2732 stream fix listener counts. 2021-09-27 01:17:25 +02:00
Miroslav Šedivý
9d4d5766ef webrtc refactor peer track. 2021-09-27 00:50:49 +02:00
Miroslav Šedivý
beac1cb088 peer configuration multiple codecs. 2021-09-26 22:59:45 +02:00
Miroslav Šedivý
fa168a53c9 webrtc extract connection. 2021-09-26 22:26:22 +02:00
Miroslav Šedivý
e623a15771 update cmd root. 2021-09-26 21:29:56 +02:00
Miroslav Šedivý
d91c0a9f7f move websocket Ping to peer. 2021-09-24 15:15:59 +02:00
Miroslav Šedivý
41d8fa7e22 do not panic if capture pipeline already exists. 2021-09-20 20:21:13 +02:00
Miroslav Šedivý
51577ecff4 screen size retype one struct. 2021-09-20 18:28:13 +02:00
Miroslav Šedivý
31eb743a5d fix static server response code. 2021-09-20 00:19:33 +02:00
Miroslav Šedivý
e95cc99ea2 fix whitespaces. 2021-09-20 00:19:10 +02:00
Miroslav Šedivý
f96466b7b9 websocket upgrade as router handler. 2021-09-18 14:59:15 +02:00
Miroslav Šedivý
fd9d5ec6f8 websocket shutdown + log. 2021-09-18 13:41:20 +02:00
Miroslav Šedivý
137614c087 fix deadlock. 2021-09-18 00:56:03 +02:00
Miroslav Šedivý
6bd46b438e exclude healthcheck from logs. 2021-09-17 20:35:41 +02:00
Miroslav Šedivý
c2d2557704 http logger add panic. 2021-09-17 20:20:10 +02:00
Miroslav Šedivý
6026ab8a27 log http panic. 2021-09-17 19:37:09 +02:00
Miroslav Šedivý
7e548ec00a logger wrap zerolog. 2021-09-17 19:27:21 +02:00
Miroslav Šedivý
fb6042ada1 do not export router context. 2021-09-17 19:23:04 +02:00
Miroslav Šedivý
fe84e218e6 logger use chi's middleware. 2021-09-17 19:22:49 +02:00
Miroslav Šedivý
5688be80ba fix logger. 2021-09-17 00:58:50 +02:00
Miroslav Šedivý
8d0fcbde70 use custom logger. 2021-09-17 00:58:50 +02:00
Miroslav Šedivý
5a7cdd31fe http refactor. 2021-09-17 00:24:33 +02:00
Miroslav Šedivý
4fa11e6a2a refactor HTTP error. 2021-09-16 20:16:51 +02:00
Miroslav Šedivý
d46c5d9d30 desktop module use shutdown close. 2021-09-13 23:50:16 +02:00
Miroslav Šedivý
d21cb9f336 client logs use module. 2021-09-12 17:00:29 +02:00
Miroslav Šedivý
4f7bd48bec ws close connections on shutdown and add wg. 2021-09-09 23:55:53 +02:00
Miroslav Šedivý
51207c2b50 FE logs: no handler context. 2021-09-09 22:51:37 +02:00
Miroslav Šedivý
d0e283f1a9 do not log info about FE log messages. 2021-09-09 22:51:24 +02:00
Miroslav Šedivý
fb2c479325 logs: interface instead of string. 2021-09-09 22:51:03 +02:00
Miroslav Šedivý
afc79ed847 receive frontend logs using WS. 2021-09-09 22:08:39 +02:00
Miroslav Šedivý
83aa2dde41 go upgrade deps. 2021-09-09 20:38:21 +02:00
Miroslav Šedivý
9deb5adee1 MemberAlreadyExists returns UnprocessableEntity. 2021-09-09 00:33:11 +02:00
Miroslav Šedivý
e0f1857c51 fx WebRTC logging. 2021-09-05 22:44:16 +02:00
Miroslav Šedivý
75c1dd6d22 peer close simplified logging. 2021-09-02 21:58:00 +02:00
Miroslav Šedivý
c85d00e507 add websocket destroy reason. 2021-09-02 21:52:23 +02:00
Miroslav Šedivý
d7671942a6 code fmt change. 2021-09-02 21:37:24 +02:00
Miroslav Šedivý
00fc3afcd7 extract webrtc payload to own module. 2021-09-02 21:06:58 +02:00
Miroslav Šedivý
e812cb9fbf pionlog to own folder. 2021-09-02 20:48:15 +02:00
Miroslav Šedivý
1dab0bd859 remove session from websocket peer. 2021-09-02 20:30:50 +02:00
Miroslav Šedivý
f18ae2b972 add waitgroups. 2021-09-02 00:00:56 +02:00
Miroslav Šedivý
7e2f173460 unify shutdown logs. 2021-09-02 00:00:29 +02:00
Miroslav Šedivý
fd35254487 simplified logging. 2021-09-01 23:30:09 +02:00
Miroslav Šedivý
5130d94bbc websocket handler simplified logging. 2021-09-01 23:10:18 +02:00
Miroslav Šedivý
c2fe224562 audit errors and warnings. 2021-09-01 23:10:06 +02:00
Miroslav Šedivý
49c48b3200 remove event from messages. 2021-09-01 21:58:39 +02:00
Miroslav Šedivý
3ac1b481ad session websocket add event. 2021-09-01 21:16:36 +02:00
Miroslav Šedivý
5b5e541cc0 websocket peer add event. 2021-09-01 21:11:07 +02:00
Miroslav Šedivý
4341257f14 bump to debian 11. 2021-09-01 19:45:58 +02:00
Miroslav Šedivý
2be75421ea go mod tidy. 2021-09-01 19:45:21 +02:00
Miroslav Šedivý
f763c810cc bump golang version to 1.16. 2021-08-31 18:42:06 +02:00
Miroslav Šedivý
6a32dbadf4 updated websocket logging. 2021-08-29 23:03:04 +02:00
Miroslav Šedivý
402b8f1a08 rename WebSocket handler. 2021-08-29 23:01:51 +02:00
Miroslav Šedivý
c82a083fb6 use websocket message. 2021-08-29 23:00:51 +02:00
Miroslav Šedivý
47d0359106 remove unknown message from handler. 2021-08-29 19:28:01 +02:00
Miroslav Šedivý
a95a987fb6 Destroy() does not return error. 2021-08-29 19:17:10 +02:00
Miroslav Šedivý
a03507227d webrtc logging. 2021-08-29 18:59:46 +02:00
Miroslav Šedivý
8f8cd47e85 websockets logging. 2021-08-29 18:23:58 +02:00
Miroslav Šedivý
d00d66e0ec api forbidden if login disabled. 2021-08-29 17:23:49 +02:00
Miroslav Šedivý
0501091c96 remove io/ioutil. 2021-08-29 17:12:37 +02:00
Miroslav Šedivý
343b0c562a common errors as variable. 2021-08-29 17:09:13 +02:00
Miroslav Šedivý
530cc04805 http use config. 2021-08-29 15:40:58 +02:00
Miroslav Šedivý
8bb77166e8 stream use video_id in logs. 2021-08-28 20:15:54 +02:00
Miroslav Šedivý
b2ae808233 add merciful reconnect option. 2021-08-23 18:41:19 +02:00
Miroslav Šedivý
01c0f269ee use defer for ticker. 2021-08-19 21:19:02 +02:00
Miroslav Šedivý
bdff2ddabe lint fix errors. 2021-08-18 22:37:19 +02:00
Miroslav Šedivý
f088ff1d08 browser: use single supervisord.conf. 2021-08-18 22:37:19 +02:00
Miroslav Šedivý
22964f6af7 upgrade deps. 2021-08-15 16:54:50 +02:00
Miroslav Šedivý
2329a940c8 fix logging. 2021-08-03 11:06:34 +02:00
Miroslav Šedivý
45ee1eef3e handle closed peerConnection. 2021-08-03 10:47:05 +02:00
Miroslav Šedivý
40d820a3e0 fix logging. 2021-08-02 18:37:54 +02:00
Miroslav Šedivý
3227978725 add screencast enabled bool to system init. 2021-07-14 14:23:51 +02:00
Miroslav Šedivý
257b642b94 browser_profile to custom module. 2021-07-07 16:18:47 +02:00
Miroslav Šedivý
7377e24abe zip: omit base dir. 2021-07-04 23:10:31 +02:00
Miroslav Šedivý
486f9e13df allow supervisord to be controlled by neko user. 2021-07-04 22:32:01 +02:00
Miroslav Šedivý
18e2ba6390 zip fix file check. 2021-07-04 21:36:42 +02:00
Miroslav Šedivý
d3206bfd24 add ZIP to utils. 2021-07-04 01:36:09 +02:00
Miroslav Šedivý
a852eddfb7 add mutex to webrtc peer. 2021-06-30 00:04:41 +02:00
Miroslav Šedivý
c2277c4917 webrtc: remove offer timeout as this is handled by lib. 2021-06-29 22:41:30 +02:00
Miroslav Šedivý
d3fb84e582 upgrade deps. 2021-06-28 18:12:36 +02:00
Miroslav Šedivý
9176fe3782 cgo import not only for linux. 2021-06-28 18:10:48 +02:00
Miroslav Šedivý
7df642a346 add iceTrickle for restart from config. 2021-06-27 22:05:37 +02:00
Miroslav Šedivý
09fdea1b11 add ice restarts. 2021-06-27 22:02:05 +02:00
Miroslav Šedivý
d575d88daf upgrade deps. 2021-06-15 23:30:04 +02:00
Miroslav Šedivý
014b757734 webrtc connect with selected video. 2021-04-30 14:05:07 +00:00
Miroslav Šedivý
57deea25d4 golang upgrade deps. 2021-04-30 13:24:49 +00:00
Miroslav Šedivý
24af5a7c12 add more resolutions. 2021-04-28 10:58:23 +02:00
Miroslav Šedivý
ec18775e26 change error messages punctuation. 2021-04-24 21:37:43 +02:00
Miroslav Šedivý
4f1e3c879a read cookies only if enabled. 2021-04-24 21:11:07 +02:00
Miroslav Šedivý
04d2fa8863 cookie: enabled / disabled. 2021-04-24 20:53:37 +02:00
Miroslav Šedivý
9b1deb4134 dockerfile fix chown. 2021-04-19 18:03:27 +00:00
Miroslav Šedivý
2d8574d5d6 add fonts. 2021-04-19 15:39:09 +00:00
Miroslav Šedivý
45e85c8864 use exact XkbKeysymToKeycode from tigervnc. 2021-04-12 13:25:10 +00:00
Miroslav Šedivý
cb17046aee lint fix. 2021-04-11 19:06:56 +02:00
Miroslav Šedivý
cfdcafc611 xorg fix naming & KeyCode type. 2021-04-11 16:48:59 +02:00
Miroslav Šedivý
6b2b6594cd fix xorg headers file. 2021-04-11 16:42:57 +02:00
Miroslav Šedivý
7d06f33ff0 kecode to keysym respecting modifiers. 2021-04-10 01:10:14 +02:00
Miroslav Šedivý
5acfae72be Revert "workaround for "Keyboard bugs <> → >>"." 2021-04-10 01:07:19 +02:00
Miroslav Šedivý
536bab14e5 workaround for "Keyboard bugs <> → >>". 2021-04-08 00:08:21 +02:00
Miroslav Šedivý
3e5e8bfec7 xorg add noreset and nolisten tcp. 2021-04-06 20:51:08 +02:00
Miroslav Šedivý
b48998f3f9 bulk update members. 2021-04-05 23:03:49 +02:00
Miroslav Šedivý
ac04eaaa48 add devcontainer. 2021-04-05 21:13:09 +02:00
Miroslav Šedivý
55b868709d supervisord as root. 2021-04-05 21:08:08 +02:00
Miroslav Šedivý
d37933cc37 fmt edit. 2021-03-30 00:37:06 +02:00
Miroslav Šedivý
d84297fbec update pipelines config settings extractor. 2021-03-30 00:36:13 +02:00
Miroslav Šedivý
051ab9f426 always start pipelines with !. 2021-03-29 22:59:07 +02:00
Miroslav Šedivý
d8c031af4d add video config evaluation. 2021-03-29 00:58:51 +02:00
Miroslav Šedivý
78b6264494 split webrtc & WS destroy. 2021-03-25 14:08:26 +01:00
Miroslav Šedivý
a8e44160dc cursor cache log debug. 2021-03-25 12:20:30 +01:00
Miroslav Šedivý
5d00e0bdbd fix cursor index out of range error. 2021-03-25 11:59:57 +01:00
Miroslav Šedivý
bf6181764b clear cookie if non-existent session. 2021-03-25 10:29:28 +01:00
Miroslav Šedivý
da1d073846 websocket connection change. 2021-03-23 15:38:37 +01:00
Miroslav Šedivý
89081d9887 do not destroy WebRTC on WS disconnect. 2021-03-23 15:38:09 +01:00
Miroslav Šedivý
fb845a1f18 update pipelines. 2021-03-23 14:06:40 +01:00
Miroslav Šedivý
58854d38dd webrtc add interceptor. 2021-03-23 13:46:54 +01:00
Miroslav Šedivý
9fcc310685 pipelines adding buffer. 2021-03-22 16:45:17 +01:00
Miroslav Šedivý
7c9c7ec7cb video qualities: modify only FPS. 2021-03-22 16:37:37 +01:00
Miroslav Šedivý
52e586790e fix static files serving Path. 2021-03-21 21:42:53 +01:00
Miroslav Šedivý
e4d82673da fix 401 and 403 texts. 2021-03-21 21:32:52 +01:00
Miroslav Šedivý
0eef9d4d98 update auth middlewares. 2021-03-21 21:26:53 +01:00
Miroslav Šedivý
5a79212b32 add healthcheck. 2021-03-19 15:04:01 +01:00
Miroslav Šedivý
cd15e0b03e ice server omitempty credentials. 2021-03-19 11:28:06 +01:00
Miroslav Šedivý
2a0d9da5ac update packages. 2021-03-18 21:08:55 +01:00
Miroslav Šedivý
79af4409b5 viper ConfigFileUsed instead of env. 2021-03-18 19:50:37 +01:00
Miroslav Šedivý
27b1ca54c0 add config file checking. 2021-03-18 19:47:28 +01:00
Miroslav Šedivý
916222b6df use config file from the environment variable. 2021-03-18 19:37:37 +01:00
Miroslav Šedivý
77e31bb1bc fmt. 2021-03-18 13:38:32 +01:00
Miroslav Šedivý
aefb367505 fix initial image error & add cache max. 2021-03-18 13:38:27 +01:00
Miroslav Šedivý
9c6c107ee0 move broadcast constants to config. 2021-03-18 13:17:10 +01:00
Miroslav Šedivý
552223d031 iceservers with auth. 2021-03-17 15:47:49 +01:00
Miroslav Šedivý
4abe0a5dba move cookies to session + config. 2021-03-17 14:09:10 +01:00
Miroslav Šedivý
d06a5a2ac7 typo fix. 2021-03-17 11:19:35 +01:00
Miroslav Šedivý
c91e500f00 fix dummy member provider. 2021-03-16 15:38:51 +01:00
Miroslav Šedivý
0233daf125 members: direct providers config. 2021-03-16 15:28:40 +01:00
Miroslav Šedivý
524d895db8 scope config variables. 2021-03-16 15:24:58 +01:00
Miroslav Šedivý
a74bf9986b supervisord kill neko with SIGINT. 2021-03-16 14:08:38 +01:00
Miroslav Šedivý
0b4c6f50aa remove leftover code. 2021-03-16 13:57:43 +01:00
Miroslav Šedivý
a9aa62f062 lint & logging fixes. 2021-03-16 10:53:03 +01:00
Miroslav Šedivý
58d029f455 WS upgrade no returning error. 2021-03-16 10:45:22 +01:00
Miroslav Šedivý
971e3bff4e handler: log unknown event. 2021-03-16 10:25:13 +01:00
Miroslav Šedivý
3b0c16b308 handler: include event in error. 2021-03-16 10:22:03 +01:00
Miroslav Šedivý
0270939ee2 version 1.3.0. 2021-03-16 10:16:57 +01:00
Miroslav Šedivý
c8328a56c0 Revert "ICE servers as URIs with auth." 2021-03-15 17:15:58 +01:00
Miroslav Šedivý
fd07597262 Revert "webrtc use ICEServers." 2021-03-15 17:15:34 +01:00
Miroslav Šedivý
3c3f50af68 webrtc use ICEServers. 2021-03-15 16:40:03 +01:00
Miroslav Šedivý
a1be9002f7 ICE servers as URIs with auth. 2021-03-15 16:34:13 +01:00
Miroslav Šedivý
0824c24bf6 add more privileges to API user. 2021-03-15 16:28:38 +01:00
Miroslav Šedivý
45c9d0c120 add API TOKEN to sessions. 2021-03-15 13:34:14 +01:00
Miroslav Šedivý
edfe9adde0 change authorization methods request priorities. 2021-03-15 13:01:35 +01:00
Miroslav Šedivý
900ae006b8 fmt. 2021-03-14 20:26:58 +01:00
Miroslav Šedivý
85bb26d77c member session mutexes & login if not connected. 2021-03-14 20:26:30 +01:00
Miroslav Šedivý
524c76ae3c member manager login & logout. 2021-03-14 19:59:34 +01:00
Miroslav Šedivý
304cb5d655 add CanLogin check for Authenticate. 2021-03-14 19:58:15 +01:00
Miroslav Šedivý
9483882c89 member mutex move to manager. 2021-03-14 19:36:30 +01:00
Miroslav Šedivý
4207775fb3 split member manager and provider. 2021-03-14 16:58:18 +01:00
Miroslav Šedivý
19e732f3ea fix typo. 2021-03-14 16:23:14 +01:00
Miroslav Šedivý
fad3ab0062 MemberData split ID and profile, return on create. 2021-03-14 16:19:23 +01:00
Miroslav Šedivý
4d2fb157f9 API implement members. 2021-03-14 14:44:32 +01:00
Miroslav Šedivý
4898cecd56 members minor bugfixes. 2021-03-14 14:44:03 +01:00
Miroslav Šedivý
8f277c61c9 members object provider default from config. 2021-03-14 13:11:26 +01:00
Miroslav Šedivý
00586baffc member providers extracted config. 2021-03-14 13:07:03 +01:00
Miroslav Šedivý
fceae3818b default object members provider. 2021-03-14 13:06:48 +01:00
Miroslav Šedivý
f57332ba2a dummy allow all logins. 2021-03-14 13:06:33 +01:00
Miroslav Šedivý
bf560d5289 implemented member manager. 2021-03-14 12:57:19 +01:00
Miroslav Šedivý
7c79b48750 added member provider. 2021-03-14 01:08:50 +01:00
Miroslav Šedivý
594404824f fmt. 2021-03-14 01:05:00 +01:00
Miroslav Šedivý
ecad2124fd session state decoupled. 2021-03-14 00:50:08 +01:00
Miroslav Šedivý
4a28307c1e session profile decoupled. 2021-03-14 00:45:51 +01:00
Miroslav Šedivý
7d4f7694b9 login username password. 2021-03-14 00:32:52 +01:00
Miroslav Šedivý
5101f0a9c3 fix logs. 2021-03-14 00:12:32 +01:00
Miroslav Šedivý
fb2078e1ff member -> session. 2021-03-14 00:05:31 +01:00
Miroslav Šedivý
fa687480a9 member events -> session events. 2021-03-13 23:48:07 +01:00
Miroslav Šedivý
dafebc79e5 memberState -> sessionState. 2021-03-13 23:42:16 +01:00
Miroslav Šedivý
b03a730c84 memberId to sessionId. 2021-03-13 23:32:10 +01:00
Miroslav Šedivý
d83e04e7ec fix logs, unified session_id. 2021-03-13 23:27:28 +01:00
Miroslav Šedivý
cacdd9e20a Revert 'autogenerate token.' 2021-03-13 22:54:34 +01:00
Miroslav Šedivý
3fcca6ab52 OnHostChanged event and add tokens to session. 2021-03-13 22:17:49 +01:00
Miroslav Šedivý
453a6905f7 fmt auth. 2021-03-13 21:44:38 +01:00
Miroslav Šedivý
93ac4e8332 autogenerate token. 2021-03-13 21:43:36 +01:00
Miroslav Šedivý
a6b66e4d55 OnHostChanged event. 2021-03-13 21:37:00 +01:00
Miroslav Šedivý
3aea0c7bf5 remove members from session. 2021-03-13 21:11:48 +01:00
Miroslav Šedivý
84f0b0aaeb move session database to member folder. 2021-03-13 21:07:51 +01:00
Miroslav Šedivý
58b00525cc refactor authenticate to use Token. 2021-03-13 20:42:56 +01:00
Miroslav Šedivý
6b638db825 capture use display from ENV. 2021-03-11 17:55:13 +01:00
Miroslav Šedivý
d24cea3535 desktop display from env. 2021-03-11 17:44:49 +01:00
Miroslav Šedivý
0ac2109275 add ip_retrieval_url. 2021-03-10 13:15:18 +01:00
Miroslav Šedivý
f6114cd410 pipelines: modify default bitrate ratio. 2021-03-03 22:30:45 +01:00
Miroslav Šedivý
13ffc59209 broadcast pipeline update. 2021-03-03 19:13:53 +01:00
Miroslav Šedivý
e98237a58c vp8 set CBR and undershoot values. 2021-03-03 19:10:48 +01:00
Miroslav Šedivý
b78132e6aa WebRTC: add rtp consumer. 2021-03-03 18:53:35 +01:00
Miroslav Šedivý
9dc96036ce fmt sessionCtx. 2021-03-03 18:46:08 +01:00
Miroslav Šedivý
0aa1237df9 change pingPeriod to 10s. 2021-03-03 18:35:58 +01:00
Miroslav Šedivý
fa16b28ac0 set secure cookies by default. 2021-03-01 18:52:05 +01:00
Miroslav Šedivý
c6a183f766 set AllowCredentials to true. 2021-03-01 18:20:17 +01:00
Miroslav Šedivý
8f9ad2cd9b capture stream remove listeners on shutdown. 2021-02-28 18:56:04 +01:00
Miroslav Šedivý
2204400282 cursor cache disable if not available. 2021-02-28 18:52:37 +01:00
Miroslav Šedivý
663270b0f5 cursor position bypass desktop module. 2021-02-28 18:50:32 +01:00
Miroslav Šedivý
66618b9e62 WebRTC cursor handler extracted + cache. 2021-02-28 18:37:35 +01:00
Miroslav Šedivý
9d60468aea xevent DRY, expose emitter. 2021-02-28 17:22:55 +01:00
Miroslav Šedivý
09625ecca5 session refactor state. 2021-02-26 15:04:50 +01:00
Miroslav Šedivý
93f8d7f05e adding WebRTC timeouts. 2021-02-25 17:16:37 +01:00
Miroslav Šedivý
e9840a9579 fmt edit. 2021-02-25 17:16:01 +01:00
Miroslav Šedivý
2410295ad4 cursor CreatePNGImage in event emitter. 2021-02-25 14:24:17 +01:00
Miroslav Šedivý
d2eda6f25f cursor utils changed to generic CreatePNGImage. 2021-02-25 14:15:18 +01:00
Miroslav Šedivý
8f142e4b91 GetCursorImage returns image structure. 2021-02-25 14:03:57 +01:00
Miroslav Šedivý
dc29f71b0c keysym as uint32. 2021-02-23 21:25:55 +01:00
Miroslav Šedivý
8f2639412d format code. 2021-02-21 00:41:04 +01:00
Miroslav Šedivý
0581ce385c clean up repository. 2021-02-21 00:40:52 +01:00
Miroslav Šedivý
7bc9e669db golang upgrade to 1.16. 2021-02-20 13:49:06 +01:00
Miroslav Šedivý
7df1040439 remove not needed log message. 2021-02-18 16:59:36 +01:00
Miroslav Šedivý
c862711e6a update KeyboardModifiers WebSocket struct. 2021-02-18 16:52:49 +01:00
Miroslav Šedivý
ab34f4a53f WebRTC cursor: set initial state. 2021-02-17 21:55:21 +01:00
Miroslav Šedivý
5310acfbf0 implement xorg GetCursorPosition. 2021-02-17 21:55:11 +01:00
Miroslav Šedivý
2ac3f9876f audio start / stop in WebRTC. 2021-02-14 18:16:24 +01:00
Miroslav Šedivý
cd18a22655 WebRTC events only for active peer connection. 2021-02-14 17:17:06 +01:00
Miroslav Šedivý
2b693f4e52 fix naming convention. 2021-02-14 17:11:21 +01:00
Miroslav Šedivý
45679f1b86 format Go source code. 2021-02-14 14:40:17 +01:00
Miroslav Šedivý
732764991b fix linter errors. 2021-02-14 14:23:33 +01:00
Miroslav Šedivý
c9b2c93fb8 cursor image/position from WebRTC. 2021-02-13 18:25:40 +01:00
Miroslav Šedivý
061fbe60cf switch WebRTC to BigEndian. 2021-02-13 00:01:56 +01:00
Miroslav Šedivý
ed9f0276c7 fix WebRTC send: remove structures with dynamic size. 2021-02-12 23:46:57 +01:00
Miroslav Šedivý
8a3b3f14cb WebRTC channel from server. 2021-02-12 23:45:16 +01:00
Miroslav Šedivý
90aa2ce51a cursor utils: split to URI and bytes. 2021-02-12 23:43:52 +01:00
Miroslav Šedivý
af3a28274d add customized WebRTC send functions. 2021-02-12 22:13:55 +01:00
Miroslav Šedivý
c54703d7d7 destroy WS and WebRTC peers before assigning. 2021-02-12 21:48:47 +01:00
Miroslav Šedivý
c8200e3bb7 add WebRTC send function. 2021-02-12 21:06:42 +01:00
Miroslav Šedivý
f22922191a broadcast cursor position via WebSockets. 2021-02-11 18:36:27 +01:00
Miroslav Šedivý
e8286dec96 xorg: filter out all irrelevant screen rates. 2021-02-10 18:56:20 +01:00
Miroslav Šedivý
c0c14b3ac2 add screen-size aware pipelines. 2021-02-09 20:36:22 +01:00
Miroslav Šedivý
bac69a205f update qualities pipelines with fps. 2021-02-08 22:21:21 +01:00
Miroslav Šedivý
2733d88d9f edit xorg modelines. 2021-02-08 22:21:01 +01:00
Miroslav Šedivý
626164df89 SignalVideo reply. 2021-02-07 17:29:40 +01:00
Miroslav Šedivý
dd2ca03955 choose video with CreatePeer. 2021-02-07 17:07:55 +01:00
Miroslav Šedivý
5cdb6e074e send video IDs with signal provide. 2021-02-07 16:52:30 +01:00
Miroslav Šedivý
1838a74213 switch to VP8 with multiple qualities. 2021-02-06 18:18:49 +01:00
Miroslav Šedivý
eb88c8dc62 independent tracks for users & stream switching. 2021-02-06 18:16:24 +01:00
Miroslav Šedivý
417a3d1692 stream listeners as pointers. 2021-02-06 17:05:25 +01:00
Miroslav Šedivý
5d66dcdb7b unsubscribe listeners on shutdown. 2021-02-06 12:59:57 +01:00
Miroslav Šedivý
f05889bd56 Capture stream: Add- and RemoveListener. 2021-02-06 12:52:02 +01:00
Miroslav Šedivý
6756114e30 replace video track on demand. 2021-02-05 20:35:30 +01:00
Miroslav Šedivý
c81bca9b2f session GetWebRTCPeer. 2021-02-05 18:14:45 +01:00
Miroslav Šedivý
761f6d8a8f add Video error return. 2021-02-05 18:07:58 +01:00
Miroslav Šedivý
f62d36ac4f WebRTC SetVideoID. 2021-02-05 17:57:33 +01:00
Miroslav Šedivý
aa7a131da2 refactor single video track to an array. 2021-02-05 17:40:29 +01:00
Miroslav Šedivý
ebd7e7c065 move gst pipelines to codec. 2021-02-05 15:10:41 +01:00
Miroslav Šedivý
36b7eca43c name confusion Enabled -> Started. 2021-02-05 14:03:53 +01:00
Miroslav Šedivý
18b6fa0a03 remove config from capture managers. 2021-02-05 13:58:02 +01:00
Miroslav Šedivý
3515c67045 capture add mutexes. 2021-02-05 12:49:02 +01:00
Miroslav Šedivý
2b72f43c9e do not start pipeline when error. 2021-02-05 12:41:02 +01:00
Miroslav Šedivý
58ea3665b0 unify capture shutdown. 2021-02-05 12:18:46 +01:00
Miroslav Šedivý
7902d7b1f1 Implement Audio & Video using custom StreamManager. 2021-02-04 20:39:48 +00:00
Miroslav Šedivý
b488f01b16 vp9enc add properties from vp8enc. 2021-02-04 13:52:32 +01:00
Miroslav Šedivý
7e7a0c0617 tune gst pipelines. 2021-02-03 21:04:48 +01:00
Miroslav Šedivý
c2553b150c ICETrickle in config. 2021-02-02 21:12:11 +01:00
Miroslav Šedivý
cae8201908 add Trickle ICE support. 2021-02-02 20:43:33 +01:00
Miroslav Šedivý
dd4c67a6c4 registerTracks check for err. 2021-02-02 19:36:11 +01:00
Miroslav Šedivý
ace7b254a3 split webrtc ConnectPeer function. 2021-02-02 19:21:48 +01:00
Miroslav Šedivý
91f1727723 lint remove whitespaces. 2021-02-02 18:28:32 +01:00
Miroslav Šedivý
e152ee295b lint fix. 2021-02-02 18:21:07 +01:00
Miroslav Šedivý
d880e4384f RTPCodec as functions. 2021-02-02 16:58:17 +01:00
Miroslav Šedivý
45cf44835c webrtc improved logging & close on disconnect or fail. 2021-02-02 16:21:20 +01:00
Miroslav Šedivý
5a1fbadcd5 bump chi version. 2021-02-02 12:30:44 +01:00
Miroslav Šedivý
6d595e8572 refactor to v3 + custom codec handler. 2021-02-01 23:50:18 +01:00
Miroslav Šedivý
4e79c487e5 bump pion v3 compatible. 2021-02-01 22:45:44 +01:00
Miroslav Šedivý
9f416b6de1 install pion v3. 2021-02-01 22:44:55 +01:00
Miroslav Šedivý
7c305b5a27 clipboard lint fix. 2021-02-01 18:29:39 +01:00
Miroslav Šedivý
b420841f9d no clipboard content bug. 2021-02-01 12:23:37 +01:00
Miroslav Šedivý
b9df65c216 xevent dialog window based on name. 2021-01-31 15:01:46 +01:00
Miroslav Šedivý
52670b9415 modules share internal config type. 2021-01-31 12:58:15 +01:00
Miroslav Šedivý
5134ff5c7e docker build args. 2021-01-31 00:01:43 +01:00
Miroslav Šedivý
371cfa496c modules decouple and conditional build. 2021-01-30 23:55:50 +01:00
Miroslav Šedivý
28f3397723 logout correct cookie path. 2021-01-29 23:07:43 +01:00
Miroslav Šedivý
dabda571d4 session response 200 on login & logout. 2021-01-29 23:03:35 +01:00
Miroslav Šedivý
57ed35552f websocket in api scope. 2021-01-29 23:02:29 +01:00
Miroslav Šedivý
6d59b3feff session handler with cookies. 2021-01-29 22:22:14 +01:00
Miroslav Šedivý
546cd608c3 join plain text and rich text to one struct. 2021-01-29 20:05:13 +01:00
Miroslav Šedivý
5c9a57ee91 xclip minor changes + image. 2021-01-29 00:03:22 +01:00
Miroslav Šedivý
1e479dc03f backward compatibility. 2021-01-28 23:59:51 +01:00
Miroslav Šedivý
2d11b4fa56 xclip multiple clipboard content types. 2021-01-28 22:51:55 +01:00
Miroslav Šedivý
4602f5f6cf xclip verbose error output. 2021-01-28 21:19:31 +01:00
Miroslav Šedivý
11e74459ac replace libclipboard with xclip. 2021-01-28 21:12:35 +01:00
Miroslav Šedivý
ced0a89bbe send: body any type. 2021-01-28 17:11:23 +01:00
Miroslav Šedivý
8e13a60677 send unicast & broadcast. 2021-01-28 15:56:50 +01:00
Miroslav Šedivý
c27658d54c HandleFileChooserDialog: fix auocomplete bug. 2021-01-25 20:23:40 +01:00
Miroslav Šedivý
7cbee94a80 multipart form lint fixes. 2021-01-25 17:45:52 +01:00
Miroslav Šedivý
794728f4a8 add nolint. 2021-01-25 17:36:43 +01:00
Miroslav Šedivý
0ead4bc8fd reset keys before drop. 2021-01-25 17:33:29 +01:00
Miroslav Šedivý
51d061e9aa minor lint fixes. 2021-01-25 17:31:24 +01:00
Miroslav Šedivý
47689d5372 cors fix typo, default config value. 2021-01-23 20:08:30 +01:00
Miroslav Šedivý
789d812b3d go upgrade deps. 2021-01-23 18:23:02 +01:00
Miroslav Šedivý
d30d6deb79 add CORS. 2021-01-23 18:18:14 +01:00
Miroslav Šedivý
79d67c4a09 screencast atomic expired. 2021-01-23 16:29:47 +01:00
Miroslav Šedivý
1ffbe337d4 shot.jpg. 2021-01-23 15:23:10 +01:00
Miroslav Šedivý
fdd98377b3 lazy screencast. 2021-01-23 15:17:52 +01:00
Miroslav Šedivý
75393905e8 screencast quality and framerate. 2021-01-22 18:44:27 +01:00
Miroslav Šedivý
3161870906 add screencast to capture. 2021-01-22 18:13:32 +01:00
Miroslav Šedivý
407853eeb1 decouple BroadcastManager from CaptureManager. 2021-01-22 14:09:47 +01:00
Miroslav Šedivý
afd3dd2f56 generate screenshot using Xlib. 2021-01-21 20:44:09 +01:00
Miroslav Šedivý
7ff6ada205 filechooserdialog refactor desktop. 2021-01-20 23:51:53 +01:00
Miroslav Šedivý
64dd31844b filechooser websocket handler. 2021-01-20 23:48:50 +01:00
Miroslav Šedivý
dbbbc85c18 xevent file-chooser-dialog-opened onConfigure. 2021-01-20 23:47:49 +01:00
Miroslav Šedivý
1559c6c3bd filechooser -> filechooserdialog. 2021-01-20 19:45:47 +01:00
Miroslav Šedivý
d4e0287eb5 file chooser dialog events implementation. 2021-01-19 21:01:31 +01:00
Miroslav Šedivý
22d31e871c file chooser (WIP). 2021-01-18 22:01:11 +01:00
Miroslav Šedivý
b49ed65a5c add xorg PutWindowBelow. 2021-01-18 21:43:44 +01:00
Miroslav Šedivý
54760551f7 add OnWindowConfigured. 2021-01-18 21:40:57 +01:00
Miroslav Šedivý
bd062d3949 lint fix. 2021-01-18 15:31:00 +01:00
Miroslav Šedivý
8f60041b2d fix dialog close and add API. 2021-01-18 10:34:33 +01:00
Miroslav Šedivý
2b3bb6e21a upload dialog API. 2021-01-17 23:50:03 +01:00
Miroslav Šedivý
98dc08cba9 Dockerfile updated. 2021-01-17 20:47:34 +01:00
Miroslav Šedivý
46c05aa49f allow debug mode from ENV or config. 2021-01-17 19:10:59 +01:00
Miroslav Šedivý
ac7200c630 simplify xorg condition. 2021-01-17 19:10:49 +01:00
Miroslav Šedivý
80550350a8 DROP_MOVE_REPEAT. 2021-01-15 18:00:04 +01:00
Miroslav Šedivý
3bbe3781c8 set screen size using struct. 2021-01-15 17:30:19 +01:00
Miroslav Šedivý
0e09609c67 KeyboardLayout to KeyboardMap. 2021-01-15 16:53:03 +01:00
Miroslav Šedivý
8c47cbae68 multipart form correct destroying. 2021-01-14 19:54:22 +01:00
Miroslav Šedivý
a96b770052 gtk drop refactored using events. 2021-01-14 19:53:58 +01:00
Miroslav Šedivý
253247f6ce gkt drag and drop remove duplicity. 2021-01-14 16:42:33 +01:00
Miroslav Šedivý
c808759709 gst free error only if occurs. 2021-01-14 14:15:17 +01:00
Miroslav Šedivý
0f27b81f76 drag_window add logging. 2021-01-13 22:46:44 +01:00
Miroslav Šedivý
98bf62ef5e neko start default without debug. 2021-01-13 21:36:59 +01:00
Miroslav Šedivý
39d48c3db8 ignore duplicated packet log messages. 2021-01-13 21:36:43 +01:00
Miroslav Šedivý
71dbdc06f5 add layout variant. 2021-01-12 23:52:44 +01:00
Miroslav Šedivý
7f18c5842d changing keyboard layout as go exec. 2021-01-12 23:48:15 +01:00
Miroslav Šedivý
4844225a0b keyboardModifiersGet. 2021-01-12 23:35:46 +01:00
Miroslav Šedivý
8a9dceafec xorg modifiers fix mask. 2021-01-12 23:35:11 +01:00
Miroslav Šedivý
a0d8f1b880 xorg modifiers refactor. 2021-01-12 22:54:13 +01:00
Miroslav Šedivý
d89dd11b18 add icon theme cursors. 2021-01-12 16:37:44 +01:00
Miroslav Šedivý
c75191edeb capture: hide pointer. 2021-01-12 16:25:14 +01:00
Miroslav Šedivý
dbc8a7612d gst pipeline app sink refactoring. 2021-01-12 16:24:54 +01:00
Miroslav Šedivý
3faca29a89 remove codec name from pipeline. 2021-01-12 16:13:59 +01:00
Miroslav Šedivý
425d9c2ace fix broken pipeline. 2021-01-12 16:12:53 +01:00
Miroslav Šedivý
f32ebe7935 catch gstreamer errors. 2021-01-12 16:12:05 +01:00
Miroslav Šedivý
49c3b6d4fe xevent: OnWindowCreated. 2021-01-12 00:09:43 +01:00
Miroslav Šedivý
94a9c7c10a tidy up C files. 2021-01-11 15:57:14 +01:00
Miroslav Šedivý
a2ca3727fe xevent to update clipboard. 2021-01-11 15:30:53 +01:00
Miroslav Šedivý
910f0af995 xevent cursor change. 2021-01-10 15:58:17 +01:00
Miroslav Šedivý
0f19b6ed57 add xevent c bindings. 2021-01-10 15:55:29 +01:00
Miroslav Šedivý
a7d4511037 cursor Image on connect. 2021-01-10 12:42:07 +01:00
Miroslav Šedivý
589628f6ca cursor image as WS event. 2021-01-10 12:37:32 +01:00
Miroslav Šedivý
9782b8391d cursor updates to client (WIP). 2021-01-09 23:01:39 +01:00
Miroslav Šedivý
9112d99c54 add cursor image to uri convertor. 2021-01-09 23:01:18 +01:00
Miroslav Šedivý
93b1553b4d xlib get cursor implementation. 2021-01-09 22:58:18 +01:00
Miroslav Šedivý
ab1d18b562 zero sized gtk window. 2021-01-09 16:40:24 +01:00
Miroslav Šedivý
44c8f8f62e gtk window transparent. 2021-01-09 16:33:41 +01:00
Miroslav Šedivý
9f3bc0261c update upload API error reporting & cleanup. 2021-01-09 16:24:05 +01:00
Miroslav Šedivý
fad6b649d3 upload, implicit hosting, only members that can control. 2021-01-09 13:42:08 +01:00
Miroslav Šedivý
d65ba62bfc upload middleware: fix permissions issue. 2021-01-08 23:42:53 +01:00
Miroslav Šedivý
fc6997d2ac lint fix. 2021-01-08 22:41:37 +01:00
Miroslav Šedivý
a6afccd079 desktop single mutex shared gtk. 2021-01-08 22:03:50 +01:00
Miroslav Šedivý
d3340ad085 upload drop change API. 2021-01-07 18:28:23 +01:00
Miroslav Šedivý
3f9fffe96d desktop drop -> gtk. 2021-01-07 18:27:50 +01:00
Miroslav Šedivý
39208f1ea5 drop: chrome weird behavior, multiple cursor moves. 2021-01-06 20:16:21 +01:00
Miroslav Šedivý
3e52b264ba API drop file upload. 2021-01-06 20:03:41 +01:00
Miroslav Šedivý
a104fc0525 change formatting. 2021-01-06 18:58:16 +01:00
Miroslav Šedivý
62ba53dc46 implement file drop API. 2021-01-06 18:57:50 +01:00
Miroslav Šedivý
64187964d4 uris -> files. 2021-01-06 18:54:55 +01:00
Miroslav Šedivý
a92ead019e add drop bindings. 2021-01-06 18:27:21 +01:00
Miroslav Šedivý
4aa7da45e1 screen change mutex, fixes "HTTP requests are not buffered - screen changing is failing". 2021-01-04 19:39:21 +01:00
Miroslav Šedivý
245c3d9635 add CanHostOnly. 2020-12-29 22:00:28 +01:00
Miroslav Šedivý
655d64105e HttpJsonRequest user friendly message. 2020-12-27 21:07:09 +01:00
Miroslav Šedivý
da71c9261d API: Target member was not found, return 404. 2020-12-27 17:07:09 +01:00
Miroslav Šedivý
a6dccc753b API update: control give memberId. 2020-12-26 23:53:04 +01:00
Miroslav Šedivý
7c8f0e66cb remove chromedp. 2020-12-18 16:38:33 +01:00
Miroslav Šedivý
1faabe6397 go mod tidy. 2020-12-14 23:36:01 +01:00
Miroslav Šedivý
15d8673088 add experimental chromedp lib. 2020-12-13 23:26:00 +01:00
Miroslav Šedivý
b197bb303e add support for modules. 2020-12-12 18:37:19 +01:00
Miroslav Šedivý
5b69413e01 AddHandler in WebSockets. 2020-12-12 17:40:10 +01:00
Miroslav Šedivý
af463b1015 AddRouter in API. 2020-12-12 17:07:45 +01:00
Miroslav Šedivý
9786c8d537 join members endpoints to one file. 2020-12-08 16:05:54 +01:00
Miroslav Šedivý
f1f26b5f25 MemberDataPayload & membersList implemented. 2020-12-08 16:04:54 +01:00
Miroslav Šedivý
7fb40c0384 + GetProfile & GetState members. 2020-12-08 15:37:48 +01:00
Miroslav Šedivý
209971cb8a member profile & state to types. 2020-12-08 15:14:20 +01:00
Miroslav Šedivý
58c8104ce6 remove unused logger from room api handler. 2020-12-08 14:31:15 +01:00
Miroslav Šedivý
4b4ddcfe15 use json marshal default values. 2020-12-08 14:13:12 +01:00
Miroslav Šedivý
303c22bba5 profileChanged tested, minor bugs fixed. 2020-12-06 21:34:23 +01:00
Miroslav Šedivý
9ca4e04e0b pointer struct to members crud. 2020-12-06 21:10:45 +01:00
Miroslav Šedivý
2467c94c59 add profileChanged. 2020-12-06 19:29:39 +01:00
Miroslav Šedivý
a2da60d617 add default access control on users. 2020-12-06 19:19:57 +01:00
Miroslav Šedivý
c714d17d87 is_receiving - is_watching. 2020-12-06 19:02:33 +01:00
Miroslav Šedivý
e17e2cb606 + CanAccessClipboard. 2020-12-06 18:55:24 +01:00
Miroslav Šedivý
5edd9dc97a + CanHost. 2020-12-06 18:50:41 +01:00
Miroslav Šedivý
92aa717a8d user - member. 2020-12-06 18:50:04 +01:00
Miroslav Šedivý
4fe74fd112 + CanWatch. 2020-12-06 18:49:20 +01:00
Miroslav Šedivý
d2ffac3d4b + CanConnect. 2020-12-06 18:49:08 +01:00
Miroslav Šedivý
0a201d50c8 + CanLogin. 2020-12-06 18:48:50 +01:00
Miroslav Šedivý
35cd0f5270 add connect / disconnect to adapters. 2020-12-06 18:11:11 +01:00
Miroslav Šedivý
6ca1e27f01 add file adapter. 2020-12-06 17:28:15 +01:00
Miroslav Šedivý
100544198b add members database adapters interface. 2020-12-06 00:21:09 +01:00
Miroslav Šedivý
edb9fef097 remove unused HasHost. 2020-12-05 23:42:40 +01:00
Miroslav Šedivý
b24c217509 members database import. 2020-12-05 23:31:41 +01:00
Miroslav Šedivý
9f452aeb01 add database to Sessions. 2020-12-05 23:05:46 +01:00
Miroslav Šedivý
a6fbafc079 SetProfile changed as Update. 2020-12-05 22:18:45 +01:00
Miroslav Šedivý
22407825fe destroy only if is WebRTC active. 2020-12-05 21:05:09 +01:00
Miroslav Šedivý
feb07b97ab resolve deadlock problem with mutexes. 2020-12-03 20:05:44 +01:00
Miroslav Šedivý
c61f5f2835 WebRTC + peer closed. 2020-12-03 17:03:15 +01:00
Miroslav Šedivý
4670b5187c Disconnect WebRTC on socket disconnect. 2020-12-03 16:45:41 +01:00
Miroslav Šedivý
7eee6debc7 WS remove connected & disconnected event. 2020-12-03 16:42:27 +01:00
Miroslav Šedivý
d7b5bd6842 extract member state to custom struct. 2020-12-03 16:10:52 +01:00
Miroslav Šedivý
5f3b9f72cf ID in MemberProfile. 2020-12-02 19:22:26 +01:00
Miroslav Šedivý
f361d0c681 WS added session events. 2020-12-02 18:59:54 +01:00
Miroslav Šedivý
1f5c0a3547 updated session events. 2020-12-02 18:59:32 +01:00
Miroslav Šedivý
cf47b7e2fa crud update new member profile. 2020-12-02 17:43:34 +01:00
Miroslav Šedivý
81b3fbd673 moved capture StopStream to websockets events. 2020-12-02 17:36:06 +01:00
Miroslav Šedivý
0d2f3405bb new MemberProfile & session refactor. 2020-12-02 17:29:38 +01:00
Miroslav Šedivý
220e162f42 beautify. 2020-12-02 17:23:35 +01:00
Miroslav Šedivý
82d37b15e4 HasConnectedMembers and Members returns not connected. 2020-12-02 17:12:00 +01:00
Miroslav Šedivý
5541675f57 use member id or create new. 2020-12-02 16:50:30 +01:00
Miroslav Šedivý
123fbd8317 IsAdmin + IsConnected. 2020-12-02 16:49:51 +01:00
Miroslav Šedivý
25fec63455 WS do not connect if already connected. 2020-12-02 11:45:22 +01:00
Miroslav Šedivý
1677e38935 introduced ImplicitHosting. 2020-12-02 11:24:20 +01:00
Miroslav Šedivý
26c0fea840 controlRequest if already is the host. 2020-12-02 10:47:20 +01:00
Miroslav Šedivý
b7103ca809 ResetKeys on ClearHost. 2020-12-02 10:46:00 +01:00
Miroslav Šedivý
964588b328 remove HostID. 2020-12-02 00:04:36 +01:00
Miroslav Šedivý
bdd8bdab72 members as map. 2020-12-01 22:56:08 +01:00
Miroslav Šedivý
b82fbae597 replace old Member structures. 2020-12-01 19:47:50 +01:00
Miroslav Šedivý
6599a093c0 remove MemberList structs. 2020-12-01 19:45:21 +01:00
Miroslav Šedivý
1b6bc44f2a event SystemDisconnect. 2020-12-01 19:44:23 +01:00
Miroslav Šedivý
21293256ed connected session only websocket. 2020-11-30 22:28:13 +01:00
Miroslav Šedivý
b194f8034a add MemberId to init. 2020-11-30 22:24:58 +01:00
Miroslav Šedivý
2c7291324c fix Host ID json name. 2020-11-30 21:27:43 +01:00
Miroslav Šedivý
5c0dee93ac messages highlight comments. 2020-11-30 21:06:37 +01:00
Miroslav Šedivý
caa4be4d3b remove unused MEMBER_LIST. 2020-11-30 21:06:19 +01:00
Miroslav Šedivý
d00015ee91 system init WS. 2020-11-30 20:07:19 +01:00
Miroslav Šedivý
745ef00cd2 update connected / disconnected events. 2020-11-30 19:13:17 +01:00
Miroslav Šedivý
753fb01955 removed OnCreated event. 2020-11-30 18:52:16 +01:00
Miroslav Šedivý
743ab2bf6a signal provide upon request WS. 2020-11-30 18:27:25 +01:00
Miroslav Šedivý
2e090eb54d update control WS. 2020-11-30 18:24:38 +01:00
Miroslav Šedivý
4bbf3bb039 update screen WS. 2020-11-30 17:53:05 +01:00
Miroslav Šedivý
83be51ea0f update keyboard WS. 2020-11-30 17:45:53 +01:00
Miroslav Šedivý
e93d167be6 update clipboard WS. 2020-11-30 17:40:38 +01:00
Miroslav Šedivý
2c210f3cf1 signal provide remove ID. 2020-11-30 17:33:34 +01:00
Miroslav Šedivý
0a75950356 remove admin from websockets. 2020-11-30 17:31:29 +01:00
Miroslav Šedivý
994a91886d remove broadcast from websocket. 2020-11-30 17:29:05 +01:00
Miroslav Šedivý
def6248ca7 revert broadcast status. 2020-11-30 17:27:11 +01:00
Miroslav Šedivý
8f9671689f add new messages. 2020-11-30 17:09:14 +01:00
Miroslav Šedivý
8cce32c73c edit control event as host. 2020-11-30 17:06:42 +01:00
Miroslav Šedivý
147aa0e1a3 updated websocket events with TODO comments. 2020-11-30 15:48:19 +01:00
Miroslav Šedivý
f9b62073ef add control reset. 2020-11-29 15:58:26 +01:00
Miroslav Šedivý
179a22476c do not remove user on disconnect. 2020-11-28 15:30:35 +01:00
Miroslav Šedivý
5699ad0bf9 allow login using Query. 2020-11-28 15:22:04 +01:00
Miroslav Šedivý
b675e4cc82 member name refactor. 2020-11-28 15:03:38 +01:00
Miroslav Šedivý
c4978ba376 http response name convention. 2020-11-28 15:00:21 +01:00
Miroslav Šedivý
3f312c84ad remove user kick. 2020-11-28 14:32:38 +01:00
Miroslav Šedivý
592b2cfd3a no default static serve files. 2020-11-28 11:08:15 +00:00
Miroslav Šedivý
7c3ee0bd0f add gitattributes. 2020-11-27 22:25:27 +01:00
Miroslav Šedivý
04861d0921 update runtime. 2020-11-27 22:16:26 +01:00
Miroslav Šedivý
194836918e remove build. 2020-11-27 21:51:55 +01:00
Miroslav Šedivý
1ffae72bf1 multistage Dockerfile. 2020-11-27 21:51:33 +01:00
Miroslav Šedivý
59457b7658 rest CRUD members minor update. 2020-11-27 20:00:14 +01:00
Miroslav Šedivý
a90bf87e24 login with secret. 2020-11-27 19:59:54 +01:00
Miroslav Šedivý
a330a3cc76 REST create & Delete member. 2020-11-25 22:39:54 +01:00
Miroslav Šedivý
71a84963bc fix types - no json. 2020-11-25 22:35:54 +01:00
Miroslav Šedivý
ecfce6c886 remove room lock. 2020-11-25 22:16:56 +01:00
Miroslav Šedivý
d1fccf5ab6 MemberProfile as public type & create user on auth. 2020-11-25 22:07:05 +01:00
Miroslav Šedivý
665d9d2130 Create + Delete session. 2020-11-25 22:06:13 +01:00
Miroslav Šedivý
104d98d129 comment out yet unused props. 2020-11-25 20:26:29 +01:00
Miroslav Šedivý
f9b2460c3b replace SetConnected function. 2020-11-25 20:26:11 +01:00
Miroslav Šedivý
fa54823098 Split connected to WebRTC & WebSocket. 2020-11-25 20:02:53 +01:00
Miroslav Šedivý
bc77c8f8f5 add MemberProfile to session. 2020-11-25 19:44:50 +01:00
Miroslav Šedivý
b73e2403af peer -> webrtc_peer. 2020-11-25 18:41:40 +01:00
Miroslav Šedivý
ff7efe9f3b socket -> websocket_peer. 2020-11-25 18:36:33 +01:00
Miroslav Šedivý
d49542013b CRUD add payloads. 2020-11-22 00:06:55 +01:00
Miroslav Šedivý
43781cdf52 fix crud handler. 2020-11-21 23:57:54 +01:00
Miroslav Šedivý
ce49d975c0 member in plural form. 2020-11-21 23:42:34 +01:00
Miroslav Šedivý
d39d922f85 add dummy member endpoints. 2020-11-21 23:39:24 +01:00
Miroslav Šedivý
45f029a2a4 fix broadcast bug. 2020-11-18 23:32:43 +01:00
Miroslav Šedivý
fb6dabf4e0 add control status. 2020-11-18 23:14:28 +01:00
Miroslav Šedivý
628abe06fd rest control edit. 2020-11-18 23:05:38 +01:00
Miroslav Šedivý
428d6939ec use HttpUnprocessableEntity if already broadcasting. 2020-11-18 23:05:26 +01:00
Miroslav Šedivý
ef03f9ec9d do not export REST functions. 2020-11-18 22:35:50 +01:00
Miroslav Šedivý
1ae6f05c73 update 401 & 403. 2020-11-18 22:34:42 +01:00
Miroslav Šedivý
18ca647c76 Data -> Payload & change order. 2020-11-18 21:56:42 +01:00
Miroslav Šedivý
ac2fc100b4 REST API keyboard. 2020-11-18 21:53:06 +01:00
Miroslav Šedivý
db820806a4 add broadcast endpoint & broadcast pipeline return error. 2020-11-18 21:34:39 +01:00
Miroslav Šedivý
6fbb1a2cc7 add control give & control take endpoints. 2020-11-18 21:10:40 +01:00
Miroslav Šedivý
6d27b0a69c return err socket. 2020-11-18 20:34:33 +01:00
Miroslav Šedivý
da7e6f7728 Broadcast should not return error. 2020-11-18 20:30:33 +01:00
Miroslav Šedivý
3f4914d260 REST API control. 2020-11-16 22:48:20 +01:00
Miroslav Šedivý
eec285cd07 Rename displayname to name. 2020-11-16 22:22:19 +01:00
Miroslav Šedivý
570efbf3a6 remove unused ban endpoint. 2020-11-16 22:21:21 +01:00
Miroslav Šedivý
d87a10b23a remove unused mute function. 2020-11-16 22:10:03 +01:00
Miroslav Šedivý
99068b893b naming convention -> screen size. 2020-11-16 22:04:50 +01:00
Miroslav Šedivý
227b6b24c2 REST screen change broadcast. 2020-11-16 21:57:53 +01:00
Miroslav Šedivý
e8f9e2e4e4 fix clipboard bug. 2020-11-16 21:57:35 +01:00
Miroslav Šedivý
0dab2a99d3 introduce REST API authorization. 2020-11-16 19:37:52 +01:00
Miroslav Šedivý
316533dab0 remove duplicate error logging. 2020-11-16 18:12:25 +01:00
Miroslav Šedivý
b411675108 code indentation. 2020-11-16 17:48:10 +01:00
Miroslav Šedivý
234b0a2e06 remove code duplication. 2020-11-16 16:56:03 +01:00
Miroslav Šedivý
db706097f6 add mutex on streaming and fix "Fail while changing screen size and no users are joined". 2020-11-14 23:14:48 +01:00
Miroslav Šedivý
0d419787bc add memberMu. 2020-11-14 23:05:09 +01:00
Miroslav Šedivý
f11c1c5e54 add hostMu. 2020-11-14 22:54:35 +01:00
Miroslav Šedivý
1fd53cfb74 CheckKeys() mutex on shared map. 2020-11-14 22:35:50 +01:00
Miroslav Šedivý
8a9f465d0b add log to http utils. 2020-11-14 18:27:20 +01:00
Miroslav Šedivý
4a5654f2ef fix lint err. 2020-11-14 18:27:10 +01:00
Miroslav Šedivý
7524f20cb7 http session context helper function. 2020-11-14 18:22:15 +01:00
Miroslav Šedivý
40b986c8be use Chi Router instead of Chi Mux. 2020-11-14 18:16:25 +01:00
Miroslav Šedivý
a18482b54e use websocket authentication & refactor. 2020-11-14 17:51:18 +01:00
Miroslav Šedivý
f136a31b03 minor refactor ifs. 2020-11-14 16:09:00 +01:00
Miroslav Šedivý
7c64e6068a minor session changes. 2020-11-14 16:03:39 +01:00
Miroslav Šedivý
e5eaf5c60c session id to session. 2020-11-14 16:03:12 +01:00
Miroslav Šedivý
fdf5839547 trim newlines on webrtc logs. 2020-11-14 14:52:15 +01:00
Miroslav Šedivý
d09b6dcb10 broadcast naming convention & on destroy. 2020-11-14 13:46:12 +01:00
Miroslav Šedivý
bd45e81afe fixes "Fast changing screen size crashes neko". 2020-11-13 22:22:44 +01:00
Miroslav Šedivý
9c26f35c76 destroy pipelines func. 2020-11-13 21:23:48 +01:00
Miroslav Šedivý
ff97242bac normalize logs. 2020-11-13 17:42:04 +01:00
Miroslav Šedivý
dd8867615e fix naming convention. 2020-11-13 17:34:53 +01:00
Miroslav Šedivý
e4864b095e http listening not warning. 2020-11-07 20:12:37 +01:00
Miroslav Šedivý
a6fd0f3d25 fixes "screen size change is sometimes failing". 2020-11-07 17:22:25 +01:00
Miroslav Šedivý
e4fa855f7b linter fix. 2020-11-04 00:41:04 +01:00
Miroslav Šedivý
a8173ce02f change screen size only on desktop. 2020-11-04 00:27:47 +01:00
Miroslav Šedivý
b0ae758d7b refactor xorg race condition. 2020-11-04 00:09:52 +01:00
Miroslav Šedivý
51c6e0091f Connected / Disconnected refactor. 2020-11-01 21:03:25 +01:00
Miroslav Šedivý
e51541fe01 separate disconnect from destroy. 2020-11-01 20:53:25 +01:00
Miroslav Šedivý
311ed987d8 refactor WS authentication. 2020-11-01 20:23:09 +01:00
Miroslav Šedivý
16d762b6ae GST pipelines refactor. 2020-11-01 20:18:19 +01:00
Miroslav Šedivý
c10b2212d1 auth moved from websockets to session. 2020-11-01 18:39:12 +01:00
Miroslav Šedivý
3ea979ed47 minor changes. 2020-11-01 18:12:16 +01:00
Miroslav Šedivý
c53ae28196 remove emotes structs. 2020-11-01 17:56:06 +01:00
Miroslav Šedivý
d78f98e78e make serving files as optional feature. 2020-11-01 17:40:22 +01:00
Miroslav Šedivý
7fb977faa4 edit broadcast. 2020-11-01 17:34:47 +01:00
Miroslav Šedivý
507fce7862 port new API back to refactor. 2020-11-01 16:54:06 +01:00
Miroslav Šedivý
9559edf4d4 bug fixes. 2020-11-01 16:37:00 +01:00
Miroslav Šedivý
5d906e0a8b major refactor. 2020-11-01 16:09:48 +01:00
Miroslav Šedivý
5c92b75cf7 Refactor: session remove duplicate ID in endpoints. 2020-10-31 23:53:19 +01:00
Miroslav Šedivý
e150203b54 refactor session remove redundant IDs. 2020-10-31 23:03:37 +01:00
Miroslav Šedivý
b61495ac0b remove redundant ID parameter in websockets. 2020-10-31 22:43:47 +01:00
Miroslav Šedivý
b6393c4396 API lint fix. 2020-10-31 21:58:57 +01:00
Miroslav Šedivý
5a25aefa34 webRTC WS disconnect error handling. 2020-10-31 21:56:20 +01:00
Miroslav Šedivý
cca147859d refactor WebRTC antipatterns. 2020-10-31 21:46:29 +01:00
Miroslav Šedivý
b1b5a70c64 WebRTC refactor -> session dependency removal. 2020-10-31 21:20:42 +01:00
Miroslav Šedivý
dadac4f145 webrtc removed unused function. 2020-10-31 20:11:32 +01:00
Miroslav Šedivý
06282d8064 remove unused websocket functions. 2020-10-31 19:59:17 +01:00
Miroslav Šedivý
e852afcf2a start file refactor. 2020-10-31 16:40:33 +01:00
Miroslav Šedivý
894c0f28dc REST API implement Clipboard. 2020-10-31 12:35:02 +01:00
Miroslav Šedivý
963d210507 use custom JWT middleware. 2020-10-31 12:27:55 +01:00
Miroslav Šedivý
c609a28a38 remove unused packages. 2020-10-31 11:54:58 +01:00
Miroslav Šedivý
71d39a5c74 add API JWT auth. 2020-10-31 10:48:24 +01:00
Miroslav Šedivý
31bd61e2d3 add jwtauth module. 2020-10-31 10:37:57 +01:00
Miroslav Šedivý
4e6a78fb54 update errors. 2020-10-30 22:39:35 +01:00
Miroslav Šedivý
c77d2b0305 ScreenConfigurationsList API. 2020-10-30 22:20:23 +01:00
Miroslav Šedivý
bff779aee7 add new REST errors. 2020-10-30 22:06:03 +01:00
Miroslav Šedivý
b6d5df6d04 API screen change websocket broadcast. 2020-10-30 21:29:51 +01:00
Miroslav Šedivý
9343e85b8f resolution -> screen configuration. 2020-10-30 21:28:07 +01:00
Miroslav Šedivý
d48b857dfe API resiolution with error handling. 2020-10-30 19:56:22 +01:00
Miroslav Šedivý
0c40eda36b manager fix naming convention. 2020-10-30 19:39:45 +01:00
Miroslav Šedivý
b4a233ef2e remove xorg ValidScreenSize double checking. 2020-10-30 19:32:52 +01:00
Miroslav Šedivý
dc32e64190 api manager. 2020-10-30 18:16:21 +01:00
Miroslav Šedivý
dabd7e368e add go-chi/render module. 2020-10-30 17:00:42 +01:00
Miroslav Šedivý
5acd428dee create api skeleton. 2020-10-29 22:23:30 +01:00
Miroslav Šedivý
fc3ee13f65 move logger to http package. 2020-10-29 22:12:33 +01:00
Miroslav Šedivý
3c5c01f475 remove chat. 2020-10-29 18:11:30 +01:00
Miroslav Šedivý
78c397ef54 fix formatting. 2020-10-29 18:07:04 +01:00
Miroslav Šedivý
cd769c05d3 gst - correctly destroy unused pipelines. 2020-10-29 17:51:17 +01:00
Miroslav Šedivý
96e99955fc refactor rempte manager - start pipeline only once. 2020-10-29 17:50:04 +01:00
Miroslav Šedivý
7d5df0346e add nolint. 2020-10-28 22:36:30 +01:00
Miroslav Šedivý
e1ef49c46a ws upgrade fail error message. 2020-10-28 22:28:10 +01:00
Miroslav Šedivý
4b39607af0 redundant break statement. 2020-10-28 22:24:19 +01:00
Miroslav Šedivý
7ec3d5ac6d add nolint. 2020-10-28 22:21:31 +01:00
Miroslav Šedivý
f5fcf724f4 unnecessary assignment to the blank identifier. 2020-10-28 22:09:48 +01:00
Miroslav Šedivý
91fed3c480 log socket disconnected error. 2020-10-28 22:09:02 +01:00
Miroslav Šedivý
1ce6dad973 log clipboard sync error. 2020-10-28 22:07:18 +01:00
Miroslav Šedivý
541ca80878 unknown session id return error. 2020-10-28 22:02:42 +01:00
Miroslav Šedivý
1e3abf51af remove unused package. 2020-10-28 22:02:31 +01:00
Miroslav Šedivý
95ce0063ec set host catch error. 2020-10-28 21:59:37 +01:00
Miroslav Šedivý
2b0d85a98c redundant break statement. 2020-10-28 21:54:48 +01:00
Miroslav Šedivý
f751cba428 sessions Destroy log error. 2020-10-28 21:50:47 +01:00
Miroslav Šedivý
f521373f9b should omit comparison to bool constant. 2020-10-28 21:50:19 +01:00
Miroslav Šedivý
4093bc5311 peer connection SetLocalDescription error catch. 2020-10-28 20:56:14 +01:00
Miroslav Šedivý
2f0b159ad6 SetEphemeralUDPPortRange error catch. 2020-10-28 20:54:09 +01:00
Miroslav Šedivý
7628554356 redundant break statement. 2020-10-28 20:46:34 +01:00
Miroslav Šedivý
d0d3e6b2d2 should omit comparison to bool constant. 2020-10-28 20:44:50 +01:00
Miroslav Šedivý
80430e1ef4 the channel used with signal.Notify should be buffered. 2020-10-28 20:43:26 +01:00
Miroslav Šedivý
cf54343b50 broadcastManager to neko object. 2020-10-28 20:31:04 +01:00
Miroslav Šedivý
01d125316f WebSocketHandler no return. 2020-10-28 20:29:18 +01:00
Miroslav Šedivý
26c2bbf10d remove unused HTTP middlewares. 2020-10-28 20:06:34 +01:00
Miroslav Šedivý
a5014e205e n.eko.moe -> demodesk. 2020-10-28 19:15:48 +01:00
Miroslav Šedivý
687cf987f8 fix gitignore. 2020-10-25 01:36:57 +02:00
Miroslav Šedivý
5800ea7df5 fix Dockerfile. 2020-10-22 21:07:37 +02:00
Miroslav Šedivý
0d7a24befc add Dockerfile. 2020-10-22 17:08:13 +02:00
Miroslav Šedivý
968ea7d4f2 add gitignore. 2020-10-22 17:00:32 +02:00
Miroslav Šedivý
56de805f54 initial commit - from neko open source repository.. 2020-10-22 16:54:50 +02:00
572 changed files with 117310 additions and 6718 deletions

View file

@ -1,18 +0,0 @@
#
# you can copy this file to .env.local, if you don't want to have it pushed to repository
#
# this is how will be your images called. you can change it to your fork.
# only need to do this once. here.
BUILD_IMAGE="m1k1o/neko"
# this is where your services will be acessible
CLIENT_PORT=8080
SERVER_PORT=8081
# on which image you want to test it
SERVER_TAG="chromium"
# this is needed for WebRTC. specify your local IP address and free UDP port range.
SERVER_EPR=55000-55009
SERVER_IP=10.8.0.1

View file

@ -1,40 +0,0 @@
# How to contribute to neko
If you want to contribute, but do not want to install anything on your host system, we got you covered. You only need docker. Technically, it could be done using vs code development in container, but this is more fun:).
You need to copy `.env.default` to `.env` and customize values.
## Step 1: Building server
- `./build` - You can use this command to build your specified `SERVER_TAG` along with base image.
If you want, you can build other tags. `base` tag needs to be build first:
- `./build base`
- `./build firefox`
- `./build chromium`
- `./build google-chrome`
- etc...
## Step 2: Starting server
- `./start-server` - Starting server image you specified in `.env`.
- `./start-server -r` - Shortcut for rebuilding server binary and then starting.
If you are changing something in the server code, you do not want to rebuild container each time. You can just rebuild your binary:
- `./rebuild-server` - Rebuild only server binary.
- `./rebuild-server -f` - Force to rebuild whole Golang environment (you should do this only of you change some dependencies).
## Step 3: Serving client
- `./serve-client` - Serving vue.js client.
- `./serve-client -i` - Install all dependencies.
## Debug
You can navigate to `CLIENT_PORT` and see live client there. It will be connected to your local server on `SERVER_PORT`.
If you are leaving client as is and not changing it, you don't need to start `./serve-client` and you can access server's GUI directly on `SERVER_PORT`.
Feel free to open new PR.

View file

@ -1,137 +0,0 @@
#
# STAGE 1: SERVER
#
FROM golang:1.20-bullseye as server
WORKDIR /src
#
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends git cmake make libx11-dev libxrandr-dev libxtst-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly; \
#
# install libclipboard
set -eux; \
cd /tmp; \
git clone --depth=1 https://github.com/jtanx/libclipboard; \
cd libclipboard; \
cmake .; \
make -j4; \
make install; \
rm -rf /tmp/libclipboard; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# build server
COPY server/ .
RUN go get -v -t -d . && go build -o bin/neko cmd/neko/main.go
#
# STAGE 2: CLIENT
#
FROM node:18-bullseye-slim as client
WORKDIR /src
#
# install dependencies
COPY client/package*.json ./
RUN npm install
#
# build client
COPY client/ .
RUN npm run build
#
# STAGE 3: RUNTIME
#
FROM debian:bullseye-slim
#
# avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
#
# set custom user
ARG USERNAME=neko
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN set -eux; \
apt-get update; \
#
# install dependencies
apt-get install -y --no-install-recommends wget ca-certificates supervisor; \
apt-get install -y --no-install-recommends pulseaudio dbus-x11 xserver-xorg-video-dummy; \
apt-get install -y --no-install-recommends libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx6; \
#
# gst
apt-get install -y --no-install-recommends libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio; \
#
# install fonts
apt-get install -y --no-install-recommends \
# Google emojis
fonts-noto-color-emoji \
# Japanese fonts
fonts-takao-mincho \
# Chinese fonts
fonts-wqy-zenhei xfonts-intl-chinese xfonts-wqy \
# Korean fonts
fonts-wqy-microhei; \
#
# create a non-root user
groupadd --gid $USER_GID $USERNAME; \
useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
adduser $USERNAME audio; \
adduser $USERNAME video; \
adduser $USERNAME pulse; \
#
# setup pulseaudio
mkdir -p /home/$USERNAME/.config/pulse/; \
echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
#
# workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
mkdir /tmp/.X11-unix; \
chmod 1777 /tmp/.X11-unix; \
chown $USERNAME /tmp/.X11-unix/; \
#
# make directories for neko
mkdir -p /etc/neko /var/www /var/log/neko; \
chmod 1777 /var/log/neko; \
chown $USERNAME /var/log/neko/; \
chown -R $USERNAME:$USERNAME /home/$USERNAME; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy config files
COPY .docker/base/dbus /usr/bin/dbus
COPY .docker/base/default.pa /etc/pulse/default.pa
COPY .docker/base/supervisord.conf /etc/neko/supervisord.conf
COPY .docker/base/xorg.conf /etc/neko/xorg.conf
#
# set default envs
ENV USER=$USERNAME
ENV DISPLAY=:99.0
ENV NEKO_PASSWORD=neko
ENV NEKO_PASSWORD_ADMIN=admin
ENV NEKO_BIND=:8080
#
# copy static files from previous stages
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=client /src/dist/ /var/www
HEALTHCHECK --interval=10s --timeout=5s --retries=8 \
CMD wget -O - http://localhost:${NEKO_BIND#*:}/health || exit 1
#
# run neko
CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]

View file

@ -1,143 +0,0 @@
#
# STAGE 1: SERVER
#
FROM golang:1.20-bullseye as server
WORKDIR /src
#
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends git cmake make python2 libx11-dev libxrandr-dev libxtst-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-omx; \
#
# install libclipboard
set -eux; \
cd /tmp; \
git clone --depth=1 https://github.com/jtanx/libclipboard; \
cd libclipboard; \
cmake .; \
make -j4; \
make install; \
rm -rf /tmp/libclipboard; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# build server
COPY server/ .
RUN go get -v -t -d . && go build -o bin/neko cmd/neko/main.go
#
# STAGE 2: CLIENT
#
FROM node:18-bullseye-slim as client
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends python2 build-essential
WORKDIR /src
#
# install dependencies
COPY client/package*.json ./
RUN npm install
#
# build client
COPY client/ .
RUN npm run build
#
# STAGE 3: RUNTIME
#
FROM debian:bullseye-slim
#
# avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
#
# set custom user
ARG USERNAME=neko
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN set -eux; \
apt-get update; \
#
# install dependencies
apt-get install -y --no-install-recommends wget ca-certificates supervisor; \
apt-get install -y --no-install-recommends pulseaudio dbus-x11 xserver-xorg-video-dummy; \
apt-get install -y --no-install-recommends libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx6; \
#
# gst
apt-get install -y --no-install-recommends libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio \
gstreamer1.0-omx; \
#
# install fonts
apt-get install -y --no-install-recommends \
# Google emojis
fonts-noto-color-emoji \
# Japanese fonts
fonts-takao-mincho \
# Chinese fonts
fonts-wqy-zenhei xfonts-intl-chinese xfonts-wqy \
# Korean fonts
fonts-wqy-microhei; \
#
# create a non-root user
groupadd --gid $USER_GID $USERNAME; \
useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
adduser $USERNAME audio; \
adduser $USERNAME video; \
adduser $USERNAME pulse; \
#
# setup pulseaudio
mkdir -p /home/$USERNAME/.config/pulse/; \
echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
#
# workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
mkdir /tmp/.X11-unix; \
chmod 1777 /tmp/.X11-unix; \
chown $USERNAME /tmp/.X11-unix/; \
#
# make directories for neko
mkdir -p /etc/neko /var/www /var/log/neko; \
chmod 1777 /var/log/neko; \
chown $USERNAME /var/log/neko/; \
chown -R $USERNAME:$USERNAME /home/$USERNAME; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy config files
COPY .docker/base/dbus /usr/bin/dbus
COPY .docker/base/default.pa /etc/pulse/default.pa
COPY .docker/base/supervisord.conf /etc/neko/supervisord.conf
COPY .docker/base/xorg.conf /etc/neko/xorg.conf
#
# set default envs
ENV USER=$USERNAME
ENV DISPLAY=:99.0
ENV NEKO_PASSWORD=neko
ENV NEKO_PASSWORD_ADMIN=admin
ENV NEKO_BIND=:8080
#
# copy static files from previous stages
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=client /src/dist/ /var/www
HEALTHCHECK --interval=10s --timeout=5s --retries=8 \
CMD wget -O - http://localhost:${NEKO_BIND#*:}/health || exit 1
#
# run neko
CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]

View file

@ -1,149 +0,0 @@
#
# STAGE 1: SERVER
#
FROM golang:1.20-bullseye as server
WORKDIR /src
#
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends git cmake make libx11-dev libxrandr-dev libxtst-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly; \
#
# install libclipboard
set -eux; \
cd /tmp; \
git clone --depth=1 https://github.com/jtanx/libclipboard; \
cd libclipboard; \
cmake .; \
make -j4; \
make install; \
rm -rf /tmp/libclipboard; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# build server
COPY server/ .
RUN go get -v -t -d . && go build -o bin/neko cmd/neko/main.go
#
# STAGE 2: CLIENT
#
FROM node:18-bullseye-slim as client
WORKDIR /src
#
# install dependencies
COPY client/package*.json ./
RUN npm install
#
# build client
COPY client/ .
RUN npm run build
#
# STAGE 3: RUNTIME
#
FROM debian:bullseye-slim
#
# avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
#
# set custom user
ARG USERNAME=neko
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN set -eux; \
#
# add non-free repo for intel drivers
echo deb http://deb.debian.org/debian bullseye main contrib non-free > /etc/apt/sources.list; \
echo deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free >> /etc/apt/sources.list; \
echo deb http://deb.debian.org/debian bullseye-updates main contrib non-free >> /etc/apt/sources.list; \
apt-get update; \
#
# install dependencies
apt-get install -y --no-install-recommends wget ca-certificates supervisor; \
apt-get install -y --no-install-recommends pulseaudio dbus-x11 xserver-xorg-video-dummy; \
apt-get install -y --no-install-recommends libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx6; \
#
# intel driver + vaapi
apt-get install -y --no-install-recommends intel-media-va-driver-non-free libva2 vainfo; \
#
# gst + vaapi plugin
apt-get install -y --no-install-recommends libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio \
gstreamer1.0-vaapi; \
#
# install fonts
apt-get install -y --no-install-recommends \
# Google emojis
fonts-noto-color-emoji \
# Japanese fonts
fonts-takao-mincho \
# Chinese fonts
fonts-wqy-zenhei xfonts-intl-chinese xfonts-wqy \
# Korean fonts
fonts-wqy-microhei; \
#
# create a non-root user
groupadd --gid $USER_GID $USERNAME; \
useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
adduser $USERNAME audio; \
adduser $USERNAME video; \
adduser $USERNAME pulse; \
#
# setup pulseaudio
mkdir -p /home/$USERNAME/.config/pulse/; \
echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
#
# workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
mkdir /tmp/.X11-unix; \
chmod 1777 /tmp/.X11-unix; \
chown $USERNAME /tmp/.X11-unix/; \
#
# make directories for neko
mkdir -p /etc/neko /var/www /var/log/neko; \
chmod 1777 /var/log/neko; \
chown $USERNAME /var/log/neko/; \
chown -R $USERNAME:$USERNAME /home/$USERNAME; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy config files
COPY .docker/base/dbus /usr/bin/dbus
COPY .docker/base/default.pa /etc/pulse/default.pa
COPY .docker/base/intel/supervisord.conf /etc/neko/supervisord.conf
COPY .docker/base/xorg.conf /etc/neko/xorg.conf
COPY .docker/base/intel/add-render-group.sh /usr/bin/add-render-group.sh
#
# set default envs
ENV USER=$USERNAME
ENV DISPLAY=:99.0
ENV NEKO_PASSWORD=neko
ENV NEKO_PASSWORD_ADMIN=admin
ENV NEKO_BIND=:8080
ENV NEKO_HWENC=VAAPI
ENV RENDER_GID=
#
# copy static files from previous stages
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=client /src/dist/ /var/www
HEALTHCHECK --interval=10s --timeout=5s --retries=8 \
CMD wget -O - http://localhost:${NEKO_BIND#*:}/health || exit 1
#
# run neko
CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]

View file

@ -1,197 +0,0 @@
ARG UBUNTU_RELEASE=20.04
ARG CUDA_VERSION=11.2.2
#
# STAGE 1: SERVER
#
FROM golang:1.18-bullseye as server
WORKDIR /src
#
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends git cmake make libx11-dev libxrandr-dev libxtst-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly; \
#
# install libclipboard
set -eux; \
cd /tmp; \
git clone --depth=1 https://github.com/jtanx/libclipboard; \
cd libclipboard; \
cmake .; \
make -j4; \
make install; \
rm -rf /tmp/libclipboard; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# build server
COPY server/ .
RUN go get -v -t -d . && go build -o bin/neko cmd/neko/main.go
#
# STAGE 2: CLIENT
#
FROM node:14-bullseye-slim as client
WORKDIR /src
#
# install dependencies
COPY client/package*.json ./
RUN npm install
#
# build client
COPY client/ .
RUN npm run build
#
# STAGE 3: RUNTIME
#
FROM nvcr.io/nvidia/cudagl:${CUDA_VERSION}-runtime-ubuntu${UBUNTU_RELEASE} as runtime
ARG UBUNTU_RELEASE
ARG CUDA_VERSION
# Make all NVIDIA GPUs visible by default
ENV NVIDIA_VISIBLE_DEVICES=all
# All NVIDIA driver capabilities should preferably be used, check `NVIDIA_DRIVER_CAPABILITIES` inside the container if things do not work
ENV NVIDIA_DRIVER_CAPABILITIES all
#
# set vgl-display to headless 3d gpu card/// correct values are egl[n] or /dev/dri/card0:if this is passed into container
ENV VGL_DISPLAY egl
#
# avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
#
# set custom user
ARG USERNAME=neko
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN set -eux; \
apt-get update; \
#
# install dependencies
apt-get install -y --no-install-recommends wget ca-certificates supervisor; \
apt-get install -y --no-install-recommends pulseaudio dbus-x11 xserver-xorg-video-dummy; \
apt-get install -y --no-install-recommends libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx6; \
#
# hardware acclerations utilities
apt-get install -y --no-install-recommends libgtk-3-bin mesa-utils mesa-utils-extra mesa-va-drivers mesa-vulkan-drivers libvulkan-dev libvulkan-dev:i386 vdpauinfo; \
#
# gst
apt-get install -y --no-install-recommends libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio; \
#
# install fonts
apt-get install -y --no-install-recommends \
# Google emojis
fonts-noto-color-emoji \
# Japanese fonts
fonts-takao-mincho \
# Chinese fonts
fonts-wqy-zenhei xfonts-intl-chinese xfonts-wqy \
# Korean fonts
fonts-wqy-microhei; \
#
# create a non-root user
groupadd --gid $USER_GID $USERNAME; \
useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
adduser $USERNAME audio; \
adduser $USERNAME video; \
adduser $USERNAME pulse; \
#
# setup pulseaudio
mkdir -p /home/$USERNAME/.config/pulse/; \
echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
#
# workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
mkdir /tmp/.X11-unix; \
chmod 1777 /tmp/.X11-unix; \
chown $USERNAME /tmp/.X11-unix/; \
#
# make directories for neko
mkdir -p /etc/neko /var/www /var/log/neko; \
chmod 1777 /var/log/neko; \
chown $USERNAME /var/log/neko/; \
chown -R $USERNAME:$USERNAME /home/$USERNAME; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# install and configure Vulkan manually
RUN set -eux; \
apt-get update; \
if [ "${UBUNTU_RELEASE}" = "18.04" ]; then apt-get install -y --no-install-recommends vulkan-utils; else apt-get install -y --no-install-recommends vulkan-tools; fi; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*; \
#
# configure vulkan
VULKAN_API_VERSION=$(dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9]+(\.[0-9]+)(\.[0-9]+)'); \
mkdir -p /etc/vulkan/icd.d/; \
echo "{\n\
\"file_format_version\" : \"1.0.0\",\n\
\"ICD\": {\n\
\"library_path\": \"libGLX_nvidia.so.0\",\n\
\"api_version\" : \"${VULKAN_API_VERSION}\"\n\
}\n\
}" > /etc/vulkan/icd.d/nvidia_icd.json
#
# install VirtualGL and make libraries available for preload
ARG VIRTUALGL_VERSION=3.1
RUN set -eux; \
apt-get update; \
wget "https://sourceforge.net/projects/virtualgl/files/virtualgl_${VIRTUALGL_VERSION}_amd64.deb"; \
wget "https://sourceforge.net/projects/virtualgl/files/virtualgl32_${VIRTUALGL_VERSION}_amd64.deb"; \
apt-get install -y --no-install-recommends ./virtualgl_${VIRTUALGL_VERSION}_amd64.deb ./virtualgl32_${VIRTUALGL_VERSION}_amd64.deb; \
rm -f "virtualgl_${VIRTUALGL_VERSION}_amd64.deb" "virtualgl32_${VIRTUALGL_VERSION}_amd64.deb"; \
chmod u+s /usr/lib/libvglfaker.so; \
chmod u+s /usr/lib/libdlfaker.so; \
chmod u+s /usr/lib32/libvglfaker.so; \
chmod u+s /usr/lib32/libdlfaker.so; \
chmod u+s /usr/lib/i386-linux-gnu/libvglfaker.so; \
chmod u+s /usr/lib/i386-linux-gnu/libdlfaker.so; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*;
#
# copy config files
COPY .docker/base/dbus /usr/bin/dbus
COPY .docker/base/default.pa /etc/pulse/default.pa
COPY .docker/base/supervisord.conf /etc/neko/supervisord.conf
COPY .docker/base/xorg.conf /etc/neko/xorg.conf
COPY .docker/base/nvidia/entrypoint.sh /bin/entrypoint.sh
#
# set default envs
ENV USER=$USERNAME
ENV DISPLAY=:99.0
ENV NEKO_PASSWORD=neko
ENV NEKO_PASSWORD_ADMIN=admin
ENV NEKO_BIND=:8080
#
# copy static files from previous stages
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=client /src/dist/ /var/www
HEALTHCHECK --interval=10s --timeout=5s --retries=8 \
CMD wget -O - http://localhost:${NEKO_BIND#*:}/health || exit 1
#
# run neko
CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]

View file

@ -1,7 +0,0 @@
#!/usr/bin/pulseaudio -nF
# Allow pulse audio to be accessed via TCP (from localhost only), to allow other users to access the virtual devices
load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket auth-anonymous=1
### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

View file

@ -1,69 +0,0 @@
[supervisord]
nodaemon=true
user=root
pidfile=/var/run/supervisord.pid
logfile=/dev/null
logfile_maxbytes=0
loglevel=debug
[include]
files=/etc/neko/supervisord/*.conf
[program:rendergroup-init]
environment=RENDER_GID="%(ENV_RENDER_GID)s",USER="%(ENV_USER)s"
command=/usr/bin/add-render-group.sh
startsecs=0
startretries=0
autorestart=false
priority=10
user=root
stdout_logfile=/var/log/neko/rendergroup.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
redirect_stderr=true
[program:dbus]
environment=HOME="/root",USER="root"
command=/usr/bin/dbus
autorestart=true
priority=100
user=root
stdout_logfile=/var/log/neko/dbus.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true
[program:x-server]
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
command=/usr/bin/X -config /etc/neko/xorg.conf %(ENV_DISPLAY)s
autorestart=true
priority=300
user=%(ENV_USER)s
stdout_logfile=/var/log/neko/xorg.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true
[program:pulseaudio]
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
command=/usr/bin/pulseaudio --log-level=info --disallow-module-loading --disallow-exit --exit-idle-time=-1
autorestart=true
priority=300
user=%(ENV_USER)s
stdout_logfile=/var/log/neko/pulseaudio.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true
[program:neko]
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
command=/usr/bin/neko serve --static "/var/www"
stopsignal=INT
stopwaitsecs=5
autorestart=true
priority=800
user=%(ENV_USER)s
stdout_logfile=/var/log/neko/neko.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true

View file

@ -1,125 +0,0 @@
#!/bin/sh
set -ex
cd "$(dirname "$0")"
BASE="${PWD}/../"
# BUILD_IMAGE from environment vairables has precedence
if [ ! -z "${BUILD_IMAGE}" ]
then
ENV_BUILD_IMAGE="${BUILD_IMAGE}"
fi
if [ -f ".env.default" ]
then
export $(cat .env.default | sed 's/#.*//g' | xargs)
fi
if [ -f ".env" ]
then
export $(cat .env | sed 's/#.*//g' | xargs)
fi
# BUILD_IMAGE from environment vairables has precedence
if [ ! -z "${ENV_BUILD_IMAGE}" ]
then
BUILD_IMAGE="${ENV_BUILD_IMAGE}"
unset ENV_BUILD_IMAGE
fi
if [ -z "${1}" ] && [ ! -z "${SERVER_TAG}" ]
then
./build base
./build ${SERVER_TAG}
exit 0
fi
build_client() {
docker build -t neko-dev-client -f base/Dockerfile --target client "${BASE}"
docker run --rm \
--user "$(id -u):$(id -g)" \
-v "${BASE}client/dist:/tmp/dist" \
neko-dev-client sh -c "rm -rf /tmp/dist/*; cp -r /src/dist/* /tmp/dist"
}
build_server() {
docker build -t neko-dev-server -f base/Dockerfile --target server "${BASE}"
docker run --rm \
--user "$(id -u):$(id -g)" \
-v "${BASE}server/bin:/tmp/bin" \
neko-dev-server sh -c "rm -rf /tmp/bin/neko; cp /src/bin/neko /tmp/bin"
}
build() {
if [ "$1" = "base" ]
then
# build base
docker build -t "${BUILD_IMAGE}:base" -f base/Dockerfile "${BASE}"
else
# build image
docker build -t "${BUILD_IMAGE}:$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:base" -f "$1/Dockerfile" "$1/"
fi
}
build_arm() {
if [ "$1" = "base" ]
then
# build ARM base
docker build -t "${BUILD_IMAGE}:arm-base" -f base/Dockerfile.arm "${BASE}"
elif [ -f "$1/Dockerfile.arm" ]
then
# build dedicated ARM image
docker build -t "${BUILD_IMAGE}:arm-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:arm-base" -f "$1/Dockerfile.arm" "$1/"
else
# try to build ARM image with common Dockerfile
docker build -t "${BUILD_IMAGE}:arm-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:arm-base" -f "$1/Dockerfile" "$1/"
fi
}
build_intel() {
if [ "$1" = "base" ]
then
# build intel base
docker build -t "${BUILD_IMAGE}:intel-base" -f base/Dockerfile.intel "${BASE}"
elif [ -f "$1/Dockerfile.intel" ]
then
# build dedicated intel image
docker build -t "${BUILD_IMAGE}:intel-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:intel-base" -f "$1/Dockerfile.intel" "$1/"
else
# try to build intel image with common Dockerfile
docker build -t "${BUILD_IMAGE}:intel-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:intel-base" -f "$1/Dockerfile" "$1/"
fi
}
build_nvidia() {
if [ "$1" = "base" ]
then
# build nvidia base
docker build -t "${BUILD_IMAGE}:nvidia-base" -f base/Dockerfile.nvidia "${BASE}"
elif [ -f "$1/Dockerfile.nvidia" ]
then
# build dedicated nvidia image
docker build -t "${BUILD_IMAGE}:nvidia-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:nvidia-base" -f "$1/Dockerfile.nvidia" "$1/"
else
# try to build nvidia image with common Dockerfile
docker build -t "${BUILD_IMAGE}:nvidia-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:nvidia-base" -f "$1/Dockerfile" "$1/"
fi
}
case $1 in
client) build_client;;
server) build_server;;
# build arm- images
arm-*) build_arm "${1#arm-}";;
# build intel- images
intel-*) build_intel "${1#intel-}";;
# build nvidia- images
nvidia-*) build_nvidia "${1#nvidia-}";;
# build images
*) build "$1";;
esac

View file

@ -1,33 +0,0 @@
ARG BASE_IMAGE=m1k1o/neko:base
FROM $BASE_IMAGE
#
# install neko chromium
RUN set -eux; \
echo "deb http://ftp.de.debian.org/debian bookworm main" >> /etc/apt/sources.list; \
apt-get update; \
apt-get install -y --no-install-recommends unzip chromium chromium-common chromium-sandbox openbox; \
#
# install widevine module
CHROMIUM_DIR="/usr/lib/chromium"; \
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | tail -n 1); \
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-x64.zip"; \
mkdir -p "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_x64"; \
unzip -p /tmp/widevine.zip LICENSE.txt > "${CHROMIUM_DIR}/WidevineCdm/LICENSE"; \
unzip -p /tmp/widevine.zip manifest.json > "${CHROMIUM_DIR}/WidevineCdm/manifest.json"; \
unzip -p /tmp/widevine.zip libwidevinecdm.so > "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"; \
find "${CHROMIUM_DIR}/WidevineCdm" -type d -exec chmod 0755 '{}' \;; \
find "${CHROMIUM_DIR}/WidevineCdm" -type f -exec chmod 0644 '{}' \;; \
rm /tmp/widevine.zip; \
#
# clean up
apt-get --purge autoremove -y unzip; \
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/chromium.conf
COPY --chown=neko preferences.json /home/neko/.config/chromium/Default/Preferences
COPY policies.json /etc/chromium/policies/managed/policies.json
COPY openbox.xml /etc/neko/openbox.xml

View file

@ -1,19 +0,0 @@
ARG BASE_IMAGE=m1k1o/neko:arm-base
FROM $BASE_IMAGE
#
# install neko chromium
RUN set -eux; apt-get update; \
# TODO: Bring back DRM support.
apt-get install -y --no-install-recommends chromium openbox; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/chromium.conf
COPY --chown=neko preferences.json /home/neko/.config/chromium/Default/Preferences
COPY policies.json /etc/chromium/policies/managed/policies.json
COPY openbox.xml /etc/neko/openbox.xml

View file

@ -1,30 +0,0 @@
ARG BASE_IMAGE=m1k1o/neko:arm-base
FROM $BASE_IMAGE
#
# install firefox-esr
RUN set -eux; apt-get update; \
# TODO: Bring back DRM support with arm32v7/debian:buster-slim image.
apt-get install -y --no-install-recommends openbox firefox-esr; \
#
# install extensions
mkdir -p /usr/lib/firefox-esr/distribution/extensions; \
wget -O '/usr/lib/firefox-esr/distribution/extensions/uBlock0@raymondhill.net.xpi' https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi; \
wget -O '/usr/lib/firefox-esr/distribution/extensions/sponsorBlocker@ajay.app.xpi' https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi; \
#
# create a profile directory
mkdir -p /home/neko/.mozilla/firefox/profile.default/extensions; \
chown -R neko:neko /home/neko/.mozilla/firefox/profile.default; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/firefox.conf
COPY neko.js /usr/lib/firefox-esr/mozilla.cfg
COPY autoconfig.js /usr/lib/firefox-esr/defaults/pref/autoconfig.js
COPY policies.json /usr/lib/firefox-esr/distribution/policies.json
COPY --chown=neko profiles.ini /home/neko/.mozilla/firefox/profiles.ini
COPY openbox.xml /etc/neko/openbox.xml

View file

@ -1,25 +0,0 @@
#!/bin/bash
if [ -f ".env.default" ]
then
export $(cat .env.default | sed 's/#.*//g' | xargs)
fi
if [ -f ".env" ]
then
export $(cat .env | sed 's/#.*//g' | xargs)
fi
# use -f to force rebuild
if [ "$(docker images -q neko_dev_server 2> /dev/null)" == "" ] || [ "$1" == "-f" ]; then
docker build -t neko_dev_server -f base/Dockerfile --target server ../
fi
docker run --rm -it \
-v "${PWD}/../server:/src" \
-e GIT_COMMIT=`git rev-parse --short HEAD` \
-e GIT_BRANCH=`git rev-parse --symbolic-full-name --abbrev-ref HEAD` \
-e GIT_DIRTY=`git diff-index --quiet HEAD -- || echo "✗-"` \
--entrypoint="bash" \
--workdir="/src" \
neko_dev_server ./build

View file

@ -1,38 +0,0 @@
#!/bin/bash
set -u
err() {
echo "ERROR: $*" >&2
exit 1
}
profile_dir="/home/neko/.local/share/remmina"
if [[ -n "$REMMINA_PROFILE" ]]; then
profile=${REMMINA_PROFILE%.remmina}.remmina
file=${profile##/*/}
[[ "$file" = "$profile" ]] && profile="$profile_dir"/"$file"
[[ -f "$profile" ]] || err "Connection profile $profile not found"
echo "Running remmina with connection profile $profile"
exec remmina -c "$profile"
fi
[[ -z "$REMMINA_URL" ]] && err "Neither 'REMMINA_PROFILE' nor 'REMMINA_URL' found in env vars"
readarray -t arr < <( echo -n "$REMMINA_URL" | perl -pe 's|^(\w+)\:\/\/(?:([^:]+)(?::([^@]+))?@)?(.*)$|\1\n\2\n\3\n\4|' )
proto="${arr[0]}"
user="${arr[1]}"
pw="${arr[2]}"
host="${arr[3]}"
echo "Parsed url in 'REMMINA_URL': proto:$proto username:$user host:$host"
[[ "$proto" != "vnc" && "$proto" != "rdp" && "$proto" != "spice" ]] && err "Unsupported protocol $proto in connection url 'REMMINA_URL'"
profile="$profile_dir"/"$proto".remmina
remmina --set-option username="$user" --update-profile "$profile"
remmina --set-option password="$pw" --update-profile "$profile"
remmina --set-option server="$host" --update-profile "$profile"
# remmina --set-option window_maximize=1 --update-profile "$profile"
# remmina --set-option scale=1 --update-profile "$profile"
exec remmina -c "$profile"

View file

@ -1,29 +0,0 @@
#!/bin/bash
if [ -f ".env.default" ]
then
export $(cat .env.default | sed 's/#.*//g' | xargs)
fi
if [ -f ".env" ]
then
export $(cat .env | sed 's/#.*//g' | xargs)
fi
# use -i to install
if [ ! -d "${PWD}/../client/node_modules" ] || [ "$1" == "-i" ]; then
docker run --rm -it \
-v "${PWD}/../client:/app" \
--workdir="/app" \
--entrypoint="npm" \
node:18-bullseye-slim install
fi
docker run --rm -it \
-p "${CLIENT_PORT}:8080" \
-v "${PWD}/../client:/app" \
-e "VUE_APP_SERVER_PORT=${SERVER_PORT}" \
--workdir="/app" \
--entrypoint="npm" \
node:18-bullseye-slim run serve

View file

@ -1,46 +0,0 @@
#!/bin/bash
if [ -f ".env.default" ]
then
export $(cat .env.default | sed 's/#.*//g' | xargs)
fi
if [ -f ".env" ]
then
export $(cat .env | sed 's/#.*//g' | xargs)
fi
BINARY_PATH="${PWD}/../server/bin/neko"
# use -r to rebuild
if [ ! -f "${BINARY_PATH}" ] || [ "$1" == "-r" ]; then
./rebuild-server
fi
# if image starts with nvidia- add --gpus all
if [[ "${SERVER_TAG}" == "nvidia-"* ]]; then
GPU_FLAG="--gpus all"
echo "Nvidia GPU acceleration enabled"
fi
# if image starts with intel- add --device /dev/dri
if [[ "${SERVER_TAG}" == "intel-"* ]]; then
GPU_FLAG="--device /dev/dri"
echo "Intel GPU acceleration enabled"
fi
# use --gpus all to enable GPU acceleration
docker run --rm -it \
--name "neko_dev" \
$GPU_FLAG \
-p "${SERVER_PORT}:8080" \
-p "${SERVER_EPR}:${SERVER_EPR}/udp" \
-e "NEKO_SCREEN=1920x1080@60" \
-e "NEKO_EPR=${SERVER_EPR}" \
-e "NEKO_NAT1TO1=${SERVER_IP}" \
-e "NEKO_ICELITE=true" \
-e "NEKO_MAX_FPS=25" \
-v "${BINARY_PATH}:/usr/bin/neko" \
--shm-size=2G \
--cap-add SYS_ADMIN \
${BUILD_IMAGE}:${SERVER_TAG}

View file

@ -6,4 +6,4 @@ indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
trim_trailing_whitespace = true

2
.gitattributes vendored
View file

@ -19,4 +19,4 @@
*.ico binary
*.mov binary
*.mp4 binary
*.mp3 binary
*.mp3 binary

45
.github/workflows/client_build.yml vendored Normal file
View file

@ -0,0 +1,45 @@
name: Build Client
on:
workflow_call:
inputs:
with-artifact:
required: false
type: boolean
default: true
description: |
If true, the build artifacts will be uploaded as a GitHub Actions artifact.
This is useful for debugging and testing purposes. If false, the artifacts
will not be uploaded. This is useful for test builds where you don't need
the artifacts.
jobs:
build-client:
name: Build Client
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
cache-dependency-path: client/package-lock.json
- name: Install dependencies
working-directory: ./client
run: npm ci
- name: Build client
working-directory: ./client
run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4
if: ${{ inputs.with-artifact }}
with:
name: client
path: client/dist

19
.github/workflows/client_test.yml vendored Normal file
View file

@ -0,0 +1,19 @@
name: Test Client
on:
pull_request:
branches:
- master
paths:
- client/**
- .github/workflows/client_build.yml
- .github/workflows/client_test.yml
jobs:
test-client:
name: Test Client
uses: ./.github/workflows/client_build.yml
with:
# Do not upload artifacts for test builds
with-artifact: false
secrets: inherit

View file

@ -1,8 +1,11 @@
name: "build and push amd64 images to Docker Hub"
name: Build and Push to Docker Hub
on:
push:
branches: [ master ]
branches:
- master
paths-ignore:
- 'webpage/**'
#
# Run this action periodically to keep browsers up-to-date
# even if there is no activity in this repo.
@ -10,69 +13,119 @@ on:
schedule:
- cron: "43 2 * * 1"
# allow only one workflow to run at a time
# and cancel in-progress jobs if a new one is triggered
concurrency:
group: "dockerhub"
cancel-in-progress: true
env:
DOCKER_IMAGE: m1k1o/neko
jobs:
build-base:
name: Base Image
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
steps:
- name: Check Out Repo
uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v5
id: meta
with:
images: ${{ env.DOCKER_IMAGE }}
tags: |
type=raw,value=base
- name: Login to Docker Hub
run: |
docker login --username "${DOCKER_USERNAME}" --password-stdin "${DOCKER_REGISTRY}" <<< "${DOCKER_TOKEN}"
env:
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
uses: docker/login-action@v3
with:
username: ${{ github.actor }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build base
run: |
BUILD_IMAGE=${DOCKER_IMAGE} .docker/build ${DOCKER_TAG}
docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
env:
DOCKER_TAG: base
- name: Generate base Dockerfile
run: go run utils/docker/main.go -i Dockerfile.tmpl -o Dockerfile
build:
- name: Build and push
uses: docker/build-push-action@v6
with:
context: ./
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-app:
name: App Image
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
needs: [ build-base ]
needs: build-base
strategy:
# Will build all images even if some fail.
fail-fast: false
matrix:
tags: [ firefox, chromium, google-chrome, ungoogled-chromium, microsoft-edge, brave, vivaldi, opera, tor-browser, remmina, vlc, xfce, kde ]
env:
DOCKER_TAG: ${{ matrix.tags }}
tag:
- firefox
# Temporarily disabled due to Cloudflare blocked download link
#- waterfox
- chromium
- google-chrome
- ungoogled-chromium
- microsoft-edge
- brave
- vivaldi
- opera
- tor-browser
- remmina
- vlc
- xfce
- kde
steps:
- name: Check Out Repo
uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v5
id: meta
with:
images: ${{ env.DOCKER_IMAGE }}
tags: |
type=raw,value=latest,enable=${{ matrix.tag == 'firefox' }}
type=raw,value=${{ matrix.tag }}
- name: Login to Docker Hub
run: |
docker login --username "${DOCKER_USERNAME}" --password-stdin "${DOCKER_REGISTRY}" <<< "${DOCKER_TOKEN}"
env:
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
uses: docker/login-action@v3
with:
username: ${{ github.actor }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build container
run: |
BUILD_IMAGE=${DOCKER_IMAGE} .docker/build ${DOCKER_TAG}
docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
- name: Push latest tag
if: ${{ matrix.tags == 'firefox' }}
run: |
docker pull ${DOCKER_IMAGE}:${DOCKER_TAG}
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
docker push ${DOCKER_IMAGE}:latest
- name: Build and push
uses: docker/build-push-action@v6
with:
context: apps/${{ matrix.tag }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.DOCKER_IMAGE }}:base
cache-from: type=gha
cache-to: type=gha,mode=max

View file

@ -1,125 +0,0 @@
name: "amd64 images"
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: m1k1o/neko
TAG_PREFIX: ""
BASE_DOCKERFILE: Dockerfile
PLATFORMS: linux/amd64
jobs:
build-base:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: ./
file: .docker/base/${{ env.BASE_DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
needs: [ build-base ]
strategy:
# Will build all images even if some fail.
matrix:
include:
- tag: firefox
- tag: chromium
- tag: google-chrome
- tag: ungoogled-chromium
- tag: microsoft-edge
- tag: brave
- tag: vivaldi
- tag: opera
- tag: tor-browser
- tag: remmina
- tag: vlc
- tag: xfce
- tag: kde
env:
TAG_NAME: ${{ matrix.tag }}
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}${{ env.TAG_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .docker/${{ env.TAG_NAME }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base:sha-${{ github.sha }}

View file

@ -1,126 +0,0 @@
name: "arm64v8 and arm32v7 images"
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: m1k1o/neko
TAG_PREFIX: arm-
BASE_DOCKERFILE: Dockerfile.arm
PLATFORMS: linux/arm64,linux/arm/v7
jobs:
build-base:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: ./
file: .docker/base/${{ env.BASE_DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
needs: [ build-base ]
strategy:
# Will build all images even if some fail.
matrix:
include:
- tag: firefox
dockerfile: Dockerfile.arm
- tag: chromium
dockerfile: Dockerfile.arm
- tag: ungoogled-chromium
dockerfile: Dockerfile
- tag: tor-browser
dockerfile: Dockerfile
- tag: vlc
dockerfile: Dockerfile
- tag: xfce
dockerfile: Dockerfile
env:
TAG_NAME: ${{ matrix.tag }}
DOCKERFILE: ${{ matrix.dockerfile }}
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}${{ env.TAG_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .docker/${{ env.TAG_NAME }}
file: .docker/${{ env.TAG_NAME }}/${{ env.DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base:sha-${{ github.sha }}

View file

@ -1,126 +0,0 @@
name: "intel gpu supported images"
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: m1k1o/neko
TAG_PREFIX: intel-
BASE_DOCKERFILE: Dockerfile.intel
PLATFORMS: linux/amd64
jobs:
build-base:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: ./
file: .docker/base/${{ env.BASE_DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
needs: [ build-base ]
strategy:
# Will build all images even if some fail.
matrix:
include:
- tag: firefox
- tag: chromium
- tag: google-chrome
- tag: ungoogled-chromium
- tag: microsoft-edge
- tag: brave
- tag: vivaldi
- tag: opera
- tag: tor-browser
- tag: remmina
- tag: vlc
- tag: xfce
- tag: kde
env:
TAG_NAME: ${{ matrix.tag }}
DOCKERFILE: ${{ matrix.dockerfile }}
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}${{ env.TAG_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .docker/${{ env.TAG_NAME }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base:sha-${{ github.sha }}

View file

@ -1,122 +0,0 @@
name: "nvidia gpu supported images"
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: m1k1o/neko
TAG_PREFIX: nvidia-
BASE_DOCKERFILE: Dockerfile.nvidia
PLATFORMS: linux/amd64
jobs:
build-base:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: ./
file: .docker/base/${{ env.BASE_DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build:
runs-on: ubuntu-latest
#
# do not run on forks
#
if: github.repository_owner == 'm1k1o'
needs: [ build-base ]
strategy:
# Will build all images even if some fail.
matrix:
include:
- tag: brave
dockerfile: Dockerfile.nvidia
- tag: chromium
dockerfile: Dockerfile.nvidia
- tag: google-chrome
dockerfile: Dockerfile.nvidia
- tag: microsoft-edge
dockerfile: Dockerfile.nvidia
env:
TAG_NAME: ${{ matrix.tag }}
DOCKERFILE: ${{ matrix.dockerfile }}
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v3
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}${{ env.TAG_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
-
name: Log in to the Container registry
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .docker/${{ env.TAG_NAME }}
file: .docker/${{ env.TAG_NAME }}/${{ env.DOCKERFILE }}
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.TAG_PREFIX }}base:sha-${{ github.sha }}

57
.github/workflows/ghcr.yml vendored Normal file
View file

@ -0,0 +1,57 @@
name: Build and Push to GHCR
on:
push:
tags:
- 'v*'
jobs:
build-base:
name: Base Image
uses: ./.github/workflows/image_base.yml
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
secrets: inherit
build-app:
name: App Image
uses: ./.github/workflows/image_app.yml
needs: build-base
strategy:
# Will build all images even if some fail.
fail-fast: false
matrix:
include:
- name: firefox
platforms: linux/amd64,linux/arm64,linux/arm/v7
# Temporarily disabled due to Cloudflare blocked download link
#- name: waterfox
# platforms: linux/amd64
- name: chromium
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: google-chrome
platforms: linux/amd64
- name: ungoogled-chromium
platforms: linux/amd64
- name: microsoft-edge
platforms: linux/amd64
- name: brave
platforms: linux/amd64,linux/arm64
- name: vivaldi
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: opera
platforms: linux/amd64
- name: tor-browser
platforms: linux/amd64
- name: remmina
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: vlc
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: xfce
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: kde
platforms: linux/amd64,linux/arm64,linux/arm/v7
with:
name: ${{ matrix.name }}
platforms: ${{ matrix.platforms }}
secrets: inherit

47
.github/workflows/ghcr_intel.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: Build and Push to GHCR for Intel
on:
push:
tags:
- 'v*'
jobs:
build-base:
name: Base Image
uses: ./.github/workflows/image_base.yml
with:
flavor: intel
platforms: linux/amd64
dockerfile: Dockerfile.intel
secrets: inherit
build-app:
name: App Image
uses: ./.github/workflows/image_app.yml
needs: build-base
strategy:
# Will build all images even if some fail.
fail-fast: false
matrix:
include:
- name: firefox
# Temporarily disabled due to Cloudflare blocked download link
#- name: waterfox
- name: chromium
- name: google-chrome
- name: ungoogled-chromium
- name: microsoft-edge
- name: brave
- name: vivaldi
- name: opera
- name: tor-browser
- name: remmina
- name: vlc
- name: xfce
- name: kde
with:
name: ${{ matrix.name }}
flavor: intel
platforms: ${{ matrix.platforms }}
dockerfile: ${{ matrix.dockerfile }}
secrets: inherit

42
.github/workflows/ghcr_nvidia.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: Build and Push to GHCR for Nvidia
on:
push:
tags:
- 'v*'
jobs:
build-base:
name: Base Image
uses: ./.github/workflows/image_base.yml
with:
flavor: nvidia
platforms: linux/amd64
dockerfile: Dockerfile.nvidia
secrets: inherit
build-app:
name: App Image
uses: ./.github/workflows/image_app.yml
needs: build-base
strategy:
# Will build all images even if some fail.
fail-fast: false
matrix:
include:
- name: firefox
dockerfile: Dockerfile.nvidia
- name: brave
dockerfile: Dockerfile.nvidia
- name: chromium
dockerfile: Dockerfile.nvidia
- name: google-chrome
dockerfile: Dockerfile.nvidia
- name: microsoft-edge
dockerfile: Dockerfile.nvidia
with:
name: ${{ matrix.name }}
flavor: nvidia
platforms: ${{ matrix.platforms }}
dockerfile: ${{ matrix.dockerfile }}
secrets: inherit

76
.github/workflows/image_app.yml vendored Normal file
View file

@ -0,0 +1,76 @@
name: Build App Image
on:
workflow_call:
inputs:
name:
required: true
type: string
description: "The name of the app to build."
flavor:
required: false
type: string
default: ""
description: "The flavor of the image to build."
platforms:
required: false
type: string
default: "linux/amd64"
description: "The platforms to build for."
dockerfile:
required: false
type: string
default: "Dockerfile"
description: "The Dockerfile to use for building the image."
env:
FLAVOR_PREFIX: ${{ inputs.flavor && format('{0}-', inputs.flavor) || '' }}
jobs:
build-app:
name: Build App Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}/${{ env.FLAVOR_PREFIX }}${{ inputs.name }}
tags: |
type=edge,branch=master
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: apps/${{ inputs.name }}
file: apps/${{ inputs.name }}/${{ inputs.dockerfile || 'Dockerfile' }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=ghcr.io/${{ github.repository }}/${{ env.FLAVOR_PREFIX }}base:sha-${{ github.sha }}
platforms: ${{ inputs.platforms || 'linux/amd64' }}
cache-from: type=gha
cache-to: type=gha,mode=max

85
.github/workflows/image_base.yml vendored Normal file
View file

@ -0,0 +1,85 @@
name: Build Base Image
on:
workflow_call:
inputs:
flavor:
required: false
type: string
default: ""
description: "The flavor of the image to build. This is used to determine the base image and the Dockerfile to use."
platforms:
required: false
type: string
default: "linux/amd64"
description: "The platforms to build for."
dockerfile:
required: false
type: string
default: "Dockerfile"
description: "The Dockerfile to use for building the image."
env:
FLAVOR_PREFIX: ${{ inputs.flavor && format('{0}-', inputs.flavor) || '' }}
jobs:
build-client:
name: Build Client Artifacts
uses: ./.github/workflows/client_build.yml
build-base:
name: Build Base Image
runs-on: ubuntu-latest
needs: build-client
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download client dist
uses: actions/download-artifact@v4
with:
name: client
path: client/dist
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata (tags, labels) for Docker
uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}/${{ env.FLAVOR_PREFIX }}base
tags: |
type=edge,branch=master
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,format=long
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GHCR_ACCESS_TOKEN }}
- name: Generate base Dockerfile
env:
RUNTIME_DOCKERFILE: ${{ inputs.dockerfile || 'Dockerfile' }}
run: go run utils/docker/main.go -i Dockerfile.tmpl -o Dockerfile -client client/dist
- name: Build and push
uses: docker/build-push-action@v6
with:
context: ./
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: ${{ inputs.platforms || 'linux/amd64' }}
cache-from: type=gha
cache-to: type=gha,mode=max

44
.github/workflows/server_test.yml vendored Normal file
View file

@ -0,0 +1,44 @@
name: Test Server
on:
pull_request:
branches:
- master
paths:
- server/**
- .github/workflows/server_test.yml
jobs:
build-amd64:
name: Build amd64
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: ./server
platforms: linux/amd64
build-arm64:
name: Build arm64
runs-on: ubuntu-24.04-arm
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: ./server
platforms: linux/arm64

45
.github/workflows/webpage_build.yml vendored Normal file
View file

@ -0,0 +1,45 @@
name: Build Webpage
on:
workflow_call:
inputs:
with-artifact:
required: false
type: boolean
default: true
description: |
If true, the build artifacts will be uploaded as a GitHub Actions artifact.
This is useful for debugging and testing purposes. If false, the artifacts
will not be uploaded. This is useful for test builds where you don't need
the artifacts.
jobs:
build-webpage:
name: Build Webpage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
cache-dependency-path: webpage/package-lock.json
- name: Install dependencies
working-directory: ./webpage
run: npm ci
- name: Build webpage
working-directory: ./webpage
run: npm run build
- if: ${{ inputs.with-artifact }}
name: Upload artifacts
uses: actions/upload-pages-artifact@v3
with:
artifact-name: github-pages
path: ./webpage/build

47
.github/workflows/webpage_deploy.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: Build and Deploy Webpage to GitHub Pages
on:
# Runs on pushes targeting the default branch
push:
branches:
- master
paths:
- webpage/**
- .github/workflows/webpage_build.yml
- .github/workflows/webpage_deploy.yml
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build-webpage:
name: Build Webpage
uses: ./.github/workflows/webpage_build.yml
secrets: inherit
deploy-webpage:
name: Deploy to GitHub Pages
needs: build-webpage
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

19
.github/workflows/webpage_test.yml vendored Normal file
View file

@ -0,0 +1,19 @@
name: Test Webpage
on:
pull_request:
branches:
- master
paths:
- webpage/**
- .github/workflows/webpage_build.yml
- .github/workflows/webpage_test.yml
jobs:
test-webpage:
name: Test Webpage
uses: ./.github/workflows/webpage_build.yml
with:
# Do not upload artifacts for test builds
with-artifact: false
secrets: inherit

13
.gitignore vendored
View file

@ -33,3 +33,16 @@ bin
# Environment files
*.env
.env.development
# Code Editors
.idea
runtime/fonts/*
!runtime/fonts/.gitkeep
runtime/icon-theme/*
!runtime/icon-theme/.gitkeep
# root Dockerfile is generated from the Dockerfile.tmpl
/Dockerfile

23
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,23 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "launch",
"type": "go",
"debugAdapter": "dlv-dap",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/server/cmd/neko",
"output": "${workspaceFolder}/server/bin/debug/neko",
"cwd": "${workspaceFolder}/server/",
"args": ["serve", "-d", "-c", "dev/runtime/config.yml"],
"env": {
"DISPLAY": ":99.0",
"PION_LOG_TRACE": "all",
}
}
]
}

14
.vscode/settings.json vendored
View file

@ -1 +1,13 @@
{}
{
"go.inferGopath": false,
"go.autocompleteUnimportedPackages": true,
"go.delveConfig": {
"useApiV1": false
},
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}

17
Dockerfile.tmpl Normal file
View file

@ -0,0 +1,17 @@
# This Dockerfile is pre-processed by the ./utils/docker script, it is not meant to be used directly.
FROM ./server/ AS server
FROM ./client/ AS client
FROM ./utils/xorg-deps/ AS xorg-deps
FROM ./runtime/$RUNTIME_DOCKERFILE AS runtime
# tells neko-rooms which version of the API to use
LABEL net.m1k1o.neko.api-version=3
COPY --from=server /src/bin/plugins/ /etc/neko/plugins/
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=client /src/dist/ /var/www
COPY --from=xorg-deps /usr/local/lib/xorg/modules/drivers/dummy_drv.so /usr/lib/xorg/modules/drivers/dummy_drv.so
COPY --from=xorg-deps /usr/local/lib/xorg/modules/input/neko_drv.so /usr/lib/xorg/modules/input/neko_drv.so
COPY config.yml /etc/neko/neko.yaml

View file

@ -186,7 +186,10 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2020 Nurdism <nurdism.io@gmail.com>, 2020-2021 m1k1o
Copyright (C) 2020 Nurdism <nurdism.io@gmail.com>
Copyright (C) 2020-2024 m1k1o & Demodesk GmbH
Copyright (C) 2024- m1k1o
All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -198,4 +201,4 @@
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.

118
README.md
View file

@ -1,6 +1,6 @@
<div align="center">
<a href="https://github.com/m1k1o/neko" title="Neko's Github repository.">
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/logo.png" width="400" height="auto"/>
<img src="https://neko.m1k1o.net/img/logo.png" width="400" height="auto"/>
</a>
<p align="center">
<a href="https://github.com/m1k1o/neko/releases">
@ -21,11 +21,14 @@
<a href="https://discord.gg/3U6hWpC">
<img src="https://discordapp.com/api/guilds/665851821906067466/widget.png" alt="Chat on discord">
</a>
<a href="https://hellogithub.com/repository/4536d4546af24196af3f08a023dfa007" target="_blank">
<img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=4536d4546af24196af3f08a023dfa007&claim_uid=0x19e4dJwD83aW2&theme=small" alt="FeaturedHelloGitHub" />
</a>
<a href="https://github.com/m1k1o/neko/actions">
<img src="https://github.com/m1k1o/neko/actions/workflows/ghcr-amd.yml/badge.svg" alt="build">
<img src="https://github.com/m1k1o/neko/actions/workflows/ghcr.yml/badge.svg" alt="build">
</a>
</p>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/intro.gif" width="650" height="auto"/>
<img src="https://neko.m1k1o.net/img/intro.gif" width="650" height="auto"/>
</div>
# n.eko
@ -83,47 +86,60 @@ Compared to clientless remote desktop gateway (e.g. [Apache Guacamole](https://g
### Supported browsers
<div align="center">
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/firefox.svg" title="m1k1o/neko:firefox" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/google-chrome.svg" title="m1k1o/neko:google-chrome" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/chromium.svg" title="m1k1o/neko:chromium" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/microsoft-edge.svg" title="m1k1o/neko:microsoft-edge" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/brave.svg" title="m1k1o/neko:brave" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/vivaldi.svg" title="m1k1o/neko:vivaldi" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/opera.svg" title="m1k1o/neko:opera" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/tor-browser.svg" title="m1k1o/neko:tor-browser" width="60" height="auto"/>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#firefox">
<img src="https://neko.m1k1o.net/img/icons/firefox.svg" title="ghcr.io/m1k1o/neko/firefox" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#tor-browser">
<img src="https://neko.m1k1o.net/img/icons/tor-browser.svg" title="ghcr.io/m1k1o/neko/tor-browser" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#waterfox">
<img src="https://neko.m1k1o.net/img/icons/waterfox.svg" title="ghcr.io/m1k1o/neko/waterfox" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#chromium">
<img src="https://neko.m1k1o.net/img/icons/chromium.svg" title="ghcr.io/m1k1o/neko/chromium" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#google-chrome">
<img src="https://neko.m1k1o.net/img/icons/google-chrome.svg" title="ghcr.io/m1k1o/neko/google-chrome" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#ungoogled-chromium">
<img src="https://neko.m1k1o.net/img/icons/ungoogled-chromium.svg" title="ghcr.io/m1k1o/neko/google-chrome" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#microsoft-edge">
<img src="https://neko.m1k1o.net/img/icons/microsoft-edge.svg" title="ghcr.io/m1k1o/neko/microsoft-edge" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#brave">
<img src="https://neko.m1k1o.net/img/icons/brave.svg" title="ghcr.io/m1k1o/neko/brave" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#vivaldi">
<img src="https://neko.m1k1o.net/img/icons/vivaldi.svg" title="ghcr.io/m1k1o/neko/vivaldi" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#opera">
<img src="https://neko.m1k1o.net/img/icons/opera.svg" title="ghcr.io/m1k1o/neko/opera" width="60" height="auto"/>
</a>
... see [all available images](https://neko.m1k1o.net/docs/v3/installation/docker-images)
</div>
### Other programs
### Other applications
<div align="center">
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/remmina.png" title="m1k1o/neko:remmina" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/vlc.svg" title="m1k1o/neko:vlc" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/xfce.svg" title="m1k1o/neko:xfce" width="60" height="auto"/>
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/icons/kde.svg" title="m1k1o/neko:kde" width="60" height="auto"/>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#xfce">
<img src="https://neko.m1k1o.net/img/icons/xfce.svg" title="ghcr.io/m1k1o/neko/xfce" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#kde">
<img src="https://neko.m1k1o.net/img/icons/kde.svg" title="ghcr.io/m1k1o/neko/kde" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#remmina">
<img src="https://neko.m1k1o.net/img/icons/remmina.svg" title="ghcr.io/m1k1o/neko/remmina" width="60" height="auto"/>
</a>
<a href="https://neko.m1k1o.net/docs/v3/installation/docker-images#vlc">
<img src="https://neko.m1k1o.net/img/icons/vlc.svg" title="ghcr.io/m1k1o/neko/vlc" width="60" height="auto"/>
</a>
... others in <a href="https://github.com/m1k1o/neko-apps">m1k1o/neko-apps</a>
</div>
### Features
* Text Chat (With basic markdown support, discord flavor)
* Admin users (Kick, Ban & Force Give/Release Controls, Lock room)
* Clipboard synchronization (on [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText))
* Emote overlay
* Ignore user (chat and emotes)
* Persistent settings
* Automatic Login with custom url args. (add `?usr=<your-user-name>&pwd=<room-pass>` to the url.)
* Broadcasting room content using RTMP (to e.g. twitch or youtube...)
* Bidirectional file transfer (if enabled)
<div align="center">
With `NEKO_FILE_TRANSFER_ENABLED=true`:
<img src="https://raw.githubusercontent.com/m1k1o/neko/master/docs/_media/file-transfer.gif" width="650" height="auto"/>
</div>
### Why n.eko?
### Why neko?
I like cats 🐱 (`Neko` is the Japanese word for cat), I'm a weeb/nerd.
@ -131,28 +147,26 @@ I like cats 🐱 (`Neko` is the Japanese word for cat), I'm a weeb/nerd.
## Multiple rooms
For n.eko room management software, visit [neko-rooms](https://github.com/m1k1o/neko-rooms).
For neko room management software, visit [neko-rooms](https://github.com/m1k1o/neko-rooms).
It also offers zero-knowledge [installation script (with HTTPS and Traefik)](https://github.com/m1k1o/neko-rooms/#zero-knowledge-installation-with-https-and-traefik).
It also offers [Zero-knowledge installation (with HTTPS)](https://github.com/m1k1o/neko-rooms/?tab=readme-ov-file#zero-knowledge-installation-with-https).
## Documentation
* [Getting Started](https://neko.m1k1o.net/#/getting-started/)
* [Quick Start](https://neko.m1k1o.net/#/getting-started/quick-start)
* [Examples](https://neko.m1k1o.net/#/getting-started/examples)
* [Reverse Proxy](https://neko.m1k1o.net/#/getting-started/reverse-proxy)
* [Configuration](https://neko.m1k1o.net/#/getting-started/configuration)
* [Troubleshooting](https://neko.m1k1o.net/#/getting-started/troubleshooting)
* [Mobile Support](https://neko.m1k1o.net/#/mobile-support)
* [Contributing](https://neko.m1k1o.net/#/contributing)
* [Non Goals](https://neko.m1k1o.net/#/non-goals)
* [Technologies](https://neko.m1k1o.net/#/technologies)
* [Changelog](https://neko.m1k1o.net/#/changelog)
Full documentation is available at [neko.m1k1o.net](https://neko.m1k1o.net/). Key sections include:
## How to contribute? How to build?
- [Migration from V2](https://neko.m1k1o.net/docs/v3/migration-from-v2)
- [Getting Started](https://neko.m1k1o.net/docs/v3/quick-start)
- [Installation](https://neko.m1k1o.net/docs/v3/installation)
- [Examples](https://neko.m1k1o.net/docs/v3/installation/examples)
- [Configuration](https://neko.m1k1o.net/docs/v3/configuration)
- [Frequently Asked Questions](https://neko.m1k1o.net/docs/v3/faq)
- [Troubleshooting](https://neko.m1k1o.net/docs/v3/troubleshooting)
Navigate to [.docker](.docker) folder for further information.
## How to Contribute
Contributions are welcome! Check the [Contributing Guide](https://neko.m1k1o.net/contributing) for details.
## Support
If you want to support this project, you can do it [here](https://github.com/sponsors/m1k1o).
If you find Neko useful, consider supporting the project via [GitHub Sponsors](https://github.com/sponsors/m1k1o).

19
SECURITY.md Normal file
View file

@ -0,0 +1,19 @@
# Security Policy
## Reporting a Vulnerability
If there are any vulnerabilities in **m1k1o/neko**, don't hesitate to _report them_.
1. Send an email to `security@m1k1o.net`.
2. Describe the vulnerability.
If you have a fix, that is most welcome -- please attach or summarize it in your message!
3. We will evaluate the vulnerability and, if necessary, release a fix or mitigating steps to address it. We will contact you to let you know the outcome, and will credit you in the report.
Please **do not disclose the vulnerability publicly** until a fix is released!
4. Once we have either a) published a fix, or b) declined to address the vulnerability for whatever reason, you are free to publicly disclose it.
We appreciate your help in keeping Neko secure.

View file

@ -1,12 +1,13 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends apt-transport-https curl openbox; \
#
# install brave browser
ARCH=$(dpkg --print-architecture); \
curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg; \
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" \
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=${ARCH}] https://brave-browser-apt-release.s3.brave.com/ stable main" \
| tee /etc/apt/sources.list.d/brave-browser-release.list; \
apt-get update; \
apt-get install -y --no-install-recommends brave-browser; \

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:nvidia-base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/nvidia-base:latest
FROM $BASE_IMAGE
RUN set -eux; apt-get update; \

41
apps/chromium/Dockerfile Normal file
View file

@ -0,0 +1,41 @@
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
#
# install neko chromium
RUN set -eux; \
echo "deb http://ftp.de.debian.org/debian bookworm main" >> /etc/apt/sources.list; \
apt-get update; \
apt-get install -y --no-install-recommends chromium chromium-common chromium-sandbox openbox; \
#
# install widevine module (only for amd64)
CHROMIUM_DIR="/usr/lib/chromium"; \
ARCH=$(dpkg --print-architecture); \
if [ "${ARCH}" = "amd64" ]; then \
# https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/chromeos-lacros-arm64-squash-zstd-120.0.6098.0
apt-get install -y --no-install-recommends unzip; \
WIDEVINE_ARCH="x64"; \
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip"; \
mkdir -p "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_${WIDEVINE_ARCH}"; \
unzip -p /tmp/widevine.zip LICENSE.txt > "${CHROMIUM_DIR}/WidevineCdm/LICENSE"; \
unzip -p /tmp/widevine.zip manifest.json > "${CHROMIUM_DIR}/WidevineCdm/manifest.json"; \
unzip -p /tmp/widevine.zip libwidevinecdm.so > "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_${WIDEVINE_ARCH}/libwidevinecdm.so"; \
find "${CHROMIUM_DIR}/WidevineCdm" -type d -exec chmod 0755 '{}' \;; \
find "${CHROMIUM_DIR}/WidevineCdm" -type f -exec chmod 0644 '{}' \;; \
rm /tmp/widevine.zip; \
apt-get --purge autoremove -y unzip; \
else \
echo "Widevine is not supported on ${ARCH}"; \
fi; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/chromium.conf
COPY --chown=neko preferences.json /home/neko/.config/chromium/Default/Preferences
COPY policies.json /etc/chromium/policies/managed/policies.json
COPY openbox.xml /etc/neko/openbox.xml

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/nvidia-base:latest
FROM $BASE_IMAGE
#
@ -14,7 +14,7 @@ RUN set -eux; \
#
# install widevine module
CHROMIUM_DIR="/usr/lib/chromium"; \
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | tail -n 1); \
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-x64.zip"; \
mkdir -p "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_x64"; \
unzip -p /tmp/widevine.zip LICENSE.txt > "${CHROMIUM_DIR}/WidevineCdm/LICENSE"; \

56
apps/firefox/Dockerfile Normal file
View file

@ -0,0 +1,56 @@
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
#
# install firefox
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends openbox; \
ARCH=$(dpkg --print-architecture); \
if [ "${ARCH}" = "armhf" ]; then \
#
# install firefox-esr for armhf
apt-get install -y --no-install-recommends firefox-esr; \
ln -s /usr/lib/firefox-esr /usr/lib/firefox; \
#
# install extensions
mkdir -p /usr/lib/firefox-esr/distribution/extensions; \
wget -O '/usr/lib/firefox-esr/distribution/extensions/uBlock0@raymondhill.net.xpi' https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi; \
wget -O '/usr/lib/firefox-esr/distribution/extensions/sponsorBlocker@ajay.app.xpi' https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi; \
else \
#
# fetch latest release (for amd64 and arm64)
if [ "${ARCH}" = "amd64" ]; then \
SRC_URL="https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US"; \
elif [ "${ARCH}" = "arm64" ]; then \
SRC_URL="https://download.mozilla.org/?product=firefox-latest&os=linux64-aarch64&lang=en-US"; \
fi; \
if [ ! -z "${SRC_URL}" ]; then \
apt-get install -y --no-install-recommends xz-utils libgtk-3-0 libdbus-glib-1-2; \
wget -O /tmp/firefox-setup.tar.xz "${SRC_URL}"; \
mkdir /usr/lib/firefox; \
tar -xvf /tmp/firefox-setup.tar.xz -C /usr/lib; \
rm -f /tmp/firefox-setup.tar.xz; \
ln -s /usr/lib/firefox/firefox /usr/bin/firefox; \
apt-get --purge autoremove -y xz-utils; \
else \
echo "Unsupported architecture: ${ARCH}"; \
exit 1; \
fi; \
fi; \
#
# create a profile directory
mkdir -p /home/neko/.mozilla/firefox/profile.default/extensions; \
chown -R neko:neko /home/neko/.mozilla/firefox/profile.default; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/firefox.conf
COPY neko.js /usr/lib/firefox/mozilla.cfg
COPY autoconfig.js /usr/lib/firefox/defaults/pref/autoconfig.js
COPY policies.json /usr/lib/firefox/distribution/policies.json
COPY --chown=neko profiles.ini /home/neko/.mozilla/firefox/profiles.ini
COPY openbox.xml /etc/neko/openbox.xml

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/nvidia-base:latest
FROM $BASE_IMAGE
ARG SRC_URL="https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US"
@ -7,13 +7,13 @@ ARG SRC_URL="https://download.mozilla.org/?product=firefox-latest&os=linux64&lan
# install firefox
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends openbox \
xz-utils bzip2 libgtk-3-0 libdbus-glib-1-2; \
xz-utils libgtk-3-0 libdbus-glib-1-2; \
#
# fetch latest release
wget -O /tmp/firefox-setup.tar.bz2 "${SRC_URL}"; \
wget -O /tmp/firefox-setup.tar.xz "${SRC_URL}"; \
mkdir /usr/lib/firefox; \
tar -xjf /tmp/firefox-setup.tar.bz2 -C /usr/lib; \
rm -f /tmp/firefox-setup.tar.bz2; \
tar -xvf /tmp/firefox-setup.tar.xz -C /usr/lib; \
rm -f /tmp/firefox-setup.tar.xz; \
ln -s /usr/lib/firefox/firefox /usr/bin/firefox; \
#
# create a profile directory
@ -21,13 +21,13 @@ RUN set -eux; apt-get update; \
chown -R neko:neko /home/neko/.mozilla/firefox/profile.default; \
#
# clean up
apt-get --purge autoremove -y xz-utils bzip2; \
apt-get --purge autoremove -y xz-utils; \
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
#
# copy configuation files
COPY supervisord.conf /etc/neko/supervisord/firefox.conf
COPY supervisord.nvidia.conf /etc/neko/supervisord/firefox.conf
COPY neko.js /usr/lib/firefox/mozilla.cfg
COPY autoconfig.js /usr/lib/firefox/defaults/pref/autoconfig.js
COPY policies.json /usr/lib/firefox/distribution/policies.json

View file

@ -15,8 +15,8 @@ lockPref("plugins.hide_infobar_for_missing_plugin", true);
lockPref("profile.allow_automigration", false);
lockPref("signon.prefillForms", false);
lockPref("signon.rememberSignons", false);
lockPref("xpinstall.enabled", false);
lockPref("xpinstall.whitelist.required", true);
//lockPref("xpinstall.enabled", false);
//lockPref("xpinstall.whitelist.required", true);
lockPref("browser.download.manager.retention", 0);
lockPref("browser.download.folderList", 2);
lockPref("browser.download.forbid_open_with", true);

130
apps/firefox/policies.json Normal file
View file

@ -0,0 +1,130 @@
{
"policies": {
"BlockAboutAddons": false,
"BlockAboutConfig": true,
"BlockAboutProfiles": true,
"BlockAboutSupport": true,
"Bookmarks": [
{
"Title": "IPLeak",
"URL": "https://ipleak.net/",
"Favicon": "https://ipleak.net/favicon.ico",
"Folder": "Pages",
"Placement": "toolbar"
},
{
"Title": "YouTube",
"URL": "https://www.youtube.com/",
"Favicon": "https://www.youtube.com/favicon.ico",
"Folder": "Pages",
"Placement": "toolbar"
},
{
"Title": "Google",
"URL": "https://www.google.com/",
"Favicon": "https://www.google.com/favicon.ico",
"Folder": "Pages",
"Placement": "toolbar"
}
],
"CaptivePortal": false,
"DisableAppUpdate": true,
"DisableBuiltinPDFViewer": true,
"DisableDeveloperTools": false,
"DisableFeedbackCommands": true,
"DisableFirefoxAccounts": true,
"DisableFirefoxScreenshots": true,
"DisableFirefoxStudies": true,
"DisableForgetButton": true,
"DisableMasterPasswordCreation": true,
"DisablePocket": true,
"DisablePrivateBrowsing": true,
"DisableProfileImport": true,
"DisableProfileRefresh": true,
"DisableSafeMode": true,
"DisableSetDesktopBackground": true,
"DisableSystemAddonUpdate": true,
"DisableTelemetry": true,
"DisplayBookmarksToolbar": false,
"DontCheckDefaultBrowser": true,
"EnableTrackingProtection": {
"Cryptomining": true,
"Fingerprinting": true,
"Value": true
},
"ExtensionSettings": {
"*": {
"installation_mode": "blocked"
},
"sponsorBlocker@ajay.app": {
"install_url": "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi",
"installation_mode": "force_installed"
},
"uBlock0@raymondhill.net": {
"install_url": "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi",
"installation_mode": "force_installed"
}
},
"ExtensionUpdate": false,
"FirefoxHome": {
"Highlights": false,
"Pocket": false,
"Search": true,
"Snippets": false,
"TopSites": true
},
"FlashPlugin": {},
"HardwareAcceleration": false,
"Homepage": {
"Additional": [],
"StartPage": "home"
},
"NewTabPage": true,
"NoDefaultBookmarks": true,
"OfferToSaveLogins": false,
"OfferToSaveLoginsDefault": false,
"OverrideFirstRunPage": "",
"OverridePostUpdatePage": "",
"PasswordManagerEnabled": false,
"Permissions": {
"Camera": {
"BlockNewRequests": true
},
"Location": {
"BlockNewRequests": true
},
"Microphone": {
"BlockNewRequests": true
},
"Notifications": {
"BlockNewRequests": true
}
},
"Preferences": {
"browser.tabs.warnOnClose": false,
"browser.urlbar.suggest.bookmark": false,
"browser.urlbar.suggest.history": false,
"browser.urlbar.suggest.openpage": false,
"datareporting.policy.dataSubmissionPolicyBypassNotification": true,
"dom.disable_window_flip": true,
"dom.disable_window_move_resize": true,
"dom.event.contextmenu.enabled": true,
"extensions.getAddons.showPane": false,
"places.history.enabled": false,
"privacy.file_unique_origin": true,
"ui.key.menuAccessKeyFocuses": false,
"browser.tabs.allowTabDetach": false
},
"PromptForDownloadLocation": false,
"SanitizeOnShutdown": {
"Cache": true,
"Cookies": true,
"Downloads": true,
"FormData": true,
"History": true,
"OfflineApps": true,
"Sessions": true,
"SiteSettings": true
}
}
}

View file

@ -0,0 +1,28 @@
[program:firefox]
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
command=/bin/entrypoint.sh /usr/bin/firefox
--no-remote
-P default
--display=%(ENV_DISPLAY)s
-setDefaultBrowser
-width 1280
-height 720
stopsignal=INT
autorestart=true
priority=800
user=%(ENV_USER)s
stdout_logfile=/var/log/neko/firefox.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true
[program:openbox]
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
command=/usr/bin/openbox --config-file /etc/neko/openbox.xml
autorestart=true
priority=300
user=%(ENV_USER)s
stdout_logfile=/var/log/neko/openbox.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
redirect_stderr=true

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG SRC_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"

View file

@ -1,6 +1,10 @@
ARG BASE_IMAGE=m1k1o/neko:nvidia-base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/nvidia-base:latest
FROM $BASE_IMAGE
# latest working version with EGL: 111.0.5563.146, revert when resolved
# 112.0.5615.49 fails: https://github.com/VirtualGL/virtualgl/issues/229
# google does not provide a direct link to the deb file anymore
# ARG SRC_URL="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_111.0.5563.146-1_amd64.deb"
ARG SRC_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG API_URL="https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/"
@ -8,7 +8,7 @@ ARG API_URL="https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edg
RUN set -eux; apt-get update; \
#
# fetch latest release
SRC_URL="${API_URL}$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"]*\).*/\1/p' | tail -1)"; \
SRC_URL="${API_URL}$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"]*\).*/\1/p' | sort --version-sort | tail -1)"; \
wget -O /tmp/microsoft-edge.deb "${SRC_URL}"; \
apt-get install -y --no-install-recommends openbox /tmp/microsoft-edge.deb; \
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG API_URL="https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/"
@ -8,7 +8,7 @@ ARG API_URL="https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edg
RUN set -eux; apt-get update; \
#
# fetch latest release
SRC_URL="${API_URL}$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"]*\).*/\1/p' | tail -1)"; \
SRC_URL="${API_URL}$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"]*\).*/\1/p' | sort --version-sort | tail -1)"; \
wget -O /tmp/microsoft-edge.deb "${SRC_URL}"; \
apt-get install -y --no-install-recommends openbox /tmp/microsoft-edge.deb; \
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG API_URL="https://download5.operacdn.com/pub/opera/desktop/"
@ -9,7 +9,7 @@ ARG LIBFFMPEG_API_URL="https://api.github.com/repos/nwjs-ffmpeg-prebuilt/nwjs-ff
RUN set -eux; apt-get update; \
#
# fetch latest release
VERSION="$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"/]*\).*/\1/p' | tail -1)"; \
VERSION="$(wget -O - "${API_URL}" 2>/dev/null | sed -n 's/.*href="\([^"/]*\).*/\1/p' | sort --version-sort | tail -1)"; \
wget -O /tmp/opera.deb "${API_URL}${VERSION}/linux/opera-stable_${VERSION}_amd64.deb"; \
apt-get install -y --no-install-recommends openbox jq unzip /tmp/opera.deb; \
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
# install remmina

42
apps/remmina/run-remmina.sh Executable file
View file

@ -0,0 +1,42 @@
#!/bin/bash
err() {
echo "ERROR: $*" >&2
exit 1
}
profile_dir="/home/neko/.local/share/remmina"
if [[ -n "$REMMINA_PROFILE" ]]; then
profile=${REMMINA_PROFILE%.remmina}.remmina
file=${profile##/*/}
[[ "$file" = "$profile" ]] && profile="$profile_dir"/"$file"
[[ -f "$profile" ]] || err "Connection profile $profile not found"
echo "Running remmina with connection profile $profile"
exec remmina -c "$profile"
fi
if [[ ! -z "$REMMINA_URL" ]]; then
readarray -t arr < <( echo -n "$REMMINA_URL" | perl -pe 's|^(\w+)\:\/\/(?:([^:]+)(?::([^@]+))?@)?(.*)$|\1\n\2\n\3\n\4|' )
proto="${arr[0]}"
user="${arr[1]}"
pw="${arr[2]}"
host="${arr[3]}"
echo "Parsed url in 'REMMINA_URL': proto:$proto username:$user host:$host"
[[ "$proto" != "vnc" && "$proto" != "rdp" && "$proto" != "spice" ]] && err "Unsupported protocol $proto in connection url 'REMMINA_URL'"
profile="$profile_dir"/"$proto".remmina
remmina --set-option username="$user" --update-profile "$profile"
remmina --set-option password="$pw" --update-profile "$profile"
remmina --set-option server="$host" --update-profile "$profile"
# remmina --set-option window_maximize=1 --update-profile "$profile"
# remmina --set-option scale=1 --update-profile "$profile"
echo "Running remmina with URL $REMMINA_URL"
exec remmina -c "$profile"
fi
echo "Running remmina without connection profile"
exec remmina

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
#

View file

@ -1,4 +1,4 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG API_URL="https://api.github.com/repos/macchrome/linchrome/releases/latest"
@ -21,7 +21,7 @@ RUN set -eux; apt-get update; \
chmod 4755 /usr/lib/chromium/chrome-sandbox; \
#
# install widevine module
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | tail -n 1); \
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-x64.zip"; \
unzip -p /tmp/widevine.zip libwidevinecdm.so > /usr/lib/chromium/libwidevinecdm.so; \
chmod 644 /usr/lib/chromium/libwidevinecdm.so; \
@ -43,6 +43,7 @@ RUN set -eux; apt-get update; \
EXT_VERSION="$(unzip -p "${EXT_PATH}" manifest.json 2>/dev/null | jq -r ".version")"; \
echo -e "{\n \"external_crx\": \"${EXT_PATH}\",\n \"external_version\": \"${EXT_VERSION}\"\n}" > "${EXTENSIONS_DIR}"/"${EXT_ID}".json; \
done; \
#
# clean up
apt-get --purge autoremove -y xz-utils jq; \
apt-get clean -y; \

View file

@ -1,17 +1,13 @@
ARG BASE_IMAGE=m1k1o/neko:base
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
FROM $BASE_IMAGE
ARG VIVALDI_VERSION="5.3.2679.34-1"
# TODO: Get chromium version from vivaldi
ARG CHROMIUM_VERSION="102.0.5005.72"
#
# install vivaldi
SHELL ["/bin/bash", "-c"]
RUN set -eux; apt-get update; \
wget -O /tmp/vivaldi.deb "https://downloads.vivaldi.com/stable/vivaldi-stable_${VIVALDI_VERSION}_amd64.deb"; \
ARCH=$(dpkg --print-architecture); \
wget -O /tmp/vivaldi.deb "https://downloads.vivaldi.com/stable/vivaldi-stable_${ARCH}.deb"; \
apt-get install -y --no-install-recommends wget unzip xz-utils jq openbox /tmp/vivaldi.deb; \
/opt/vivaldi/update-ffmpeg; \
#
# install latest version of uBlock Origin and SponsorBlock for YouTube
EXTENSIONS_DIR="/usr/share/chromium/extensions"; \
@ -22,7 +18,7 @@ RUN set -eux; apt-get update; \
mkdir -p "${EXTENSIONS_DIR}"; \
for EXT_ID in "${EXTENSIONS[@]}"; \
do \
EXT_URL="https://clients2.google.com/service/update2/crx?response=redirect&nacl_arch=x86-64&prodversion=${CHROMIUM_VERSION}&acceptformat=crx2,crx3&x=id%3D${EXT_ID}%26installsource%3Dondemand%26uc"; \
EXT_URL="https://clients2.google.com/service/update2/crx?response=redirect&prodversion=100&acceptformat=crx2,crx3&x=id%3D${EXT_ID}%26installsource%3Dondemand%26uc"; \
EXT_PATH="${EXTENSIONS_DIR}/${EXT_ID}.crx"; \
wget -O "${EXT_PATH}" "${EXT_URL}"; \
EXT_VERSION="$(unzip -p "${EXT_PATH}" manifest.json 2>/dev/null | jq -r ".version")"; \

Some files were not shown because too many files have changed in this diff Show more