mirror of
https://github.com/m1k1o/neko.git
synced 2025-06-10 23:03:05 +02:00
fix links on webpage.
This commit is contained in:
parent
7f2dd28f99
commit
5e04c31222
28 changed files with 362 additions and 314 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
|
|
||||||
Neko uses the [Viper](https://github.com/spf13/viper) library to manage configuration. The configuration file is optional and is not required for Neko to run. If a configuration file is present, it will be read in and merged with the default configuration values.
|
Neko uses the [Viper](https://github.com/spf13/viper) library to manage configuration. The configuration file is optional and is not required for Neko to run. If a configuration file is present, it will be read in and merged with the default configuration values.
|
||||||
|
@ -32,7 +34,7 @@ The final value of `server.bind` will be `127.0.0.1:8083`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Configuration File
|
## Configuration File {#file}
|
||||||
|
|
||||||
You have multiple ways to specify the configuration file for the neko server:
|
You have multiple ways to specify the configuration file for the neko server:
|
||||||
|
|
||||||
|
@ -285,7 +287,7 @@ import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Room Configuration
|
## Room Configuration {#session}
|
||||||
|
|
||||||
This is the initial configuration of the room that can be modified by an admin in real-time.
|
This is the initial configuration of the room that can be modified by an admin in real-time.
|
||||||
|
|
||||||
|
@ -301,16 +303,16 @@ session:
|
||||||
heartbeat_interval: 120
|
heartbeat_interval: 120
|
||||||
```
|
```
|
||||||
|
|
||||||
- `private_mode` whether private mode is enabled, users do not receive the room video or audio.
|
- <Def id="session.private_mode" /> whether private mode is enabled, users do not receive the room video or audio.
|
||||||
- `locked_logins` whether logins are locked for users, admins can still login.
|
- <Def id="session.locked_logins" /> whether logins are locked for users, admins can still login.
|
||||||
- `locked_controls` whether controls are locked for users, admins can still control.
|
- <Def id="session.locked_controls" /> whether controls are locked for users, admins can still control.
|
||||||
- `control_protection` users can gain control only if at least one admin is in the room.
|
- <Def id="session.control_protection" /> users can gain control only if at least one admin is in the room.
|
||||||
- `implicit_hosting` allows switching control implicitly without the need for explicit control request before
|
- <Def id="session.implicit_hosting" /> allows switching control implicitly without the need for explicit control request before
|
||||||
- `inactive_cursors` whether to show inactive cursors server-wide (only for users that have it enabled in their profile)
|
- <Def id="session.inactive_cursors" /> whether to show inactive cursors server-wide (only for users that have it enabled in their profile)
|
||||||
- `merciful_reconnect` whether to allow reconnecting to the websocket even if the previous connection was not closed. This means that a new login can kick out the previous one.
|
- <Def id="session.merciful_reconnect" /> whether to allow reconnecting to the websocket even if the previous connection was not closed. This means that a new login can kick out the previous one.
|
||||||
- `heartbeat_interval` interval in seconds for sending a heartbeat message to the server. This is used to keep the connection alive and to detect when the connection is lost.
|
- <Def id="session.heartbeat_interval" /> interval in seconds for sending a heartbeat message to the server. This is used to keep the connection alive and to detect when the connection is lost.
|
||||||
|
|
||||||
## Server Configuration
|
## Server Configuration {#server}
|
||||||
|
|
||||||
This is the configuration of the neko server.
|
This is the configuration of the neko server.
|
||||||
|
|
||||||
|
@ -327,19 +329,19 @@ server:
|
||||||
static: "/var/www/neko"
|
static: "/var/www/neko"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `bind` address/port/socket to serve neko. For docker you might want to bind to `0.0.0.0` to allow connections from outside the container.
|
- <Def id="server.bind" /> address/port/socket to serve neko. For docker you might want to bind to `0.0.0.0` to allow connections from outside the container.
|
||||||
- `cert` and `key` paths to the SSL cert and key used to secure the neko server. If both are empty, the server will run in plain HTTP.
|
- <Def id="server.cert" /> and <Def id="server.key" /> paths to the SSL cert and key used to secure the neko server. If both are empty, the server will run in plain HTTP.
|
||||||
- `cors` is a list of allowed origins for CORS.
|
- <Def id="server.cors" /> is a list of allowed origins for CORS.
|
||||||
- If empty, CORS is disabled, and only same-origin requests are allowed.
|
- If empty, CORS is disabled, and only same-origin requests are allowed.
|
||||||
- If `*` is present, all origins are allowed. Neko will respond always with the requested origin, not with `*` since [credentials are not allowed with wildcard](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials).
|
- If `*` is present, all origins are allowed. Neko will respond always with the requested origin, not with `*` since [credentials are not allowed with wildcard](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials).
|
||||||
- If a list of origins is present, only those origins are allowed for CORS.
|
- If a list of origins is present, only those origins are allowed for CORS.
|
||||||
- `metrics` when true, [prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) metrics are available at `/metrics`.
|
- <Def id="server.metrics" /> when true, [prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) metrics are available at `/metrics`.
|
||||||
- `path_prefix` is the prefix for all HTTP requests. This is useful when running neko behind a reverse proxy and you want to serve neko under a subpath, e.g. `/neko`.
|
- <Def id="server.path_prefix" /> is the prefix for all HTTP requests. This is useful when running neko behind a reverse proxy and you want to serve neko under a subpath, e.g. `/neko`.
|
||||||
- `pprof` when true, the [pprof](https://golang.org/pkg/net/http/pprof/) endpoint is available at `/debug/pprof` for debugging and profiling. This should be disabled in production.
|
- <Def id="server.pprof" /> when true, the [pprof](https://golang.org/pkg/net/http/pprof/) endpoint is available at `/debug/pprof` for debugging and profiling. This should be disabled in production.
|
||||||
- `proxy` when true, neko will trust the `X-Forwarded-For` and `X-Real-IP` headers from the reverse proxy. Make sure your reverse proxy is configured to set these headers and never trust them when not behind a reverse proxy.
|
- <Def id="server.proxy" /> when true, neko will trust the `X-Forwarded-For` and `X-Real-IP` headers from the reverse proxy. Make sure your reverse proxy is configured to set these headers and never trust them when not behind a reverse proxy. See [Reverse Proxy Setup](/docs/v3/reverse-proxy-setup) for more information.
|
||||||
- `static` path to the directory containing the neko client files to serve. This is useful if you want to serve the client files on the same domain as the server.
|
- <Def id="server.static" /> path to the directory containing the neko client files to serve. This is useful if you want to serve the client files on the same domain as the server.
|
||||||
|
|
||||||
## Logging Configuration
|
## Logging Configuration {#log}
|
||||||
|
|
||||||
This is the configuration of the logging system.
|
This is the configuration of the logging system.
|
||||||
|
|
||||||
|
@ -352,17 +354,17 @@ log:
|
||||||
time: "unix"
|
time: "unix"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `dir` directory to store logs. If empty, logs are written to stdout. This is useful when running neko in a container.
|
- <Def id="log.dir" /> directory to store logs. If empty, logs are written to stdout. This is useful when running neko in a container.
|
||||||
- `json` when true, logs are written in JSON format.
|
- <Def id="log.json" /> when true, logs are written in JSON format.
|
||||||
- `level` log level to set. Available levels are `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `panic`, and `disabled`.
|
- <Def id="log.level" /> log level to set. Available levels are `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `panic`, and `disabled`.
|
||||||
- `nocolor` when true, ANSI colors are disabled in non-JSON output. Accepts as well [`NO_COLOR` environment variable](https://no-color.org/).
|
- <Def id="log.nocolor" /> when true, ANSI colors are disabled in non-JSON output. Accepts as well [`NO_COLOR` environment variable](https://no-color.org/).
|
||||||
- `time` time format used in logs. Available formats are `unix`, `unixms`, and `unixmicro`.
|
- <Def id="log.time" /> time format used in logs. Available formats are `unix`, `unixms`, and `unixmicro`.
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
Shortcut environment variable to enable DEBUG mode: `NEKO_DEBUG=true`
|
Shortcut environment variable to enable DEBUG mode: `NEKO_DEBUG=true`
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Full Configuration Reference
|
## Full Configuration Reference {#full}
|
||||||
|
|
||||||
Here is a full configuration with default values as shown in the help command. Please refer to the sub-sections for more details.
|
Here is a full configuration with default values as shown in the help command. Please refer to the sub-sections for more details.
|
||||||
|
|
||||||
|
@ -371,7 +373,7 @@ import configOptions from './help.json';
|
||||||
|
|
||||||
<Configuration configOptions={configOptions} />
|
<Configuration configOptions={configOptions} />
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps {#next}
|
||||||
|
|
||||||
import DocCardList from '@theme/DocCardList';
|
import DocCardList from '@theme/DocCardList';
|
||||||
|
|
|
@ -1,32 +1,33 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 1
|
|
||||||
description: Configuration related to the Authentication and Sessions in Neko.
|
description: Configuration related to the Authentication and Sessions in Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
|
|
||||||
Authentication is split into two modules:
|
Authentication is split into two modules:
|
||||||
|
|
||||||
- **[Member Provider](#member-providers)** - handles authentication and authorization of users, can be used to authenticate users against a database, LDAP, or any other system.
|
- **[Member Provider](#member)** - handles authentication and authorization of users, can be used to authenticate users against a database, LDAP, or any other system.
|
||||||
- **[Session Provider](#session-provider)** - handles session management, after the module authenticates the user, it creates a session and handles the session lifecycle.
|
- **[Session Provider](#session)** - handles session management, after the module authenticates the user, it creates a session and handles the session lifecycle.
|
||||||
|
|
||||||
## Member Profile
|
## Member Profile {#profile}
|
||||||
|
|
||||||
A member profile is a structure that describes the user and what the user is allowed to do in the system.
|
A member profile is a structure that describes the user and what the user is allowed to do in the system.
|
||||||
|
|
||||||
| Field | Description | Type |
|
| Field | Description | Type |
|
||||||
|----------------------------|-------------|------|
|
|----------------------------|-------------|------|
|
||||||
| `name` | User's name as shown in the UI, must not be unique within the system (not used as an identifier). | string |
|
| <Def id="profile.name" /> | User's name as shown in the UI, must not be unique within the system (not used as an identifier). | string |
|
||||||
| `is_admin` | Whether the user can perform administrative tasks that include managing users, sessions, and settings. | boolean |
|
| <Def id="profile.is_admin" /> | Whether the user can perform administrative tasks that include managing users, sessions, and settings. | boolean |
|
||||||
| `can_login` | Whether the user can log in to the system and use the HTTP API. | boolean |
|
| <Def id="profile.can_login" /> | Whether the user can log in to the system and use the HTTP API. | boolean |
|
||||||
| `can_connect` | Whether the user can connect to the room using the WebSocket API (needs `can_login` to be enabled). | boolean |
|
| <Def id="profile.can_connect" /> | Whether the user can connect to the room using the WebSocket API (needs <Opt id="profile.can_login" /> to be enabled). | boolean |
|
||||||
| `can_watch` | Whether the user can connect to the WebRTC stream and watch the room's audio and video (needs `can_connect` to be enabled). | boolean |
|
| <Def id="profile.can_watch" /> | Whether the user can connect to the WebRTC stream and watch the room's audio and video (needs <Opt id="profile.can_connect" /> to be enabled). | boolean |
|
||||||
| `can_host` | Whether the user can grab control of the room and control the mouse and keyboard. | boolean |
|
| <Def id="profile.can_host" /> | Whether the user can grab control of the room and control the mouse and keyboard. | boolean |
|
||||||
| `can_share_media` | Whether the user can share their webcam and microphone with the room. | boolean |
|
| <Def id="profile.can_share_media" /> | Whether the user can share their webcam and microphone with the room. | boolean |
|
||||||
| `can_access_clipboard` | Whether the user can read and write to the room's clipboard. | boolean |
|
| <Def id="profile.can_access_clipboard" /> | Whether the user can read and write to the room's clipboard. | boolean |
|
||||||
| `sends_inactive_cursor` | Whether the user sends the cursor position even when the user is not hosting the room, this is used to show the cursor of the user to other users. | boolean |
|
| <Def id="profile.sends_inactive_cursor" /> | Whether the user sends the cursor position even when the user is not hosting the room, this is used to show the cursor of the user to other users. | boolean |
|
||||||
| `can_see_inactive_cursors` | Whether the user can see the cursor of other users even when they are not hosting the room. | boolean |
|
| <Def id="profile.can_see_inactive_cursors" /> | Whether the user can see the cursor of other users even when they are not hosting the room. | boolean |
|
||||||
| `plugins` | A map of plugin names and their configuration, plugins can use this to store user-specific settings, see the [Plugins Configuration](/docs/v3/reference/configuration/plugins) for more information. | object |
|
| <Def id="profile.plugins" /> | A map of plugin names and their configuration, plugins can use this to store user-specific settings, see the [Plugins Configuration](/docs/v3/configuration/plugins) for more information. | object |
|
||||||
|
|
||||||
import Tabs from '@theme/Tabs';
|
import Tabs from '@theme/Tabs';
|
||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
||||||
|
@ -73,11 +74,11 @@ import TabItem from '@theme/TabItem';
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## Member Providers
|
## Member Providers {#member}
|
||||||
|
|
||||||
Member providers are responsible for deciding whether given credentials are valid or not. This validation can either be done against a local database or an external system.
|
Member providers are responsible for deciding whether given credentials are valid or not. This validation can either be done against a local database or an external system.
|
||||||
|
|
||||||
### Multi-User Provider
|
### Multi-User Provider {#member.multiuser}
|
||||||
|
|
||||||
This is the **default provider** that works exactly like the authentication used to work in v2 of neko.
|
This is the **default provider** that works exactly like the authentication used to work in v2 of neko.
|
||||||
|
|
||||||
|
@ -156,7 +157,7 @@ environment:
|
||||||
```
|
```
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### File Provider
|
### File Provider {#member.file}
|
||||||
|
|
||||||
This provider reads the user's credentials from a file. It is useful for small deployments where you don't want to set up a database or LDAP server and still want to have persistent users.
|
This provider reads the user's credentials from a file. It is useful for small deployments where you don't want to set up a database or LDAP server and still want to have persistent users.
|
||||||
|
|
||||||
|
@ -234,7 +235,7 @@ You can leave the file empty and add users later using the HTTP API.
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### Object Provider
|
### Object Provider {#member.object}
|
||||||
|
|
||||||
This provider is the same as the file provider, but it saves the users only in memory. That means that the users are lost when the server is restarted. However, the default users can be set in the configuration file. The difference from the multi-user provider is that the users are not generated on demand and we define exactly which users with their passwords and profiles are allowed to log in. They cannot be logged in twice with the same username.
|
This provider is the same as the file provider, but it saves the users only in memory. That means that the users are lost when the server is restarted. However, the default users can be set in the configuration file. The difference from the multi-user provider is that the users are not generated on demand and we define exactly which users with their passwords and profiles are allowed to log in. They cannot be logged in twice with the same username.
|
||||||
|
|
||||||
|
@ -291,7 +292,7 @@ member:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### No-Auth Provider
|
### No-Auth Provider {#member.noauth}
|
||||||
|
|
||||||
This provider allows any user to log in without any authentication. It is useful for testing and development purposes.
|
This provider allows any user to log in without any authentication. It is useful for testing and development purposes.
|
||||||
|
|
||||||
|
@ -304,7 +305,7 @@ member:
|
||||||
Do not use this provider in production environments unless you know exactly what you are doing. It allows anyone to log in and control neko as an admin.
|
Do not use this provider in production environments unless you know exactly what you are doing. It allows anyone to log in and control neko as an admin.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Session Provider
|
## Session Provider {#session}
|
||||||
|
|
||||||
Currently, there are only two providers available for sessions: **memory** and **file**.
|
Currently, there are only two providers available for sessions: **memory** and **file**.
|
||||||
|
|
||||||
|
@ -319,7 +320,7 @@ session:
|
||||||
In the future, we plan to add more session providers, such as Redis, PostgreSQL, etc. So the Configuration Options may change.
|
In the future, we plan to add more session providers, such as Redis, PostgreSQL, etc. So the Configuration Options may change.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## API User
|
## API User {#api_token}
|
||||||
|
|
||||||
The API User is a special user that is used to authenticate the HTTP API requests. It cannot connect to the room, but it can perform administrative tasks. The API User does not have a password but only a token that is used to authenticate the requests. If the token is not set, the API User is disabled.
|
The API User is a special user that is used to authenticate the HTTP API requests. It cannot connect to the room, but it can perform administrative tasks. The API User does not have a password but only a token that is used to authenticate the requests. If the token is not set, the API User is disabled.
|
||||||
|
|
||||||
|
@ -338,9 +339,9 @@ openssl rand -hex 32
|
||||||
```
|
```
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Cookies
|
## Cookies {#session.cookie}
|
||||||
|
|
||||||
The authentication between the client and the server can be done using cookies or the `Authorization` header. The cookies are used by default, but you can disable them by setting the `session.cookie.enabled` to `false`.
|
The authentication between the client and the server can be done using cookies or the `Authorization` header. The cookies are used by default, but you can disable them by setting the <Opt id="session.cookie.enabled" /> to `false`.
|
||||||
|
|
||||||
:::warning
|
:::warning
|
||||||
If you disable the cookies, the token will be sent to the client in the login response and saved in local storage. This is less secure than using cookies, as the token **can be stolen using XSS attacks**. Therefore, it is recommended to use cookies.
|
If you disable the cookies, the token will be sent to the client in the login response and saved in local storage. This is less secure than using cookies, as the token **can be stolen using XSS attacks**. Therefore, it is recommended to use cookies.
|
||||||
|
@ -358,12 +359,12 @@ session:
|
||||||
path: ""
|
path: ""
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` - Whether the cookies are enabled or not.
|
- <Def id="session.cookie.enabled" /> - Whether the cookies are enabled or not.
|
||||||
- `name` - Name of the cookie used to store the session.
|
- <Def id="session.cookie.name" /> - Name of the cookie used to store the session.
|
||||||
- `expiration` - Expiration time of the cookie, use [go duration format](https://pkg.go.dev/time#ParseDuration) (e.g., `24h`, `1h30m`, `60m`).
|
- <Def id="session.cookie.expiration" /> - Expiration time of the cookie, use [go duration format](https://pkg.go.dev/time#ParseDuration) (e.g., `24h`, `1h30m`, `60m`).
|
||||||
- `secure` and `http_only` - Ensures that the cookie is only sent over HTTPS and cannot be accessed by JavaScript, see [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#block_access_to_your_cookies) for more information.
|
- <Def id="session.cookie.secure" /> and <Def id="session.cookie.http_only" /> - Ensures that the cookie is only sent over HTTPS and cannot be accessed by JavaScript, see [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#block_access_to_your_cookies) for more information.
|
||||||
- `domain` and `path` - Define where the cookie is valid, see [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#define_where_cookies_are_sent) for more information.
|
- <Def id="session.cookie.domain" /> and <Def id="session.cookie.path" /> - Define where the cookie is valid, see [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#define_where_cookies_are_sent) for more information.
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
The `secure` and `http_only` are set to `true` by default, which means that the cookie is only sent over HTTPS. If you are using HTTP, you should really consider using HTTPS. Only for testing and development purposes should you consider setting it to `false`.
|
The <Opt id="session.cookie.secure" /> and <Opt id="session.cookie.http_only" /> are set to `true` by default, which means that the cookie is only sent over HTTPS. If you are using HTTP, you should really consider using HTTPS. Only for testing and development purposes should you consider setting it to `false`.
|
||||||
:::
|
:::
|
|
@ -1,27 +1,28 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 2
|
|
||||||
description: Configuration related to Gstreamer capture in Neko.
|
description: Configuration related to Gstreamer capture in Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# Audio & Video Capture
|
# Audio & Video Capture
|
||||||
|
|
||||||
This guide will show you how to configure the audio and video capture settings in neko.
|
This guide will show you how to configure the audio and video capture settings in neko.
|
||||||
|
|
||||||
Neko uses [Gstreamer](https://gstreamer.freedesktop.org/) to capture and encode audio and video in the following scenarios:
|
Neko uses [Gstreamer](https://gstreamer.freedesktop.org/) to capture and encode audio and video in the following scenarios:
|
||||||
|
|
||||||
- WebRTC clients use the [Video](#webrtc-video) and [Audio](#webrtc-audio) pipelines to receive the audio and video streams from the server.
|
- WebRTC clients use the [Video](#video) and [Audio](#audio) pipelines to receive the audio and video streams from the server.
|
||||||
- The [Broadcast](#broadcast) feature allows you to broadcast the audio and video to a third-party service using RTMP.
|
- The [Broadcast](#broadcast) feature allows you to broadcast the audio and video to a third-party service using RTMP.
|
||||||
- The WebRTC Fallback mechanism allows you to capture the display in the form of JPEG images and serve them over HTTP using [Screencast](#screencast).
|
- The WebRTC Fallback mechanism allows you to capture the display in the form of JPEG images and serve them over HTTP using [Screencast](#screencast).
|
||||||
- Clients can share their [Webcam](#webcam) and [Microphone](#microphone) with the server using WebRTC.
|
- Clients can share their [Webcam](#webcam) and [Microphone](#microphone) with the server using WebRTC.
|
||||||
|
|
||||||
## WebRTC Video
|
## WebRTC Video {#video}
|
||||||
|
|
||||||
Neko allows you to capture the display and encode it in real-time using Gstreamer. The encoded video is then sent to the client using WebRTC. This allows you to share the display with the client in real-time.
|
Neko allows you to capture the display and encode it in real-time using Gstreamer. The encoded video is then sent to the client using WebRTC. This allows you to share the display with the client in real-time.
|
||||||
|
|
||||||
There can exist multiple video pipelines in neko that are referenced by their unique pipeline id. Each video pipeline can have its own configuration settings and clients can either choose which pipeline they want to use or let neko choose the best pipeline for them.
|
There can exist multiple video pipelines in neko that are referenced by their unique pipeline id. Each video pipeline can have its own configuration settings and clients can either choose which pipeline they want to use or let neko choose the best pipeline for them.
|
||||||
|
|
||||||
:::info Limitation
|
:::info Limitation
|
||||||
All video pipelines must use the same video codec (defined in the `capture.video.codec` setting).
|
All video pipelines must use the same video codec (defined in the <Opt id="video.codec" /> setting).
|
||||||
:::
|
:::
|
||||||
|
|
||||||
The Gstreamer pipeline is started when the first client requests the video stream and is stopped after the last client disconnects.
|
The Gstreamer pipeline is started when the first client requests the video stream and is stopped after the last client disconnects.
|
||||||
|
@ -38,14 +39,14 @@ capture:
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
- `display` is the name of the [X display](https://www.x.org/wiki/) that you want to capture. If not specified, the environment variable `DISPLAY` will be used.
|
- <Def id="video.display" /> is the name of the [X display](https://www.x.org/wiki/) that you want to capture. If not specified, the environment variable `DISPLAY` will be used.
|
||||||
- `codec` available codecs are `vp8`, `vp9`, `av1`, `h264`. [Supported video codecs](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs#supported_video_codecs) are dependent on the WebRTC implementation used by the client, `vp8` and `h264` are supported by all WebRTC implementations.
|
- <Def id="video.codec" /> available codecs are `vp8`, `vp9`, `av1`, `h264`. [Supported video codecs](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs#supported_video_codecs) are dependent on the WebRTC implementation used by the client, `vp8` and `h264` are supported by all WebRTC implementations.
|
||||||
- `ids` is a list of pipeline ids that are defined in the `pipelines` section. The first pipeline in the list will be the default pipeline.
|
- <Def id="video.ids" /> is a list of pipeline ids that are defined in the <Opt id="video.pipelines" /> section. The first pipeline in the list will be the default pipeline.
|
||||||
- `pipelines` is a dictionary of pipeline configurations. Each pipeline configuration is defined by a unique pipeline id. They can be defined in two ways: either by building the pipeline dynamically using [Expression-Driven Configuration](#expression-driven-configuration) or by defining the pipeline using a [Gstreamer Pipeline Description](#gstreamer-pipeline-description).
|
- <Def id="video.pipelines" /> is a dictionary of pipeline configurations. Each pipeline configuration is defined by a unique pipeline id. They can be defined in two ways: either by building the pipeline dynamically using [Expression-Driven Configuration](#video.expression) or by defining the pipeline using a [Gstreamer Pipeline Description](#video.pipeline).
|
||||||
|
|
||||||
### Expression-Driven Configuration
|
### Expression-Driven Configuration {#video.expression}
|
||||||
|
|
||||||
Expression allows you to build the pipeline dynamically based on the current resolution and framerate of the display. Expressions are evaluated using the [gval](https://github.com/PaesslerAG/gval) library. Available variables are `width`, `height`, and `fps` of the display at the time of capture.
|
Expression allows you to build the pipeline dynamically based on the current resolution and framerate of the display. Expressions are evaluated using the [gval](https://github.com/PaesslerAG/gval) library. Available variables are <Opt id="video.pipelines.width" />, <Opt id="video.pipelines.height" />, and <Opt id="video.pipelines.fps" /> of the display at the time of capture.
|
||||||
|
|
||||||
```yaml title="config.yaml"
|
```yaml title="config.yaml"
|
||||||
capture:
|
capture:
|
||||||
|
@ -64,11 +65,11 @@ capture:
|
||||||
show_pointer: true
|
show_pointer: true
|
||||||
```
|
```
|
||||||
|
|
||||||
- `width`, `height`, and `fps` are the expressions that are evaluated to get the stream resolution and framerate. They can be different from the display resolution and framerate if downscaling or upscaling is desired.
|
- <Def id="video.pipelines.width" />, <Def id="video.pipelines.height" />, and <Def id="video.pipelines.fps" /> are the expressions that are evaluated to get the stream resolution and framerate. They can be different from the display resolution and framerate if downscaling or upscaling is desired.
|
||||||
- `gst_prefix` and `gst_suffix` allow you to add custom Gstreamer elements before and after the encoder. Both parameters need to start with `!` and then be followed by the Gstreamer elements.
|
- <Def id="video.pipelines.gst_prefix" /> and <Def id="video.pipelines.gst_suffix" /> allow you to add custom Gstreamer elements before and after the encoder. Both parameters need to start with `!` and then be followed by the Gstreamer elements.
|
||||||
- `gst_encoder` is the name of the Gstreamer encoder element, such as `vp8enc` or `x264enc`.
|
- <Def id="video.pipelines.gst_encoder" /> is the name of the Gstreamer encoder element, such as `vp8enc` or `x264enc`.
|
||||||
- `gst_params` are the parameters that are passed to the encoder element specified in `gst_encoder`.
|
- <Def id="video.pipelines.gst_params" /> are the parameters that are passed to the encoder element specified in <Opt id="video.pipelines.gst_encoder" />.
|
||||||
- `show_pointer` is a boolean value that determines whether the mouse pointer should be captured or not.
|
- <Def id="video.pipelines.show_pointer" /> is a boolean value that determines whether the mouse pointer should be captured or not.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Example pipeline configuration</summary>
|
<summary>Example pipeline configuration</summary>
|
||||||
|
@ -150,9 +151,9 @@ import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### Gstreamer Pipeline Description
|
### Gstreamer Pipeline Description {#video.pipeline}
|
||||||
|
|
||||||
If you want to define the pipeline using a [Gstreamer pipeline description](https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c#pipeline-description), you can do so by setting the `gst_pipeline` parameter.
|
If you want to define the pipeline using a [Gstreamer pipeline description](https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c#pipeline-description), you can do so by setting the <Def id="video.pipelines.gst_pipeline" /> parameter.
|
||||||
|
|
||||||
```yaml title="config.yaml"
|
```yaml title="config.yaml"
|
||||||
capture:
|
capture:
|
||||||
|
@ -251,7 +252,7 @@ See documentation for [ximagesrc](https://gstreamer.freedesktop.org/documentatio
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## WebRTC Audio
|
## WebRTC Audio {#audio}
|
||||||
|
|
||||||
Only one audio pipeline can be defined in neko. The audio pipeline is used to capture and encode audio, similar to the video pipeline. The encoded audio is then sent to the client using WebRTC.
|
Only one audio pipeline can be defined in neko. The audio pipeline is used to capture and encode audio, similar to the video pipeline. The encoded audio is then sent to the client using WebRTC.
|
||||||
|
|
||||||
|
@ -265,9 +266,9 @@ capture:
|
||||||
pipeline: "<gstreamer_pipeline>"
|
pipeline: "<gstreamer_pipeline>"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `device` is the name of the [pulseaudio device](https://wiki.archlinux.org/title/PulseAudio/Examples) that you want to capture. If not specified, the default audio device will be used.
|
- <Def id="audio.device" /> is the name of the [pulseaudio device](https://wiki.archlinux.org/title/PulseAudio/Examples) that you want to capture. If not specified, the default audio device will be used.
|
||||||
- `codec` available codecs are `opus`, `g722`, `pcmu`, `pcma`. [Supported audio codecs](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs#supported_audio_codecs) are dependent on the WebRTC implementation used by the client, `opus` is supported by all WebRTC implementations.
|
- <Def id="audio.codec" /> available codecs are `opus`, `g722`, `pcmu`, `pcma`. [Supported audio codecs](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs#supported_audio_codecs) are dependent on the WebRTC implementation used by the client, `opus` is supported by all WebRTC implementations.
|
||||||
- `pipeline` is the Gstreamer pipeline description that is used to capture and encode audio. You can use `{device}` as a placeholder for the audio device name that will be replaced by the actual device name at runtime.
|
- <Def id="audio.pipeline" /> is the Gstreamer pipeline description that is used to capture and encode audio. You can use `{device}` as a placeholder for the audio device name that will be replaced by the actual device name at runtime.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Example pipeline configuration</summary>
|
<summary>Example pipeline configuration</summary>
|
||||||
|
@ -286,7 +287,7 @@ capture:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Broadcast
|
## Broadcast {#broadcast}
|
||||||
|
|
||||||
Neko allows you to broadcast out-of-the-box the display and audio capture to a third-party service. This can be used to broadcast the display and audio to a streaming service like [Twitch](https://www.twitch.tv/) or [YouTube](https://www.youtube.com/), or to a custom RTMP server like [OBS](https://obsproject.com/), [Nginx RTMP module](https://github.com/arut/nginx-rtmp-module), or [MediaMTX](https://github.com/bluenviron/mediamtx).
|
Neko allows you to broadcast out-of-the-box the display and audio capture to a third-party service. This can be used to broadcast the display and audio to a streaming service like [Twitch](https://www.twitch.tv/) or [YouTube](https://www.youtube.com/), or to a custom RTMP server like [OBS](https://obsproject.com/), [Nginx RTMP module](https://github.com/arut/nginx-rtmp-module), or [MediaMTX](https://github.com/bluenviron/mediamtx).
|
||||||
|
|
||||||
|
@ -303,13 +304,13 @@ capture:
|
||||||
autostart: true
|
autostart: true
|
||||||
```
|
```
|
||||||
|
|
||||||
The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv` container and sent over the `rtmp` protocol. You can change the encoder settings by setting a custom Gstreamer pipeline description in the `pipeline` parameter.
|
The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv` container and sent over the `rtmp` protocol. You can change the encoder settings by setting a custom Gstreamer pipeline description in the <Opt id="broadcast.pipeline" /> parameter.
|
||||||
|
|
||||||
- `audio_bitrate` and `video_bitrate` are the bitrate settings for the default audio and video encoders expressed in kilobits per second.
|
- <Def id="broadcast.audio_bitrate" /> and <Def id="broadcast.video_bitrate" /> are the bitrate settings for the default audio and video encoders expressed in kilobits per second.
|
||||||
- `preset` is the encoding speed preset for the default video encoder. See available presets [here](https://gstreamer.freedesktop.org/documentation/x264/index.html?gi-language=c#GstX264EncPreset).
|
- <Def id="broadcast.preset" /> is the encoding speed preset for the default video encoder. See available presets [here](https://gstreamer.freedesktop.org/documentation/x264/index.html?gi-language=c#GstX264EncPreset).
|
||||||
- `pipeline` when set, encoder settings above are ignored and the custom Gstreamer pipeline description is used. In the pipeline, you can use `{display}`, `{device}` and `{url}` as placeholders for the X display name, pulseaudio audio device name, and broadcast URL respectively.
|
- <Def id="broadcast.pipeline" /> when set, encoder settings above are ignored and the custom Gstreamer pipeline description is used. In the pipeline, you can use `{display}`, `{device}` and `{url}` as placeholders for the X display name, pulseaudio audio device name, and broadcast URL respectively.
|
||||||
- `url` is the URL of the RTMP server where the broadcast will be sent. This can be set later using the API if the URL is not known at the time of configuration or is expected to change.
|
- <Def id="broadcast.url" /> is the URL of the RTMP server where the broadcast will be sent. This can be set later using the API if the URL is not known at the time of configuration or is expected to change.
|
||||||
- `autostart` is a boolean value that determines whether the broadcast should start automatically when neko starts, works only if the URL is set.
|
- <Def id="broadcast.autostart" /> is a boolean value that determines whether the broadcast should start automatically when neko starts, works only if the URL is set.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Example pipeline configuration</summary>
|
<summary>Example pipeline configuration</summary>
|
||||||
|
@ -375,7 +376,7 @@ The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Screencast
|
## Screencast {#screencast}
|
||||||
|
|
||||||
As a fallback mechanism, neko can capture the display in the form of JPEG images and the client can request these images over HTTP. This is useful when the client does not support WebRTC or when the client is not able to establish a WebRTC connection, or there is a temporary issue with the WebRTC connection and the client should not miss the content being shared.
|
As a fallback mechanism, neko can capture the display in the form of JPEG images and the client can request these images over HTTP. This is useful when the client does not support WebRTC or when the client is not able to establish a WebRTC connection, or there is a temporary issue with the WebRTC connection and the client should not miss the content being shared.
|
||||||
|
|
||||||
|
@ -394,10 +395,10 @@ capture:
|
||||||
pipeline: "<gstreamer_pipeline>"
|
pipeline: "<gstreamer_pipeline>"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` is a boolean value that determines whether the screencast is enabled or not.
|
- <Def id="screencast.enabled" /> is a boolean value that determines whether the screencast is enabled or not.
|
||||||
- `rate` is the framerate of the screencast. It is expressed as a fraction of frames per second, for example, `10/1` means 10 frames per second.
|
- <Def id="screencast.rate" /> is the framerate of the screencast. It is expressed as a fraction of frames per second, for example, `10/1` means 10 frames per second.
|
||||||
- `quality` is the quality of the JPEG images. It is expressed as a percentage, for example, `60` means 60% quality.
|
- <Def id="screencast.quality" /> is the quality of the JPEG images. It is expressed as a percentage, for example, `60` means 60% quality.
|
||||||
- `pipeline` when set, the default pipeline settings above are ignored and the custom Gstreamer pipeline description is used. In the pipeline, you can use `{display}` as a placeholder for the X display name.
|
- <Def id="screencast.pipeline" /> when set, the default pipeline settings above are ignored and the custom Gstreamer pipeline description is used. In the pipeline, you can use `{display}` as a placeholder for the X display name.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Example pipeline configuration</summary>
|
<summary>Example pipeline configuration</summary>
|
||||||
|
@ -419,7 +420,7 @@ capture:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Webcam
|
## Webcam {#webcam}
|
||||||
|
|
||||||
:::danger
|
:::danger
|
||||||
This feature is experimental and may not work on all platforms.
|
This feature is experimental and may not work on all platforms.
|
||||||
|
@ -438,9 +439,9 @@ capture:
|
||||||
height: 480
|
height: 480
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` is a boolean value that determines whether the webcam capture is enabled or not.
|
- <Def id="webcam.enabled" /> is a boolean value that determines whether the webcam capture is enabled or not.
|
||||||
- `device` is the name of the [video4linux device](https://www.kernel.org/doc/html/v4.12/media/v4l-drivers/index.html) that will be used as a virtual webcam.
|
- <Def id="webcam.device" /> is the name of the [video4linux device](https://www.kernel.org/doc/html/v4.12/media/v4l-drivers/index.html) that will be used as a virtual webcam.
|
||||||
- `width` and `height` are the resolution of the virtual webcam feed.
|
- <Def id="webcam.width" /> and <Def id="webcam.height" /> are the resolution of the virtual webcam feed.
|
||||||
|
|
||||||
In order to use the webcam feature, the server must have the [v4l2loopback](https://github.com/v4l2loopback/v4l2loopback) kernel module installed and loaded. The module can be loaded using the following command:
|
In order to use the webcam feature, the server must have the [v4l2loopback](https://github.com/v4l2loopback/v4l2loopback) kernel module installed and loaded. The module can be loaded using the following command:
|
||||||
|
|
||||||
|
@ -464,7 +465,7 @@ services:
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
## Microphone
|
## Microphone {#microphone}
|
||||||
|
|
||||||
Neko allows you to capture the microphone on the client machine and send it to the server using WebRTC. This can be used to share the microphone feed with the server.
|
Neko allows you to capture the microphone on the client machine and send it to the server using WebRTC. This can be used to share the microphone feed with the server.
|
||||||
|
|
||||||
|
@ -477,5 +478,5 @@ capture:
|
||||||
device: "audio_input"
|
device: "audio_input"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` is a boolean value that determines whether the microphone capture is enabled or not.
|
- <Def id="microphone.enabled" /> is a boolean value that determines whether the microphone capture is enabled or not.
|
||||||
- `device` is the name of the [pulseaudio device](https://wiki.archlinux.org/title/PulseAudio/Examples) that will be used as a virtual microphone.
|
- <Def id="microphone.device" /> is the name of the [pulseaudio device](https://wiki.archlinux.org/title/PulseAudio/Examples) that will be used as a virtual microphone.
|
|
@ -1,8 +1,9 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 3
|
|
||||||
description: Configuration related to the Desktop Environment in Neko.
|
description: Configuration related to the Desktop Environment in Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# Desktop Environment
|
# Desktop Environment
|
||||||
|
|
||||||
This section describes how to configure the desktop environment inside neko.
|
This section describes how to configure the desktop environment inside neko.
|
||||||
|
@ -15,8 +16,8 @@ desktop:
|
||||||
screen: "1280x720@30" # default
|
screen: "1280x720@30" # default
|
||||||
```
|
```
|
||||||
|
|
||||||
- `display` refers to the X server that is running on the system. If it is not specified, the environment variable `DISPLAY` is used. The same display is referred to in the [Capture](capture#webrtc-video) configuration to capture the screen. In most cases, we want to use the same display for both.
|
- <Def id="display" /> refers to the X server that is running on the system. If it is not specified, the environment variable `DISPLAY` is used. The same display is referred to in the [Capture](capture#video.display) configuration to capture the screen. In most cases, we want to use the same display for both.
|
||||||
- `screen` refers to the screen resolution and refresh rate. The format is `<width>x<height>@<refresh rate>`. If not specified, the default is `1280x720@30`.
|
- <Def id="screen" /> refers to the screen resolution and refresh rate. The format is `<width>x<height>@<refresh rate>`. If not specified, the default is `1280x720@30`.
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
You can specify the screen resolution using the environment variable `NEKO_DESKTOP_SCREEN`.
|
You can specify the screen resolution using the environment variable `NEKO_DESKTOP_SCREEN`.
|
||||||
|
@ -24,7 +25,7 @@ You can specify the screen resolution using the environment variable `NEKO_DESKT
|
||||||
Admin can change the resolution in the GUI.
|
Admin can change the resolution in the GUI.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Input Devices
|
## Input Devices {#input}
|
||||||
|
|
||||||
Neko uses the [XTEST Extension Library](https://www.x.org/releases/X11R7.7/doc/libXtst/xtestlib.html) to simulate keyboard and mouse events. However, for more advanced input devices like touchscreens, we need to use a custom driver that can be loaded as a plugin to the X server and then neko can connect to it.
|
Neko uses the [XTEST Extension Library](https://www.x.org/releases/X11R7.7/doc/libXtst/xtestlib.html) to simulate keyboard and mouse events. However, for more advanced input devices like touchscreens, we need to use a custom driver that can be loaded as a plugin to the X server and then neko can connect to it.
|
||||||
|
|
||||||
|
@ -39,14 +40,14 @@ desktop:
|
||||||
socket: "/tmp/xf86-input-neko.sock" # default
|
socket: "/tmp/xf86-input-neko.sock" # default
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` enables the input device support. If not specified, the default is `false`.
|
- <Def id="input.enabled" /> enables the input device support. If not specified, the default is `false`.
|
||||||
- `socket` refers to the socket file that the custom driver creates. If not specified, the default is `/tmp/xf86-input-neko.sock`.
|
- <Def id="input.socket" /> refers to the socket file that the custom driver creates. If not specified, the default is `/tmp/xf86-input-neko.sock`.
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
When using Docker, the custom driver is already included in the image and the socket file is created at `/tmp/xf86-input-neko.sock`. Therefore, no additional configuration is needed.
|
When using Docker, the custom driver is already included in the image and the socket file is created at `/tmp/xf86-input-neko.sock`. Therefore, no additional configuration is needed.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Unminimize
|
## Unminimize {#unminimize}
|
||||||
|
|
||||||
Most of the time, only a single application is used in the minimal desktop environment without any taskbar or desktop icons. It could happen that the user accidentally minimizes the application and then it is not possible to restore it. To prevent this, we can use the `unminimize` feature that simply listens for the minimize event and restores the window back to the original state.
|
Most of the time, only a single application is used in the minimal desktop environment without any taskbar or desktop icons. It could happen that the user accidentally minimizes the application and then it is not possible to restore it. To prevent this, we can use the `unminimize` feature that simply listens for the minimize event and restores the window back to the original state.
|
||||||
|
|
||||||
|
@ -55,7 +56,7 @@ desktop:
|
||||||
unminimize: true # default
|
unminimize: true # default
|
||||||
```
|
```
|
||||||
|
|
||||||
## Upload Drop
|
## Upload Drop {#upload_drop}
|
||||||
|
|
||||||
The upload drop is a feature that allows the user to upload files to the application by dragging and dropping them into the application window. The files are then uploaded to the application and the application can process them.
|
The upload drop is a feature that allows the user to upload files to the application by dragging and dropping them into the application window. The files are then uploaded to the application and the application can process them.
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ desktop:
|
||||||
upload_drop: true # default
|
upload_drop: true # default
|
||||||
```
|
```
|
||||||
|
|
||||||
## File Chooser Dialog
|
## File Chooser Dialog {#file_chooser_dialog}
|
||||||
|
|
||||||
:::danger
|
:::danger
|
||||||
This feature is experimental and may not work as expected.
|
This feature is experimental and may not work as expected.
|
|
@ -1,8 +1,9 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 5
|
|
||||||
description: Configuration related to the Neko plugins.
|
description: Configuration related to the Neko plugins.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# Plugins Configuration
|
# Plugins Configuration
|
||||||
|
|
||||||
Neko allows you to extend its functionality by using [plugins](https://pkg.go.dev/plugin). Go plugins come with a lot of benefits as well as some limitations. The main advantage is that you can extend the functionality of the application without recompiling the main application. But the main limitation is that you need to use the same Go version and all dependencies with the same version as the main application.
|
Neko allows you to extend its functionality by using [plugins](https://pkg.go.dev/plugin). Go plugins come with a lot of benefits as well as some limitations. The main advantage is that you can extend the functionality of the application without recompiling the main application. But the main limitation is that you need to use the same Go version and all dependencies with the same version as the main application.
|
||||||
|
@ -14,9 +15,9 @@ plugins:
|
||||||
dir: "./bin/plugins"
|
dir: "./bin/plugins"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` enables the plugin support. If set to `false`, the plugins are not loaded.
|
- <Def id="enabled" /> enables the plugin support. If set to `false`, the plugins are not loaded.
|
||||||
- `required` makes the plugin loading mandatory, meaning that if a plugin fails to load, the application will not start.
|
- <Def id="required" /> makes the plugin loading mandatory, meaning that if a plugin fails to load, the application will not start.
|
||||||
- `dir` refers to the directory where the plugins are stored.
|
- <Def id="dir" /> refers to the directory where the plugins are stored.
|
||||||
|
|
||||||
:::danger
|
:::danger
|
||||||
External plugins are experimental and may not work as expected. They will be replaced with [hashicorp/go-plugin](https://github.com/hashicorp/go-plugin) in the future.
|
External plugins are experimental and may not work as expected. They will be replaced with [hashicorp/go-plugin](https://github.com/hashicorp/go-plugin) in the future.
|
||||||
|
@ -24,7 +25,7 @@ External plugins are experimental and may not work as expected. They will be rep
|
||||||
|
|
||||||
There exist a few pre-loaded internal plugins that are shipped with Neko:
|
There exist a few pre-loaded internal plugins that are shipped with Neko:
|
||||||
|
|
||||||
## Chat Plugin
|
## Chat Plugin {#chat}
|
||||||
|
|
||||||
The chat plugin is a simple pre-loaded internal plugin that allows you to chat with other users in the same session. The chat messages are sent to the server and then broadcasted to all users in the same session.
|
The chat plugin is a simple pre-loaded internal plugin that allows you to chat with other users in the same session. The chat messages are sent to the server and then broadcasted to all users in the same session.
|
||||||
|
|
||||||
|
@ -33,6 +34,8 @@ chat:
|
||||||
enabled: true
|
enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- <Def id="chat.enabled" /> enables the chat support. If set to `false`, the chat is disabled.
|
||||||
|
|
||||||
The chat plugin extends user profile and room settings by adding the following fields:
|
The chat plugin extends user profile and room settings by adding the following fields:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -44,7 +47,7 @@ plugins:
|
||||||
- `chat.can_send` in the room settings context controls whether the chat messages can be sent by any user in the room, and in the user's profile context controls whether the user can send chat messages.
|
- `chat.can_send` in the room settings context controls whether the chat messages can be sent by any user in the room, and in the user's profile context controls whether the user can send chat messages.
|
||||||
- `chat.can_receive` in the room settings context controls whether the chat messages can be received by any user in the room, and in the user's profile context controls whether the user can receive chat messages.
|
- `chat.can_receive` in the room settings context controls whether the chat messages can be received by any user in the room, and in the user's profile context controls whether the user can receive chat messages.
|
||||||
|
|
||||||
## File Transfer Plugin
|
## File Transfer Plugin {#filetransfer}
|
||||||
|
|
||||||
The file transfer plugin is a simple pre-loaded internal plugin that allows you to transfer files between the client and the server. The files are uploaded to the server and then downloaded by the client.
|
The file transfer plugin is a simple pre-loaded internal plugin that allows you to transfer files between the client and the server. The files are uploaded to the server and then downloaded by the client.
|
||||||
|
|
||||||
|
@ -55,9 +58,9 @@ filetransfer:
|
||||||
refresh_interval: 30s
|
refresh_interval: 30s
|
||||||
```
|
```
|
||||||
|
|
||||||
- `enabled` enables the file transfer support. If set to `false`, the file transfer is disabled.
|
- <Def id="filetransfer.enabled" /> enables the file transfer support. If set to `false`, the file transfer is disabled.
|
||||||
- `dir` refers to the directory where the files are stored.
|
- <Def id="filetransfer.dir" /> refers to the directory where the files are stored.
|
||||||
- `refresh_interval` refers to the interval at which the file list is refreshed.
|
- <Def id="filetransfer.refresh_interval" /> refers to the interval at which the file list is refreshed.
|
||||||
|
|
||||||
The file transfer plugin extends user profile and room settings by adding the following fields:
|
The file transfer plugin extends user profile and room settings by adding the following fields:
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 4
|
|
||||||
description: Configuration related to the WebRTC and Networking in Neko.
|
description: Configuration related to the WebRTC and Networking in Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { Def, Opt } from '@site/src/components/Anchor';
|
||||||
|
|
||||||
# WebRTC Configuration
|
# WebRTC Configuration
|
||||||
|
|
||||||
This page describes how to configure WebRTC settings inside neko.
|
This page describes how to configure WebRTC settings inside neko.
|
||||||
|
|
||||||
Neko uses WebRTC with the [Pion](https://github.com/pion/webrtc) library to establish a peer-to-peer connection between the client and the server. This connection is used to stream audio, video, and data bidirectionally between the client and the server.
|
Neko uses WebRTC with the [Pion](https://github.com/pion/webrtc) library to establish a peer-to-peer connection between the client and the server. This connection is used to stream audio, video, and data bidirectionally between the client and the server.
|
||||||
|
|
||||||
## ICE Setup
|
## ICE Setup {#ice}
|
||||||
|
|
||||||
ICE, which stands for Interactive Connectivity Establishment, is a protocol used to find the best path to connect peers, such as a client and a server. It helps discover the public IP addresses and ports of both parties to establish a direct connection. ICE candidates, which contain this information, are exchanged through a signaling server to facilitate the connection process.
|
ICE, which stands for Interactive Connectivity Establishment, is a protocol used to find the best path to connect peers, such as a client and a server. It helps discover the public IP addresses and ports of both parties to establish a direct connection. ICE candidates, which contain this information, are exchanged through a signaling server to facilitate the connection process.
|
||||||
|
|
||||||
### ICE Trickle
|
### ICE Trickle {#icetrickle}
|
||||||
|
|
||||||
ICE Trickle is a feature that allows ICE candidates to be sent as they are discovered, rather than waiting for all candidates to be discovered before sending them. It means that the ICE connection can be established faster as the server can start connecting to the client as soon as it has a few ICE candidates and doesn't have to wait for all of them to be discovered.
|
ICE Trickle is a feature that allows ICE candidates to be sent as they are discovered, rather than waiting for all candidates to be discovered before sending them. It means that the ICE connection can be established faster as the server can start connecting to the client as soon as it has a few ICE candidates and doesn't have to wait for all of them to be discovered.
|
||||||
|
|
||||||
|
@ -22,7 +23,7 @@ webrtc:
|
||||||
icetrickle: false
|
icetrickle: false
|
||||||
```
|
```
|
||||||
|
|
||||||
### ICE Lite
|
### ICE Lite {#icelite}
|
||||||
|
|
||||||
ICE Lite is a minimal implementation of the ICE protocol intended for servers running on a public IP address. It is not enabled by default to allow more complex ICE configurations out of the box.
|
ICE Lite is a minimal implementation of the ICE protocol intended for servers running on a public IP address. It is not enabled by default to allow more complex ICE configurations out of the box.
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ webrtc:
|
||||||
When using ICE Servers, ICE Lite must be disabled.
|
When using ICE Servers, ICE Lite must be disabled.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### ICE Servers
|
### ICE Servers {#iceservers}
|
||||||
|
|
||||||
ICE servers are used to establish a connection between the client and the server. There are two types of ICE servers:
|
ICE servers are used to establish a connection between the client and the server. There are two types of ICE servers:
|
||||||
|
|
||||||
|
@ -44,11 +45,11 @@ ICE servers are used to establish a connection between the client and the server
|
||||||
|
|
||||||
The configuration of a single [ICE server](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#iceservers) is defined by the following fields:
|
The configuration of a single [ICE server](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#iceservers) is defined by the following fields:
|
||||||
|
|
||||||
| Field | Description | Type |
|
| Field | Description | Type |
|
||||||
|----------------------------|-------------|------|
|
|-------------------------------------|-------------|------|
|
||||||
| `urls` | List of URLs of the ICE server, if the same server is available on multiple URLs with the same credentials, they can be listed here. | `string[]` |
|
| <Def id="iceservers.urls" /> | List of URLs of the ICE server, if the same server is available on multiple URLs with the same credentials, they can be listed here. | `string[]` |
|
||||||
| `username` | Username used to authenticate with the ICE server, if the server requires authentication. | `string` |
|
| <Def id="iceservers.username" /> | Username used to authenticate with the ICE server, if the server requires authentication. | `string` |
|
||||||
| `credential` | Credential used to authenticate with the ICE server, if the server requires authentication. | `string` |
|
| <Def id="iceservers.credential" /> | Credential used to authenticate with the ICE server, if the server requires authentication. | `string` |
|
||||||
|
|
||||||
import Tabs from '@theme/Tabs';
|
import Tabs from '@theme/Tabs';
|
||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
||||||
|
@ -99,9 +100,6 @@ import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
The ICE servers are divided into two groups:
|
The ICE servers are divided into two groups:
|
||||||
|
|
||||||
- `frontend`: ICE servers that are sent to the client and used to establish a connection between the client and the server.
|
|
||||||
- `backend`: ICE servers that are used by the server to gather ICE candidates. They might contain private IP addresses or other sensitive information that should not be sent to the client.
|
|
||||||
|
|
||||||
```yaml title="config.yaml"
|
```yaml title="config.yaml"
|
||||||
webrtc:
|
webrtc:
|
||||||
iceservers:
|
iceservers:
|
||||||
|
@ -113,6 +111,9 @@ webrtc:
|
||||||
- urls: "stun:stun.l.google.com:19302"
|
- urls: "stun:stun.l.google.com:19302"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- <Def id="iceservers.frontend" /> - ICE servers that are sent to the client and used to establish a connection between the client and the server.
|
||||||
|
- <Def id="iceservers.backend" /> - ICE servers that are used by the server to gather ICE candidates. They might contain private IP addresses or other sensitive information that should not be sent to the client.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Example with Coturn server in Docker Compose</summary>
|
<summary>Example with Coturn server in Docker Compose</summary>
|
||||||
|
|
||||||
|
@ -139,12 +140,12 @@ Replace `<MY-COTURN-SERVER>` with your LAN or Public IP address, and allow ports
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Network Setup
|
## Network Setup {#network}
|
||||||
|
|
||||||
Since WebRTC is a peer-to-peer protocol that requires a direct connection between the client and the server. This can be achieved by:
|
Since WebRTC is a peer-to-peer protocol that requires a direct connection between the client and the server. This can be achieved by:
|
||||||
|
|
||||||
- Using a public IP address for the server (or at least reachable from the client if deployed on a private network).
|
- Using a public IP address for the server (or at least reachable from the client if deployed on a private network).
|
||||||
- Using a [TURN server](#ice-servers) to relay data between the client and the server if a direct connection cannot be established.
|
- Using a [TURN server](#iceservers) to relay data between the client and the server if a direct connection cannot be established.
|
||||||
|
|
||||||
All specified ports along with the server's IP address will be sent to the client in ICE candidates to establish a connection. Therefore, it is important to ensure that the specified ports are open on the server's firewall, are not remapped to different ports, and are reachable from the client.
|
All specified ports along with the server's IP address will be sent to the client in ICE candidates to establish a connection. Therefore, it is important to ensure that the specified ports are open on the server's firewall, are not remapped to different ports, and are reachable from the client.
|
||||||
|
|
||||||
|
@ -154,10 +155,10 @@ WebRTC does not use the HTTP protocol, therefore it is not possible to use nginx
|
||||||
|
|
||||||
There exist two types of connections:
|
There exist two types of connections:
|
||||||
|
|
||||||
- [Ephemeral UDP port range](#ephemeral-udp-port-range): The range of UDP ports that the server uses to establish a connection with the client. Every time a new connection is established, a new port from this range is used. This range should be open on the server's firewall.
|
- [Ephemeral UDP port range](#epr): The range of UDP ports that the server uses to establish a connection with the client. Every time a new connection is established, a new port from this range is used. This range should be open on the server's firewall.
|
||||||
- [UDP/TCP multiplexing](#udp-tcp-multiplexing): The server can use a single port for multiple connections. This port should be open on the server's firewall.
|
- [UDP/TCP multiplexing](#mux): The server can use a single port for multiple connections. This port should be open on the server's firewall.
|
||||||
|
|
||||||
### Ephemeral UDP port range
|
### Ephemeral UDP port range {#epr}
|
||||||
|
|
||||||
The ephemeral UDP port range can be configured using the following configuration:
|
The ephemeral UDP port range can be configured using the following configuration:
|
||||||
|
|
||||||
|
@ -181,7 +182,7 @@ ports:
|
||||||
It is important to expose the same ports to the host machine, without any remapping e.g. `49000-49100:59000-59100/udp` instead of `59000-59100:59000-59100/udp`.
|
It is important to expose the same ports to the host machine, without any remapping e.g. `49000-49100:59000-59100/udp` instead of `59000-59100:59000-59100/udp`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### UDP/TCP multiplexing {#udp-tcp-multiplexing}
|
### UDP/TCP multiplexing {#mux}
|
||||||
|
|
||||||
The UDP/TCP multiplexing port can be configured using the following configuration:
|
The UDP/TCP multiplexing port can be configured using the following configuration:
|
||||||
|
|
||||||
|
@ -191,6 +192,9 @@ webrtc:
|
||||||
tcpmux: 59000
|
tcpmux: 59000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- <Def id="udpmux" /> - The port used for UDP connections.
|
||||||
|
- <Def id="tcpmux" /> - The port used for TCP connections.
|
||||||
|
|
||||||
The server uses only port `59000` for both UDP and TCP connections. This port should be open on the server's firewall. You can specify a different port if needed, or specify only one of the two protocols. UDP is generally better for latency, but some networks block UDP so it is good to have TCP available as a fallback.
|
The server uses only port `59000` for both UDP and TCP connections. This port should be open on the server's firewall. You can specify a different port if needed, or specify only one of the two protocols. UDP is generally better for latency, but some networks block UDP so it is good to have TCP available as a fallback.
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
|
@ -208,11 +212,11 @@ ports:
|
||||||
It is important to expose the same ports to the host machine, without any remapping e.g. `49000:59000/udp` instead of `59000:59000/udp`.
|
It is important to expose the same ports to the host machine, without any remapping e.g. `49000:59000/udp` instead of `59000:59000/udp`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### Server IP Address
|
### Server IP Address {#ip}
|
||||||
|
|
||||||
The server IP address is sent to the client in ICE candidates so that the client can establish a connection with the server. By default, the server IP address is automatically resolved by the server to the public IP address of the server. If the server is behind a NAT, you want to specify a different IP address or use neko only in a local network, you can specify the server IP address manually.
|
The server IP address is sent to the client in ICE candidates so that the client can establish a connection with the server. By default, the server IP address is automatically resolved by the server to the public IP address of the server. If the server is behind a NAT, you want to specify a different IP address or use neko only in a local network, you can specify the server IP address manually.
|
||||||
|
|
||||||
#### NAT 1-to-1
|
#### NAT 1-to-1 {#nat1to1}
|
||||||
|
|
||||||
```yaml title="config.yaml"
|
```yaml title="config.yaml"
|
||||||
webrtc:
|
webrtc:
|
||||||
|
@ -241,7 +245,7 @@ environment:
|
||||||
```
|
```
|
||||||
:::
|
:::
|
||||||
|
|
||||||
#### IP Retrieval URL
|
#### IP Retrieval URL {#ip_retrieval_url}
|
||||||
|
|
||||||
If you do not specify the server IP address, the server will try to resolve the public IP address of the server automatically.
|
If you do not specify the server IP address, the server will try to resolve the public IP address of the server automatically.
|
||||||
|
|
||||||
|
@ -251,7 +255,7 @@ webrtc:
|
||||||
```
|
```
|
||||||
The server will send an HTTP GET request to the specified URL to retrieve the public IP address of the server.
|
The server will send an HTTP GET request to the specified URL to retrieve the public IP address of the server.
|
||||||
|
|
||||||
## Bandwidth Estimator
|
## Bandwidth Estimator {#estimator}
|
||||||
|
|
||||||
:::danger
|
:::danger
|
||||||
The bandwidth estimator is an experimental feature and might not work as expected.
|
The bandwidth estimator is an experimental feature and might not work as expected.
|
|
@ -6,7 +6,7 @@ sidebar_position: 2
|
||||||
|
|
||||||
This guide walks you through the process of setting up Neko on your local machine or server.
|
This guide walks you through the process of setting up Neko on your local machine or server.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites {#prerequisites}
|
||||||
|
|
||||||
Before proceeding, ensure that you have the following installed on your system:
|
Before proceeding, ensure that you have the following installed on your system:
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ Before proceeding, ensure that you have the following installed on your system:
|
||||||
sudo apt-get install xdotool xclip libgtk-3-0 libgtk-3-dev libopus0 libvpx6;
|
sudo apt-get install xdotool xclip libgtk-3-0 libgtk-3-dev libopus0 libvpx6;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 1: Clone the Repository
|
## Step 1: Clone the Repository {#step-1}
|
||||||
|
|
||||||
Start by cloning the Neko Git repository to your machine:
|
Start by cloning the Neko Git repository to your machine:
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ git clone https://github.com/m1k1o/neko.git
|
||||||
cd neko
|
cd neko
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 2: Build the Frontend
|
## Step 2: Build the Frontend {#step-2}
|
||||||
|
|
||||||
Navigate to the `client` directory and install the dependencies:
|
Navigate to the `client` directory and install the dependencies:
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ npm install;
|
||||||
npm run build;
|
npm run build;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 3: Build the Server
|
## Step 3: Build the Server {#step-3}
|
||||||
|
|
||||||
Navigate to the `server` directory and build the server:
|
Navigate to the `server` directory and build the server:
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ cd server;
|
||||||
go build;
|
go build;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 4: Run the Server
|
## Step 4: Run the Server {#step-4}
|
||||||
|
|
||||||
Finally, run the server:
|
Finally, run the server:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Frequently Asked Questions
|
# Frequently Asked Questions
|
||||||
|
|
||||||
### How to enable debug mode?
|
### How to enable debug mode? {#debug-mode}
|
||||||
|
|
||||||
To see verbose information from the n.eko server, you can enable debug mode using `NEKO_DEBUG`.
|
To see verbose information from the n.eko server, you can enable debug mode using `NEKO_DEBUG`.
|
||||||
|
|
||||||
|
@ -27,13 +27,13 @@ And then view the logs using `docker logs -f neko`.
|
||||||
|
|
||||||
To see verbose information from the n.eko client, you need to visit the developer console in your browser. You can do this by pressing `F12` and then navigating to the `Console` tab.
|
To see verbose information from the n.eko client, you need to visit the developer console in your browser. You can do this by pressing `F12` and then navigating to the `Console` tab.
|
||||||
|
|
||||||
### How to enable support for Chinese/Japanese/Korean input method?
|
### How to enable support for Chinese/Japanese/Korean input method? {#input-method}
|
||||||
|
|
||||||
There exists an extension [Google Input Tools](https://chrome.google.com/webstore/detail/mclkkofklkfljcocdinagocijmpgbhab) for Chrome that allows you to use Chinese input method.
|
There exists an extension [Google Input Tools](https://chrome.google.com/webstore/detail/mclkkofklkfljcocdinagocijmpgbhab) for Chrome that allows you to use Chinese input method.
|
||||||
|
|
||||||
### How can I embed the Neko desktop into web page without login prompt coming up for viewers?
|
### How can I embed the Neko into web page without login prompt coming up for viewers? {#embed}
|
||||||
|
|
||||||
You can use the following URL to embed the Neko desktop into a web page without login prompt coming up for viewers:
|
You can use the following URL to embed the Neko into a web page without login prompt coming up for viewers:
|
||||||
|
|
||||||
```
|
```
|
||||||
http://<your-neko-server-ip>:8080/?usr=neko&pwd=neko
|
http://<your-neko-server-ip>:8080/?usr=neko&pwd=neko
|
||||||
|
@ -43,17 +43,17 @@ https://stackoverflow.com/questions/15276929/how-to-make-a-video-fullscreen-when
|
||||||
|
|
||||||
Your iframe needs an attribute: `allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"` or more modern `allow="fullscreen *"`. For the second you can remove the star if your iframe has the same origin or replace it with your iframe origin.
|
Your iframe needs an attribute: `allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"` or more modern `allow="fullscreen *"`. For the second you can remove the star if your iframe has the same origin or replace it with your iframe origin.
|
||||||
|
|
||||||
### Can I use neko without docker?
|
### Can I use neko without docker? {#without-docker}
|
||||||
|
|
||||||
Yes, you can, but it is not recommended. Neko is based on Debian and uses Xorg and Pulseaudio. Just follow the steps in the Dockerfile to install all dependencies.
|
Yes, you can, but it is not recommended. Neko is based on Debian and uses Xorg and Pulseaudio. Just follow the steps in the Dockerfile to install all dependencies.
|
||||||
|
|
||||||
However, it is recommend to start with existing system that has GUI with desktop manager, is based on Xorg and uses Pulseaudio (e.g. Ubuntu Desktop 24.04). For that matter you only need to install gstreamer dependencies, configure pulseaudio properly and run neko binary (you don't need to build it from scratch, you can copy it from docker image).
|
However, it is recommend to start with existing system that has GUI with desktop manager, is based on Xorg and uses Pulseaudio (e.g. Ubuntu Desktop 24.04). For that matter you only need to install gstreamer dependencies, configure pulseaudio properly and run neko binary (you don't need to build it from scratch, you can copy it from docker image).
|
||||||
|
|
||||||
### Why does the clipboard button does not show up?
|
### Why does the clipboard button does not show up? {#clipboard-button}
|
||||||
|
|
||||||
When you are using HTTPS connection and a compatible host browser (currently only Chromium-based browsers) which supports the Clipboard API, the clipboard button will not show up. Instead, you can use the native clipboard functionality of your host browser.
|
When you are using HTTPS connection and a compatible host browser (currently only Chromium-based browsers) which supports the Clipboard API, the clipboard button will not show up. Instead, you can use the native clipboard functionality of your host browser.
|
||||||
|
|
||||||
### Why am I unable to install extensions in the Neko browser?
|
### Why am I unable to install extensions in the Neko browser? {#extensions}
|
||||||
|
|
||||||
The browser in Neko uses policies to restrict the installation of extensions. You can either add extensions to the policy file or disable the policy.
|
The browser in Neko uses policies to restrict the installation of extensions. You can either add extensions to the policy file or disable the policy.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"position": 3,
|
|
||||||
"label": "Installation",
|
|
||||||
"collapsed": false
|
|
||||||
}
|
|
|
@ -1,12 +1,8 @@
|
||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
The preferred way to install Neko is to use Docker. This method is easy to set up and manage, it contains all the necessary dependencies, and it is isolated from the host system. Other installation methods are out of scope for this documentation.
|
The preferred way to install Neko is to use Docker. This method is easy to set up and manage, it contains all the necessary dependencies, and it is isolated from the host system. Other installation methods are out of scope for this documentation.
|
||||||
|
|
||||||
## Docker Run
|
## Docker Run {#docker-run}
|
||||||
|
|
||||||
To start a basic Neko container, use the following command:
|
To start a basic Neko container, use the following command:
|
||||||
|
|
||||||
|
@ -21,33 +17,33 @@ docker run -d --rm \
|
||||||
ghcr.io/m1k1o/neko/firefox:latest
|
ghcr.io/m1k1o/neko/firefox:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### Explanation
|
### Explanation {#docker-run-explanation}
|
||||||
|
|
||||||
- `-d --rm` - Run the container in the background and automatically remove the container when it exits.
|
- `-d --rm` - Run the container in the background and automatically remove the container when it exits.
|
||||||
- `-p 8080:8080` - Map the container's port `8080` to the host's port `8080`.
|
- `-p 8080:8080` - Map the container's port `8080` to the host's port `8080`.
|
||||||
- `-p 56000-56100:56000-56100/udp` - Map the container's UDP ports `56000-56100` to the host's ports `56000-56100`.
|
- `-p 56000-56100:56000-56100/udp` - Map the container's UDP ports `56000-56100` to the host's ports `56000-56100`.
|
||||||
- `-e NEKO_WEBRTC_EPR=56000-56100` - Set the WebRTC endpoint range, this value must match the mapped ports above.
|
- `-e NEKO_WEBRTC_EPR=56000-56100` - Set the WebRTC endpoint range, this value must match the mapped ports above.
|
||||||
- See [WebRTC Ephemeral Port Range](/docs/v3/reference/configuration/webrtc#ephemeral-udp-port-range) for more information about this setting.
|
- See [WebRTC Ephemeral Port Range](/docs/v3/configuration/webrtc#epr) for more information about this setting.
|
||||||
- There is an alternative to use only a single port, see [WebRTC UDP/TCP multiplexing](/docs/v3/reference/configuration/webrtc#udp-tcp-multiplexing).
|
- There is an alternative to use only a single port, see [WebRTC UDP/TCP multiplexing](/docs/v3/configuration/webrtc#mux).
|
||||||
- `-e NEKO_WEBRTC_NAT1TO1=127.0.0.1` - Set the address where the WebRTC client should connect to.
|
- `-e NEKO_WEBRTC_NAT1TO1=127.0.0.1` - Set the address where the WebRTC client should connect to.
|
||||||
- To test only on the local computer, use `127.0.0.1`.
|
- To test only on the local computer, use `127.0.0.1`.
|
||||||
- To use it in a private network, use the host's IP address (e.g., `192.168.1.5`).
|
- To use it in a private network, use the host's IP address (e.g., `192.168.1.5`).
|
||||||
- To use it in a public network, you need to correctly set up port forwarding on your router and remove this env variable.
|
- To use it in a public network, you need to correctly set up port forwarding on your router and remove this env variable.
|
||||||
- See [WebRTC Server IP Address](/docs/v3/reference/configuration/webrtc#server-ip-address) for more information about this setting.
|
- See [WebRTC Server IP Address](/docs/v3/configuration/webrtc#ip) for more information about this setting.
|
||||||
- `-e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko` - Set the password for the user account.
|
- `-e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko` - Set the password for the user account.
|
||||||
- `-e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin` - Set the password for the admin account.
|
- `-e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin` - Set the password for the admin account.
|
||||||
- See [Multiuser Configuration](/docs/v3/reference/configuration/authentication#multi-user-provider) for more information about this setting.
|
- See [Multiuser Configuration](/docs/v3/configuration/authentication#member.multiuser) for more information about this setting.
|
||||||
- There are other authentication providers available, see [Authentication Providers](/docs/v3/reference/configuration/authentication#member-providers).
|
- There are other authentication providers available, see [Authentication Providers](/docs/v3/configuration/authentication#member).
|
||||||
- `ghcr.io/m1k1o/neko/firefox:latest` - The Docker image to use.
|
- `ghcr.io/m1k1o/neko/firefox:latest` - The Docker image to use.
|
||||||
- See available [Docker Images](/docs/v3/getting-started/installation/docker-images).
|
- See available [Docker Images](/docs/v3/installation/docker-images).
|
||||||
|
|
||||||
Now, open your browser and go to: `http://localhost:8080`. You should see the Neko interface.
|
Now, open your browser and go to: `http://localhost:8080`. You should see the Neko interface.
|
||||||
|
|
||||||
### Further Configuration
|
### Further Configuration {#configuration}
|
||||||
|
|
||||||
You can configure Neko by setting environment variables or configuration file. See the [Configuration Reference](/docs/v3/reference/configuration) for more information.
|
You can configure Neko by setting environment variables or configuration file. See the [Configuration Reference](/docs/v3/configuration) for more information.
|
||||||
|
|
||||||
## Docker Compose
|
## Docker Compose {#docker-compose}
|
||||||
|
|
||||||
You can also use Docker Compose to run Neko. It is preferred to use Docker Compose for running Neko in production because you can easily manage the container, update it, and configure it.
|
You can also use Docker Compose to run Neko. It is preferred to use Docker Compose for running Neko in production because you can easily manage the container, update it, and configure it.
|
||||||
|
|
||||||
|
@ -92,3 +88,9 @@ Learn more about [how compose works](https://docs.docker.com/compose/intro/compo
|
||||||
:::note
|
:::note
|
||||||
You need to be in the same directory as the `docker-compose.yml` file to run the `docker compose` commands.
|
You need to be in the same directory as the `docker-compose.yml` file to run the `docker compose` commands.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Next Steps {#next}
|
||||||
|
|
||||||
|
import DocCardList from '@theme/DocCardList';
|
||||||
|
|
||||||
|
<DocCardList />
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 1
|
description: List of available Neko Docker images and their flavors.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Docker Images
|
# Docker Images
|
||||||
|
@ -8,7 +8,7 @@ Neko as a standalone streaming server is available as a Docker image. But that i
|
||||||
|
|
||||||
The base image is available at [`ghcr.io/m1k1o/neko/base`](https://ghcr.io/m1k1o/neko/base).
|
The base image is available at [`ghcr.io/m1k1o/neko/base`](https://ghcr.io/m1k1o/neko/base).
|
||||||
|
|
||||||
## Naming Convention
|
## Naming Convention {#naming}
|
||||||
|
|
||||||
Neko Docker images are available on [GitHub Container Registry (GHCR)](https://github.com/m1k1o?tab=packages&repo_name=neko). The naming convention for Neko Docker images is as follows:
|
Neko Docker images are available on [GitHub Container Registry (GHCR)](https://github.com/m1k1o?tab=packages&repo_name=neko). The naming convention for Neko Docker images is as follows:
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@ Neko Docker images are available on [GitHub Container Registry (GHCR)](https://g
|
||||||
ghcr.io/m1k1o/neko/[<flavor>-]<application>:<version>
|
ghcr.io/m1k1o/neko/[<flavor>-]<application>:<version>
|
||||||
```
|
```
|
||||||
|
|
||||||
- `<flavor>` is the optional flavor of the image, see [Available Flavors](#available-flavors) for more information.
|
- `<flavor>` is the optional flavor of the image, see [Available Flavors](#flavors) for more information.
|
||||||
- `<application>` is the application name or base image, see [Available Applications](#available-applications) for more information.
|
- `<application>` is the application name or base image, see [Available Applications](#apps) for more information.
|
||||||
- `<version>` is the [semantic version](https://semver.org/) of the image from the [GitHub tags](https://github.com/m1k1o/neko/tags). There is always a `latest` tag available.
|
- `<version>` is the [semantic version](https://semver.org/) of the image from the [GitHub tags](https://github.com/m1k1o/neko/tags). There is always a `latest` tag available.
|
||||||
|
|
||||||
An alternative registry is also available on [Docker Hub](https://hub.docker.com/r/m1k1o/neko), however, only images without flavor and with the latest version are available there.
|
An alternative registry is also available on [Docker Hub](https://hub.docker.com/r/m1k1o/neko), however, only images without flavor and with the latest version are available there.
|
||||||
|
@ -30,11 +30,11 @@ m1k1o/neko:<application>
|
||||||
You should always prefer the GHCR registry with the ability to use flavors and specific versions.
|
You should always prefer the GHCR registry with the ability to use flavors and specific versions.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Available Applications
|
## Available Applications {#apps}
|
||||||
|
|
||||||
The following applications are available as Neko Docker images:
|
The following applications are available as Neko Docker images:
|
||||||
|
|
||||||
### Firefox-based browsers
|
### Firefox-based browsers {#firefox}
|
||||||
|
|
||||||
In comparison to Chromium-based browsers, Firefox-based browsers do not require additional capabilities or a bigger shared memory size to not crash.
|
In comparison to Chromium-based browsers, Firefox-based browsers do not require additional capabilities or a bigger shared memory size to not crash.
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ In comparison to Chromium-based browsers, Firefox-based browsers do not require
|
||||||
| <img src="/img/icons/tor-browser.svg" width="60" height="60" /> | [Tor Browser](https://www.torproject.org/) <br /> A browser designed to access the Tor network for enhanced privacy. | [`ghcr.io/m1k1o/neko/tor-browser`](https://ghcr.io/m1k1o/neko/tor-browser) |
|
| <img src="/img/icons/tor-browser.svg" width="60" height="60" /> | [Tor Browser](https://www.torproject.org/) <br /> A browser designed to access the Tor network for enhanced privacy. | [`ghcr.io/m1k1o/neko/tor-browser`](https://ghcr.io/m1k1o/neko/tor-browser) |
|
||||||
| <img src="/img/icons/waterfox.svg" width="60" height="60" /> | [Waterfox](https://www.waterfox.net/) <br /> A privacy-focused browser based on Firefox. | [`ghcr.io/m1k1o/neko/waterfox`](https://ghcr.io/m1k1o/neko/waterfox) |
|
| <img src="/img/icons/waterfox.svg" width="60" height="60" /> | [Waterfox](https://www.waterfox.net/) <br /> A privacy-focused browser based on Firefox. | [`ghcr.io/m1k1o/neko/waterfox`](https://ghcr.io/m1k1o/neko/waterfox) |
|
||||||
|
|
||||||
### Chromium-based browsers
|
### Chromium-based browsers {#chromium}
|
||||||
|
|
||||||
There are multiple flavors of Chromium-based browsers available as Neko Docker images.
|
There are multiple flavors of Chromium-based browsers available as Neko Docker images.
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
\* requires extra steps to enable DRM, see instructions [here](https://www.reddit.com/r/operabrowser/wiki/opera/linux_widevine_config/). `libffmpeg` is already configured.
|
\* requires extra steps to enable DRM, see instructions [here](https://www.reddit.com/r/operabrowser/wiki/opera/linux_widevine_config/). `libffmpeg` is already configured.
|
||||||
|
|
||||||
### Desktop Environments
|
### Desktop Environments {#desktop}
|
||||||
|
|
||||||
These images feature a full desktop environment where you can install and run multiple applications, use window management, and more. This is useful for people who want to run multiple applications in a single container.
|
These images feature a full desktop environment where you can install and run multiple applications, use window management, and more. This is useful for people who want to run multiple applications in a single container.
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ These images feature a full desktop environment where you can install and run mu
|
||||||
| <img src="/img/icons/xfce.svg" width="60" height="60" /> | [Xfce](https://xfce.org/) <br /> A lightweight desktop environment. | [`ghcr.io/m1k1o/neko/xfce`](https://ghcr.io/m1k1o/neko/xfce) |
|
| <img src="/img/icons/xfce.svg" width="60" height="60" /> | [Xfce](https://xfce.org/) <br /> A lightweight desktop environment. | [`ghcr.io/m1k1o/neko/xfce`](https://ghcr.io/m1k1o/neko/xfce) |
|
||||||
| <img src="/img/icons/kde.svg" width="60" height="60" /> | [KDE Plasma](https://kde.org/plasma-desktop) <br /> A feature-rich desktop environment. | [`ghcr.io/m1k1o/neko/kde`](https://ghcr.io/m1k1o/neko/kde) |
|
| <img src="/img/icons/kde.svg" width="60" height="60" /> | [KDE Plasma](https://kde.org/plasma-desktop) <br /> A feature-rich desktop environment. | [`ghcr.io/m1k1o/neko/kde`](https://ghcr.io/m1k1o/neko/kde) |
|
||||||
|
|
||||||
### Other Applications
|
### Other Applications {#other}
|
||||||
|
|
||||||
As it would be impossible to include all possible applications in the repository, a couple of the most popular ones that work well with Neko have been chosen. Custom images can be created by using the base image and installing the desired application.
|
As it would be impossible to include all possible applications in the repository, a couple of the most popular ones that work well with Neko have been chosen. Custom images can be created by using the base image and installing the desired application.
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ As it would be impossible to include all possible applications in the repository
|
||||||
| <img src="/img/icons/remmina.svg" width="60" height="60" /> | [Remmina](https://remmina.org/) <br /> A remote desktop client. | [`ghcr.io/m1k1o/neko/remmina`](https://ghcr.io/m1k1o/neko/remmina) |
|
| <img src="/img/icons/remmina.svg" width="60" height="60" /> | [Remmina](https://remmina.org/) <br /> A remote desktop client. | [`ghcr.io/m1k1o/neko/remmina`](https://ghcr.io/m1k1o/neko/remmina) |
|
||||||
| <img src="/img/icons/vlc.svg" width="60" height="60" /> | [VLC](https://www.videolan.org/vlc/) <br /> A media player. | [`ghcr.io/m1k1o/neko/vlc`](https://ghcr.io/m1k1o/neko/vlc) |
|
| <img src="/img/icons/vlc.svg" width="60" height="60" /> | [VLC](https://www.videolan.org/vlc/) <br /> A media player. | [`ghcr.io/m1k1o/neko/vlc`](https://ghcr.io/m1k1o/neko/vlc) |
|
||||||
|
|
||||||
#### Remmina Configuration
|
#### Remmina Configuration {#remmina}
|
||||||
|
|
||||||
To use Remmina with Neko, you can either pass the `REMMINA_URL=<proto>://[<username>[:<password>]@]server[:port]` environment variable (proto being `vnc`, `rdp` or `spice`):
|
To use Remmina with Neko, you can either pass the `REMMINA_URL=<proto>://[<username>[:<password>]@]server[:port]` environment variable (proto being `vnc`, `rdp` or `spice`):
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ docker run \
|
||||||
ghcr.io/m1k1o/neko/remmina
|
ghcr.io/m1k1o/neko/remmina
|
||||||
```
|
```
|
||||||
|
|
||||||
#### VLC Configuration
|
#### VLC Configuration {#vlc}
|
||||||
|
|
||||||
To use VLC with Neko, you can either pass the `VLC_MEDIA=<url>` environment variable:
|
To use VLC with Neko, you can either pass the `VLC_MEDIA=<url>` environment variable:
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ docker run \
|
||||||
See [neko-apps](https://github.com/m1k1o/neko-apps) repository for more applications.
|
See [neko-apps](https://github.com/m1k1o/neko-apps) repository for more applications.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Available Flavors
|
## Available Flavors {#flavors}
|
||||||
|
|
||||||
:::danger Keep in Mind
|
:::danger Keep in Mind
|
||||||
Currently the focus is on AMD64 & CPU image (wihout any flavor). So the flavor images might not work as expected.
|
Currently the focus is on AMD64 & CPU image (wihout any flavor). So the flavor images might not work as expected.
|
||||||
|
@ -173,7 +173,7 @@ The following flavors are available for Neko Docker images:
|
||||||
Not all flavors are available for all applications. Since not all applications support ARM architecture or GPU acceleration, the flavors are only available where they make sense.
|
Not all flavors are available for all applications. Since not all applications support ARM architecture or GPU acceleration, the flavors are only available where they make sense.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### ARM
|
### ARM {#arm}
|
||||||
|
|
||||||
For ARM-based images (like Raspberry Pi - with GPU hardware acceleration, [Oracle Cloud ARM free tier](https://www.oracle.com/cloud/free/)). Currently, not all images are available for ARM, because not all applications are available for ARM. Please use the images below:
|
For ARM-based images (like Raspberry Pi - with GPU hardware acceleration, [Oracle Cloud ARM free tier](https://www.oracle.com/cloud/free/)). Currently, not all images are available for ARM, because not all applications are available for ARM. Please use the images below:
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ For ARM-based images (like Raspberry Pi - with GPU hardware acceleration, [Oracl
|
||||||
|
|
||||||
The base image is available at [`ghcr.io/m1k1o/neko/arm-base`](https://ghcr.io/m1k1o/neko/arm-base).
|
The base image is available at [`ghcr.io/m1k1o/neko/arm-base`](https://ghcr.io/m1k1o/neko/arm-base).
|
||||||
|
|
||||||
### Intel
|
### Intel {#intel}
|
||||||
|
|
||||||
For images with VAAPI GPU hardware acceleration using Intel drivers use:
|
For images with VAAPI GPU hardware acceleration using Intel drivers use:
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ For images with VAAPI GPU hardware acceleration using Intel drivers use:
|
||||||
|
|
||||||
The base image is available at [`ghcr.io/m1k1o/neko/intel-base`](https://ghcr.io/m1k1o/neko/intel-base).
|
The base image is available at [`ghcr.io/m1k1o/neko/intel-base`](https://ghcr.io/m1k1o/neko/intel-base).
|
||||||
|
|
||||||
### Nvidia
|
### Nvidia {#nvidia}
|
||||||
|
|
||||||
For images with Nvidia GPU hardware acceleration using EGL use:
|
For images with Nvidia GPU hardware acceleration using EGL use:
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 2
|
description: Example Docker Compose configurations for Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
Here are some examples to get you started with Neko. You can use these examples as a reference to create your own configurations.
|
Here are some examples to get you started with Neko. You can use these examples as a reference to create your own configurations.
|
||||||
|
|
||||||
## Firefox
|
## Firefox {#firefox}
|
||||||
|
|
||||||
```yaml title="docker-compose.yaml"
|
```yaml title="docker-compose.yaml"
|
||||||
services:
|
services:
|
||||||
|
@ -28,7 +28,7 @@ services:
|
||||||
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Chromium
|
## Chromium {#chromium}
|
||||||
|
|
||||||
```yaml title="docker-compose.yaml"
|
```yaml title="docker-compose.yaml"
|
||||||
services:
|
services:
|
||||||
|
@ -52,7 +52,7 @@ services:
|
||||||
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
## VLC
|
## VLC {#vlc}
|
||||||
|
|
||||||
```yaml title="docker-compose.yaml"
|
```yaml title="docker-compose.yaml"
|
||||||
services:
|
services:
|
||||||
|
@ -76,7 +76,7 @@ services:
|
||||||
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
NEKO_WEBRTC_NAT1TO1: <your-IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Raspberry Pi
|
## Raspberry Pi {#raspberry-pi}
|
||||||
|
|
||||||
```yaml title="config.yaml"
|
```yaml title="config.yaml"
|
||||||
capture:
|
capture:
|
|
@ -1,12 +1,8 @@
|
||||||
---
|
# Introduction
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Overview
|
|
||||||
|
|
||||||
Neko is an open-source self-hosted virtual browser solution that allows multiple users to share a single web browser instance remotely. It is designed for use cases such as collaborative browsing, remote access to web-based applications, and private cloud-based browsing.
|
Neko is an open-source self-hosted virtual browser solution that allows multiple users to share a single web browser instance remotely. It is designed for use cases such as collaborative browsing, remote access to web-based applications, and private cloud-based browsing.
|
||||||
|
|
||||||
## Key Features
|
## Key Features {#features}
|
||||||
|
|
||||||
- **Multi-User Collaboration** – Multiple users can interact with the same browser session.
|
- **Multi-User Collaboration** – Multiple users can interact with the same browser session.
|
||||||
- **Audio & Video Streaming** – Real-time streaming of the browser’s output with low latency.
|
- **Audio & Video Streaming** – Real-time streaming of the browser’s output with low latency.
|
||||||
|
@ -14,14 +10,14 @@ Neko is an open-source self-hosted virtual browser solution that allows multiple
|
||||||
- **GPU Acceleration** – Supports hardware acceleration for improved performance.
|
- **GPU Acceleration** – Supports hardware acceleration for improved performance.
|
||||||
- **Customization Options** – Configure bookmarks, extensions, persistent data, and more.
|
- **Customization Options** – Configure bookmarks, extensions, persistent data, and more.
|
||||||
|
|
||||||
## Use Cases
|
## Use Cases {#use-cases}
|
||||||
|
|
||||||
- **Remote Browsing** – Access a web browser from any device without installing software.
|
- **Remote Browsing** – Access a web browser from any device without installing software.
|
||||||
- **Watch Parties** – Stream content together with friends and interact in real time.
|
- **Watch Parties** – Stream content together with friends and interact in real time.
|
||||||
- **Web Development & Testing** – Test websites in a controlled browser environment.
|
- **Web Development & Testing** – Test websites in a controlled browser environment.
|
||||||
- **Cloud-Based Browsing** – Securely browse the web from a dedicated remote environment.
|
- **Cloud-Based Browsing** – Securely browse the web from a dedicated remote environment.
|
||||||
|
|
||||||
## Supported Platforms
|
## Supported Platforms {#platforms}
|
||||||
|
|
||||||
Neko runs on various platforms, including:
|
Neko runs on various platforms, including:
|
||||||
|
|
||||||
|
@ -31,10 +27,10 @@ Neko runs on various platforms, including:
|
||||||
|
|
||||||
Explore the documentation to learn how to deploy, configure, and optimize Neko for your use case.
|
Explore the documentation to learn how to deploy, configure, and optimize Neko for your use case.
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps {#next}
|
||||||
|
|
||||||
import DocCardList from '@theme/DocCardList';
|
import DocCardList from '@theme/DocCardList';
|
||||||
import {useCurrentSidebarCategory} from '@docusaurus/theme-common';
|
import {useCurrentSidebarCategory} from '@docusaurus/theme-common';
|
||||||
|
|
||||||
<DocCardList items={useCurrentSidebarCategory().items.filter((item) => item.docId !== 'getting-started/README')} />
|
<DocCardList items={useCurrentSidebarCategory().items.filter((item) => item.docId !== 'introduction')} />
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
---
|
# Migration from V2
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# V2 Migration Guide
|
|
||||||
|
|
||||||
Currently, Neko is in compatibility mode, meaning that as soon as a single V2 configuration option is set, the legacy mode is enabled. This approach allows for a smooth transition from V2 to V3, where it does not expose the V2 API for new users but still allows existing users who use the old configuration to continue using it as before.
|
Currently, Neko is in compatibility mode, meaning that as soon as a single V2 configuration option is set, the legacy mode is enabled. This approach allows for a smooth transition from V2 to V3, where it does not expose the V2 API for new users but still allows existing users who use the old configuration to continue using it as before.
|
||||||
|
|
||||||
|
@ -16,7 +12,7 @@ You can migrate to a new configuration even if you are using a V2 client. Just m
|
||||||
When using Neko in a container with a built-in client, the client will always be compatible with the server regardless of what configuration is used.
|
When using Neko in a container with a built-in client, the client will always be compatible with the server regardless of what configuration is used.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Configuration
|
## Configuration {#config}
|
||||||
|
|
||||||
V3 is compatible with V2 configuration options when legacy support is enabled. You should be able to run V3 with the V2 configuration without any issues.
|
V3 is compatible with V2 configuration options when legacy support is enabled. You should be able to run V3 with the V2 configuration without any issues.
|
||||||
|
|
||||||
|
@ -39,11 +35,11 @@ In order to migrate from V2 to V3, you need to update the configuration to the n
|
||||||
| `NEKO_CONTROL_PROTECTION` | `NEKO_SESSION_CONTROL_PROTECTION` |
|
| `NEKO_CONTROL_PROTECTION` | `NEKO_SESSION_CONTROL_PROTECTION` |
|
||||||
| `NEKO_HEARTBEAT_INTERVAL` | `NEKO_SESSION_HEARTBEAT_INTERVAL` |
|
| `NEKO_HEARTBEAT_INTERVAL` | `NEKO_SESSION_HEARTBEAT_INTERVAL` |
|
||||||
|
|
||||||
See the V3 [configuration options](/docs/v3/getting-started/configuration).
|
See the V3 [configuration options](/docs/v3/configuration).
|
||||||
|
|
||||||
### WebRTC Video
|
### WebRTC Video {#config.video}
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC Video](/docs/v3/reference/configuration/capture#webrtc-video).
|
See the V3 configuration options for the [WebRTC Video](/docs/v3/configuration/capture#video).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -63,9 +59,9 @@ See the V3 configuration options for the [WebRTC Video](/docs/v3/reference/confi
|
||||||
V2 did not have client-side cursor support, the cursor was always part of the video stream. In V3, the cursor is sent separately from the video stream. Therefore, when using legacy configuration, there will be two video streams created, one with the cursor (for V2 clients) and one without the cursor (for V3 clients). Please consider using new configuration options if this is not the desired behavior.
|
V2 did not have client-side cursor support, the cursor was always part of the video stream. In V3, the cursor is sent separately from the video stream. Therefore, when using legacy configuration, there will be two video streams created, one with the cursor (for V2 clients) and one without the cursor (for V3 clients). Please consider using new configuration options if this is not the desired behavior.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### WebRTC Audio
|
### WebRTC Audio {#config.audio}
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC Audio](/docs/v3/reference/configuration/capture#webrtc-audio).
|
See the V3 configuration options for the [WebRTC Audio](/docs/v3/configuration/capture#audio).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -78,9 +74,9 @@ See the V3 configuration options for the [WebRTC Audio](/docs/v3/reference/confi
|
||||||
| `NEKO_AUDIO` | `NEKO_CAPTURE_AUDIO_PIPELINE` |
|
| `NEKO_AUDIO` | `NEKO_CAPTURE_AUDIO_PIPELINE` |
|
||||||
| `NEKO_AUDIO_BITRATE` | **removed**, use custom pipeline instead |
|
| `NEKO_AUDIO_BITRATE` | **removed**, use custom pipeline instead |
|
||||||
|
|
||||||
### Broadcast
|
### Broadcast {#config.broadcast}
|
||||||
|
|
||||||
See the V3 configuration options for the [Broadcast](/docs/v3/reference/configuration/capture#broadcast).
|
See the V3 configuration options for the [Broadcast](/docs/v3/configuration/capture#broadcast).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -88,32 +84,32 @@ See the V3 configuration options for the [Broadcast](/docs/v3/reference/configur
|
||||||
| `NEKO_BROADCAST_URL` | `NEKO_CAPTURE_BROADCAST_URL` |
|
| `NEKO_BROADCAST_URL` | `NEKO_CAPTURE_BROADCAST_URL` |
|
||||||
| `NEKO_BROADCAST_AUTOSTART` | `NEKO_CAPTURE_BROADCAST_AUTOSTART` |
|
| `NEKO_BROADCAST_AUTOSTART` | `NEKO_CAPTURE_BROADCAST_AUTOSTART` |
|
||||||
|
|
||||||
### Desktop
|
### Desktop {#config.desktop}
|
||||||
|
|
||||||
See the V3 configuration options for the [Desktop](/docs/v3/reference/configuration/desktop).
|
See the V3 configuration options for the [Desktop](/docs/v3/configuration/desktop).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
| `NEKO_SCREEN` | `NEKO_DESKTOP_SCREEN` |
|
| `NEKO_SCREEN` | `NEKO_DESKTOP_SCREEN` |
|
||||||
|
|
||||||
### Authentication
|
### Authentication {#config.auth}
|
||||||
|
|
||||||
See the V3 configuration options for the [Authentication](/docs/v3/reference/configuration/authentication).
|
See the V3 configuration options for the [Authentication](/docs/v3/configuration/authentication).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
| `NEKO_PASSWORD` | `NEKO_MEMBER_MULTIUSER_USER_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
| `NEKO_PASSWORD` | `NEKO_MEMBER_MULTIUSER_USER_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
||||||
| `NEKO_PASSWORD_ADMIN` | `NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
| `NEKO_PASSWORD_ADMIN` | `NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
||||||
|
|
||||||
In order for the legacy authentication to work, you need to set [Multi-user](http://localhost:3000/docs/v3/reference/configuration/authentication#multi-user-provider).
|
In order for the legacy authentication to work, you need to set [Multi-user](http://localhost:3000/docs/v3/configuration/authentication#member.multiuser).
|
||||||
|
|
||||||
:::warning Limitation
|
:::warning Limitation
|
||||||
V2 clients might not be compatible with any other authentication provider than the `multiuser`.
|
V2 clients might not be compatible with any other authentication provider than the `multiuser`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### WebRTC
|
### WebRTC {#config.webrtc}
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC](/docs/v3/reference/configuration/webrtc).
|
See the V3 configuration options for the [WebRTC](/docs/v3/configuration/webrtc).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -125,7 +121,7 @@ See the V3 configuration options for the [WebRTC](/docs/v3/reference/configurati
|
||||||
| `NEKO_IPFETCH` | `NEKO_WEBRTC_IP_RETRIEVAL_URL` |
|
| `NEKO_IPFETCH` | `NEKO_WEBRTC_IP_RETRIEVAL_URL` |
|
||||||
| `NEKO_EPR` | `NEKO_WEBRTC_EPR` |
|
| `NEKO_EPR` | `NEKO_WEBRTC_EPR` |
|
||||||
|
|
||||||
### Full V2 Configuration Reference
|
### Full V2 Configuration Reference {#config.full}
|
||||||
|
|
||||||
Here is a full list of all the configuration options available in Neko V2 that are still available in Neko V3 with legacy support enabled.
|
Here is a full list of all the configuration options available in Neko V2 that are still available in Neko V3 with legacy support enabled.
|
||||||
|
|
||||||
|
@ -134,13 +130,13 @@ import configOptions from './help.json';
|
||||||
|
|
||||||
<Configuration configOptions={configOptions} />
|
<Configuration configOptions={configOptions} />
|
||||||
|
|
||||||
See the full [V3 configuration reference](/docs/v3/reference/configuration/#full-configuration-reference) for more details.
|
See the full [V3 configuration reference](/docs/v3/configuration/#full) for more details.
|
||||||
|
|
||||||
## API
|
## API {#api}
|
||||||
|
|
||||||
V3 is compatible with the V2 API when legacy support is enabled. There was specifically created a compatibility layer (legacy API) that allows V2 clients to connect to V3. The legacy API is enabled by default, but it can be disabled if needed. In later versions, the legacy API will be removed.
|
V3 is compatible with the V2 API when legacy support is enabled. There was specifically created a compatibility layer (legacy API) that allows V2 clients to connect to V3. The legacy API is enabled by default, but it can be disabled if needed. In later versions, the legacy API will be removed.
|
||||||
|
|
||||||
### Authentication
|
### Authentication {#api.auth}
|
||||||
|
|
||||||
In V2 there was only one authentication provider available, as in V3 called the `multiuser` provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
|
In V2 there was only one authentication provider available, as in V3 called the `multiuser` provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
|
||||||
|
|
||||||
|
@ -152,26 +148,26 @@ For every request in the legacy API, a new user session is created based on the
|
||||||
|
|
||||||
Only the `multiuser` provider (or the `noauth` provider) is supported without specifying the `?usr=` query string.
|
Only the `multiuser` provider (or the `noauth` provider) is supported without specifying the `?usr=` query string.
|
||||||
|
|
||||||
### WebSocket Messages
|
### WebSocket Messages {#api.ws}
|
||||||
|
|
||||||
Since WebSocket messages are not user-facing API, there exists no migration guide for them. When the legacy API is enabled, the user connects to the `/ws` endpoint and is handled by the compatibility layer V2 API. The V3 API is available at the `/api/ws` endpoint.
|
Since WebSocket messages are not user-facing API, there exists no migration guide for them. When the legacy API is enabled, the user connects to the `/ws` endpoint and is handled by the compatibility layer V2 API. The V3 API is available at the `/api/ws` endpoint.
|
||||||
|
|
||||||
### WebRTC API
|
### WebRTC API {#api.webrtc}
|
||||||
|
|
||||||
Since the WebRTC API is not user-facing API, there exists no migration guide for it. It has been changed to Big Endian format (previously Little Endian) to allow easier manipulation on the client side.
|
Since the WebRTC API is not user-facing API, there exists no migration guide for it. It has been changed to Big Endian format (previously Little Endian) to allow easier manipulation on the client side.
|
||||||
V2 created a new data channel on the client side, V3 creates a new data channel on the server side. That means, the server just listens for a new data channel from the client and accepts it with the legacy API handler. It overwrites the existing V3 data channel with the legacy one.
|
V2 created a new data channel on the client side, V3 creates a new data channel on the server side. That means, the server just listens for a new data channel from the client and accepts it with the legacy API handler. It overwrites the existing V3 data channel with the legacy one.
|
||||||
|
|
||||||
### HTTP API
|
### HTTP API {#api.http}
|
||||||
|
|
||||||
The V2 version had a very limited HTTP API, the V3 API is much more powerful and flexible. See the [API documentation](/docs/v3/api) for more details.
|
The V2 version had a very limited HTTP API, the V3 API is much more powerful and flexible. See the [API documentation](/docs/v3/api) for more details.
|
||||||
|
|
||||||
#### GET `/health`
|
#### GET `/health` {#api.http.health}
|
||||||
|
|
||||||
Migrated to the [Health](/docs/v3/api/healthcheck) endpoint for server health checks.
|
Migrated to the [Health](/docs/v3/api/healthcheck) endpoint for server health checks.
|
||||||
|
|
||||||
Returns `200 OK` if the server is running.
|
Returns `200 OK` if the server is running.
|
||||||
|
|
||||||
#### GET `/stats`
|
#### GET `/stats` {#api.http.stats}
|
||||||
|
|
||||||
Migrated to the [Stats](/docs/v3/api/stats) endpoint for server statistics and the [List Sessions](/docs/v3/api/sessions-get) endpoint for the session list.
|
Migrated to the [Stats](/docs/v3/api/stats) endpoint for server statistics and the [List Sessions](/docs/v3/api/sessions-get) endpoint for the session list.
|
||||||
|
|
||||||
|
@ -211,17 +207,17 @@ Returns a JSON object with the following structure:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### GET `/screenshot.jpg`
|
#### GET `/screenshot.jpg` {#api.http.screenshot}
|
||||||
|
|
||||||
Migrated to the [Screenshot](/docs/v3/api/screen-shot-image) endpoint for taking screenshots.
|
Migrated to the [Screenshot](/docs/v3/api/screen-shot-image) endpoint for taking screenshots.
|
||||||
|
|
||||||
Returns a screenshot of the desktop as a JPEG image.
|
Returns a screenshot of the desktop as a JPEG image.
|
||||||
|
|
||||||
#### GET `/file`
|
#### GET `/file` {#api.http.file}
|
||||||
|
|
||||||
The whole functionality of file transfer has been moved to a [File Transfer Plugin](/docs/v3/reference/configuration/plugins#file-transfer-plugin).
|
The whole functionality of file transfer has been moved to a [File Transfer Plugin](/docs/v3/configuration/plugins#filetransfer).
|
||||||
|
|
||||||
## Limitations
|
## Limitations {#limitations}
|
||||||
|
|
||||||
In v2, locks and muted users were managed using a simple map that tracked who set the lock and what was locked. In v3, locks are now implemented as setting options and no longer store the `session_id` of the user who applied the lock. As a result, if a client refreshes the page or reconnects, the lock information is lost, and the user who set the lock is displayed as `Somebody`.
|
In v2, locks and muted users were managed using a simple map that tracked who set the lock and what was locked. In v3, locks are now implemented as setting options and no longer store the `session_id` of the user who applied the lock. As a result, if a client refreshes the page or reconnects, the lock information is lost, and the user who set the lock is displayed as `Somebody`.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 2
|
description: A quick guide to get you started with Neko.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Quick Start Guide
|
# Quick Start
|
||||||
|
|
||||||
Neko is easy to use and requires no technical expertise to get started. All you need to do is download the Docker image and you're ready to go:
|
Neko is easy to use and requires no technical expertise to get started. All you need to do is download the Docker image and you're ready to go:
|
||||||
|
|
||||||
|
@ -55,7 +55,8 @@ Neko is easy to use and requires no technical expertise to get started. All you
|
||||||
Run `nano docker-compose.yaml` to edit the settings, then press `ctrl+x` to exit and save the file.
|
Run `nano docker-compose.yaml` to edit the settings, then press `ctrl+x` to exit and save the file.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Well-known cloud providers
|
## Well-known cloud providers {#providers}
|
||||||
|
|
||||||
* [Hetzner Cloud](https://www.hetzner.com/cloud)
|
* [Hetzner Cloud](https://www.hetzner.com/cloud)
|
||||||
* [Digital Ocean](https://www.digitalocean.com/)
|
* [Digital Ocean](https://www.digitalocean.com/)
|
||||||
* [Contabo](https://contabo.com/)
|
* [Contabo](https://contabo.com/)
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"position": 1,
|
|
||||||
"label": "Configuration",
|
|
||||||
"collapsed": false
|
|
||||||
}
|
|
|
@ -1,19 +1,19 @@
|
||||||
# Release Notes
|
# Release Notes
|
||||||
|
|
||||||
## [n.eko v2.9.0](https://github.com/m1k1o/neko/releases/tag/v2.9.0)
|
## [n.eko v2.9.0](https://github.com/m1k1o/neko/releases/tag/v2.9.0) {#v2.9.0}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.9.0-feats}
|
||||||
- Added nvidia support for firefox.
|
- Added nvidia support for firefox.
|
||||||
- Added `?lang=<lang>` parameter to the URL, which will set the language of the interface (by @mbattista).
|
- Added `?lang=<lang>` parameter to the URL, which will set the language of the interface (by @mbattista).
|
||||||
- Added `?show_side=1` and `?mute_chat=1` parameter to the URL, for chat mute and show side (by @mbattista).
|
- Added `?show_side=1` and `?mute_chat=1` parameter to the URL, for chat mute and show side (by @mbattista).
|
||||||
- Added `NEKO_BROADCAST_AUTOSTART` to automatically start or do not start broadcasting when the room is created. By default, it is set to `true` because it was the previous behavior.
|
- Added `NEKO_BROADCAST_AUTOSTART` to automatically start or do not start broadcasting when the room is created. By default, it is set to `true` because it was the previous behavior.
|
||||||
- Added new translations (🇹🇼,🇯🇵) by various people.
|
- Added new translations (🇹🇼,🇯🇵) by various people.
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.9.0-bugs}
|
||||||
- Fix incorrect version sorting for chromium, microsoft-edge, opera and ungoogledchromium.
|
- Fix incorrect version sorting for chromium, microsoft-edge, opera and ungoogledchromium.
|
||||||
- Fix buffer overflow in Gstreamer log function [#382](https://github.com/m1k1o/neko/pull/382) (by @tt2468).
|
- Fix buffer overflow in Gstreamer log function [#382](https://github.com/m1k1o/neko/pull/382) (by @tt2468).
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.9.0-misc}
|
||||||
- Added RTMP broadcast support to nvidia docker image [#274](https://github.com/m1k1o/neko/issues/274).
|
- Added RTMP broadcast support to nvidia docker image [#274](https://github.com/m1k1o/neko/issues/274).
|
||||||
- Ensured that paths are writable by neko user [#277](https://github.com/m1k1o/neko/issues/277).
|
- Ensured that paths are writable by neko user [#277](https://github.com/m1k1o/neko/issues/277).
|
||||||
- Git commit and tag are now included in the build when creating a docker image.
|
- Git commit and tag are now included in the build when creating a docker image.
|
||||||
|
@ -22,9 +22,9 @@
|
||||||
- Add glib main loop to capture manager [#383](https://github.com/m1k1o/neko/pull/383) (by @tt2468).
|
- Add glib main loop to capture manager [#383](https://github.com/m1k1o/neko/pull/383) (by @tt2468).
|
||||||
- Sync clipboard only if in focus.
|
- Sync clipboard only if in focus.
|
||||||
|
|
||||||
## [n.eko v2.8.0](https://github.com/m1k1o/neko/releases/tag/v2.8.0)
|
## [n.eko v2.8.0](https://github.com/m1k1o/neko/releases/tag/v2.8.0) {#v2.8.0}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.8.0-feats}
|
||||||
- Added AV1 tag, metadata and pipeline. Unfortunately does not work yet, since the encoding is way too slow (by @mbattista).
|
- Added AV1 tag, metadata and pipeline. Unfortunately does not work yet, since the encoding is way too slow (by @mbattista).
|
||||||
- Added `m1k1o/neko:kde` tag as an alternative to `m1k1o/neko:xfce`.
|
- Added `m1k1o/neko:kde` tag as an alternative to `m1k1o/neko:xfce`.
|
||||||
- New VirtualGL version 3.1 was released, adding support for Chromium browsers to use Nvidia GPU acceleration!
|
- New VirtualGL version 3.1 was released, adding support for Chromium browsers to use Nvidia GPU acceleration!
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
- Added NVENC support, hardware h264 encoding for Nvidia GPUs!
|
- Added NVENC support, hardware h264 encoding for Nvidia GPUs!
|
||||||
- Fixed an issue where `nvh264enc` did not send SPS and PPS NAL units (by @mbattista).
|
- Fixed an issue where `nvh264enc` did not send SPS and PPS NAL units (by @mbattista).
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.8.0-bugs}
|
||||||
- Fixed TCP mux occasional freeze by adding write buffer to it.
|
- Fixed TCP mux occasional freeze by adding write buffer to it.
|
||||||
- Fixed stereo problem in chromium-based browsers, where it was only as mono by adding `stereo=1` to opus SDP to clients answer.
|
- Fixed stereo problem in chromium-based browsers, where it was only as mono by adding `stereo=1` to opus SDP to clients answer.
|
||||||
- Fixed keysym mapping for unknown keycodes, which was causing some key combinations to not work on some keyboards.
|
- Fixed keysym mapping for unknown keycodes, which was causing some key combinations to not work on some keyboards.
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
- Fixed client side webrtc ICE gathering, so that neko can be used without exposed ports, only with STUN and TURN servers.
|
- Fixed client side webrtc ICE gathering, so that neko can be used without exposed ports, only with STUN and TURN servers.
|
||||||
- Fixed play state synchronization, when autoplay is disabled.
|
- Fixed play state synchronization, when autoplay is disabled.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.8.0-misc}
|
||||||
- Updated to go 1.19 and Node 18, removed go-events as dependency (by @mbattista).
|
- Updated to go 1.19 and Node 18, removed go-events as dependency (by @mbattista).
|
||||||
- Added adaptive framerate which now streams in the framerate you selected from the dropdown.
|
- Added adaptive framerate which now streams in the framerate you selected from the dropdown.
|
||||||
- Improved chinese and korean characters support.
|
- Improved chinese and korean characters support.
|
||||||
|
@ -51,9 +51,9 @@
|
||||||
- Renamed pulseaudio sink from `auto_null` to `audio_output`, because it was ignored by KDE.
|
- Renamed pulseaudio sink from `auto_null` to `audio_output`, because it was ignored by KDE.
|
||||||
- Pulseaudio is now configured using environment variables, so that users can mount `/home/neko` without losing audio configuration.
|
- Pulseaudio is now configured using environment variables, so that users can mount `/home/neko` without losing audio configuration.
|
||||||
|
|
||||||
## [n.eko v2.7](https://github.com/m1k1o/neko/releases/tag/v2.7)
|
## [n.eko v2.7](https://github.com/m1k1o/neko/releases/tag/v2.7) {#v2.7}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.7-feats}
|
||||||
- Added `m1k1o/neko:vivaldi` tag (thanks @Xeddius).
|
- Added `m1k1o/neko:vivaldi` tag (thanks @Xeddius).
|
||||||
- Added `m1k1o/neko:opera` tag (thanks @prophetofxenu).
|
- Added `m1k1o/neko:opera` tag (thanks @prophetofxenu).
|
||||||
- Added `NEKO_PATH_PREFIX`.
|
- Added `NEKO_PATH_PREFIX`.
|
||||||
|
@ -61,27 +61,27 @@
|
||||||
- Added emoji support (by @yesBad).
|
- Added emoji support (by @yesBad).
|
||||||
- Added file transfer (by @prophetofxenu).
|
- Added file transfer (by @prophetofxenu).
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.7-misc}
|
||||||
- Server: Split `remote` to `desktop` and `capture`.
|
- Server: Split `remote` to `desktop` and `capture`.
|
||||||
- Server: Refactored `xorg` - added `xevent` and clipboard is handled as event (no looped polling anymore).
|
- Server: Refactored `xorg` - added `xevent` and clipboard is handled as event (no looped polling anymore).
|
||||||
- Introduced `NEKO_AUDIO_CODEC=` and `NEKO_VIDEO_CODEC=` as a new way of setting codecs.
|
- Introduced `NEKO_AUDIO_CODEC=` and `NEKO_VIDEO_CODEC=` as a new way of setting codecs.
|
||||||
- Added CORS.
|
- Added CORS.
|
||||||
- Opera versions are not hardcoded in Dockerfile anymore but automatically are fetch latest.
|
- Opera versions are not hardcoded in Dockerfile anymore but automatically are fetch latest.
|
||||||
|
|
||||||
## [n.eko v2.6](https://github.com/m1k1o/neko/releases/tag/v2.6)
|
## [n.eko v2.6](https://github.com/m1k1o/neko/releases/tag/v2.6) {#v2.6}
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.6-bugs}
|
||||||
- Fixed fullscreen incompatibility for Safari [#121](https://github.com/m1k1o/neko/issues/121).
|
- Fixed fullscreen incompatibility for Safari [#121](https://github.com/m1k1o/neko/issues/121).
|
||||||
- Fixed bad emoji matching for e.g. `:+1:` and `:100:` with new regex `/^:([^:\s]+):/`.
|
- Fixed bad emoji matching for e.g. `:+1:` and `:100:` with new regex `/^:([^:\s]+):/`.
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.6-feats}
|
||||||
- Added `m1k1o/neko:microsoft-edge` tag.
|
- Added `m1k1o/neko:microsoft-edge` tag.
|
||||||
- Fixed clipboard sync in chromium based browsers.
|
- Fixed clipboard sync in chromium based browsers.
|
||||||
- Added support for implicit control (using `NEKO_IMPLICITCONTROL=1`). That means, users do not need to request control prior usage.
|
- Added support for implicit control (using `NEKO_IMPLICITCONTROL=1`). That means, users do not need to request control prior usage.
|
||||||
- Automatically start broadcasting using `NEKO_BROADCAST_URL=rtmp://your-rtmp-endpoint/live` (thanks @konsti).
|
- Automatically start broadcasting using `NEKO_BROADCAST_URL=rtmp://your-rtmp-endpoint/live` (thanks @konsti).
|
||||||
- Added `m1k1o/neko:remmina` tag (by @lowne).
|
- Added `m1k1o/neko:remmina` tag (by @lowne).
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.6-misc}
|
||||||
- Automatic WebRTC SDP negotiation using onnegotiationneeded handlers. This allows adding/removing track on demand in a session.
|
- Automatic WebRTC SDP negotiation using onnegotiationneeded handlers. This allows adding/removing track on demand in a session.
|
||||||
- Added UDP and TCP mux for WebRTC connection. It should handle multiple peers.
|
- Added UDP and TCP mux for WebRTC connection. It should handle multiple peers.
|
||||||
- Broadcast status change is sent to all admins now.
|
- Broadcast status change is sent to all admins now.
|
||||||
|
@ -91,20 +91,20 @@
|
||||||
- Font Awesome and Sweetalert2 upgraded to newest major version.
|
- Font Awesome and Sweetalert2 upgraded to newest major version.
|
||||||
- Add chinese characters support.
|
- Add chinese characters support.
|
||||||
|
|
||||||
## [n.eko v2.5](https://github.com/m1k1o/neko/releases/tag/v2.5)
|
## [n.eko v2.5](https://github.com/m1k1o/neko/releases/tag/v2.5) {#v2.5}
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.5-bugs}
|
||||||
- Fix ungoogled-chromium auto build bug.
|
- Fix ungoogled-chromium auto build bug.
|
||||||
- Audio on iOS works now! Apparently only for 15+ though [#62](https://github.com/m1k1o/neko/issues/62).
|
- Audio on iOS works now! Apparently only for 15+ though [#62](https://github.com/m1k1o/neko/issues/62).
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.5-feats}
|
||||||
- Lock controls for users, globally.
|
- Lock controls for users, globally.
|
||||||
- Ability to set locks from config `NEKO_LOCKS=control login`.
|
- Ability to set locks from config `NEKO_LOCKS=control login`.
|
||||||
- Added control protection - users can gain control only if at least one admin is in the room `NEKO_CONTROL_PROTECTION=true`.
|
- Added control protection - users can gain control only if at least one admin is in the room `NEKO_CONTROL_PROTECTION=true`.
|
||||||
- Emotes sending on mouse down holding.
|
- Emotes sending on mouse down holding.
|
||||||
- Include `banned`, `locked`, `server_started_at`, `last_admin_left_at`, `last_user_left_at`, `control_protection` data in stats.
|
- Include `banned`, `locked`, `server_started_at`, `last_admin_left_at`, `last_user_left_at`, `control_protection` data in stats.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.5-misc}
|
||||||
- ARM-based images not bound to Raspberry Pi only.
|
- ARM-based images not bound to Raspberry Pi only.
|
||||||
- Repository cleanup, renamed `.m1k1o` to `.docker`.
|
- Repository cleanup, renamed `.m1k1o` to `.docker`.
|
||||||
- Updated docs, now available at https://neko.m1k1o.net.
|
- Updated docs, now available at https://neko.m1k1o.net.
|
||||||
|
@ -114,23 +114,23 @@
|
||||||
- Sync player play/pause/mute/umpute/volume state with store (beneficial for mobiles when using fullscreen mode).
|
- Sync player play/pause/mute/umpute/volume state with store (beneficial for mobiles when using fullscreen mode).
|
||||||
- Automatic WebRTC SDP negotiation using `onnegotiationneeded` handlers. This allows adding/removing track on demand in a session.
|
- Automatic WebRTC SDP negotiation using `onnegotiationneeded` handlers. This allows adding/removing track on demand in a session.
|
||||||
|
|
||||||
## [n.eko v2.4](https://github.com/m1k1o/neko/releases/tag/v2.4)
|
## [n.eko v2.4](https://github.com/m1k1o/neko/releases/tag/v2.4) {#v2.4}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.4-feats}
|
||||||
- Show red dot badge on sidebar toggle if there are new messages, and user can't see them.
|
- Show red dot badge on sidebar toggle if there are new messages, and user can't see them.
|
||||||
- Added `m1k1o/neko:brave` tag.
|
- Added `m1k1o/neko:brave` tag.
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.4-bugs}
|
||||||
- Fixed keyboard mapping on macOS, when CMD could not be used for copy & paste.
|
- Fixed keyboard mapping on macOS, when CMD could not be used for copy & paste.
|
||||||
- Fixed stop signal sent by supervisor to gracefully shut down neko server.
|
- Fixed stop signal sent by supervisor to gracefully shut down neko server.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.4-misc}
|
||||||
- Switched to the latest Firefox version instead of esr.
|
- Switched to the latest Firefox version instead of esr.
|
||||||
- Fixed very fast scroll speed on macOS.
|
- Fixed very fast scroll speed on macOS.
|
||||||
- Broadcast pipeline errors are reported to the user.
|
- Broadcast pipeline errors are reported to the user.
|
||||||
- On stopping server all websocket connections are going to be gracefully disconnected.
|
- On stopping server all websocket connections are going to be gracefully disconnected.
|
||||||
|
|
||||||
### Other changes
|
### Other changes {#v2.4-other}
|
||||||
- Upgraded dependencies (server, client),
|
- Upgraded dependencies (server, client),
|
||||||
- Don't kill webrtc on temporary network issues #48.
|
- Don't kill webrtc on temporary network issues #48.
|
||||||
- Custom ipfetch #63.
|
- Custom ipfetch #63.
|
||||||
|
@ -138,9 +138,9 @@
|
||||||
- Refactored RTMP broadcast design #88.
|
- Refactored RTMP broadcast design #88.
|
||||||
- Based on Debian 11 #91.
|
- Based on Debian 11 #91.
|
||||||
|
|
||||||
## [n.eko v2.3](https://github.com/m1k1o/neko/releases/tag/v2.3)
|
## [n.eko v2.3](https://github.com/m1k1o/neko/releases/tag/v2.3) {#v2.3}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.3-feats}
|
||||||
- Added simple language picker.
|
- Added simple language picker.
|
||||||
- Added `?usr=<display-name>` that will prefill username. This allows creating auto-join links.
|
- Added `?usr=<display-name>` that will prefill username. This allows creating auto-join links.
|
||||||
- Added `?cast=1` that will hide all control and show only video.
|
- Added `?cast=1` that will hide all control and show only video.
|
||||||
|
@ -149,22 +149,22 @@
|
||||||
- Added bunch of translations (🇸🇰, 🇪🇸, 🇸🇪, 🇳🇴, 🇫🇷) by various people.
|
- Added bunch of translations (🇸🇰, 🇪🇸, 🇸🇪, 🇳🇴, 🇫🇷) by various people.
|
||||||
- Added `m1k1o/neko:google-chrome` tag.
|
- Added `m1k1o/neko:google-chrome` tag.
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.3-bugs}
|
||||||
- Upgraded and fixed emojis to a new major version.
|
- Upgraded and fixed emojis to a new major version.
|
||||||
- Fixed bad `keymap -> keysym` translation to respect active modifiers (#45, with @mbattista).
|
- Fixed bad `keymap -> keysym` translation to respect active modifiers (#45, with @mbattista).
|
||||||
- Respecting `NEKO_DEBUG` env variable.
|
- Respecting `NEKO_DEBUG` env variable.
|
||||||
- Fullscreen support for iOS devices.
|
- Fullscreen support for iOS devices.
|
||||||
- Added `chrome-sandbox` to fix weird bug when chromium didn't start.
|
- Added `chrome-sandbox` to fix weird bug when chromium didn't start.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.3-misc}
|
||||||
- Arguments in broadcast pipeline are optional, not positional and can be repeated `{url} {device} {display}`.
|
- Arguments in broadcast pipeline are optional, not positional and can be repeated `{url} {device} {display}`.
|
||||||
- Chat messages are dense, when repeated, they are joined together.
|
- Chat messages are dense, when repeated, they are joined together.
|
||||||
- While IP address fetching is now proxy ignored.
|
- While IP address fetching is now proxy ignored.
|
||||||
- Start unmuted on reconnects and auto unmute on any control attempt.
|
- Start unmuted on reconnects and auto unmute on any control attempt.
|
||||||
|
|
||||||
## [n.eko v2.2](https://github.com/m1k1o/neko/releases/tag/v2.2)
|
## [n.eko v2.2](https://github.com/m1k1o/neko/releases/tag/v2.2) {#v2.2}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.2-feats}
|
||||||
- Added limited support for some mobile browsers with `playsinline` attribute.
|
- Added limited support for some mobile browsers with `playsinline` attribute.
|
||||||
- Added `VIDEO_BITRATE` and `AUDIO_BITRATE` in kbit/s to control stream quality (in collaboration with @mbattista).
|
- Added `VIDEO_BITRATE` and `AUDIO_BITRATE` in kbit/s to control stream quality (in collaboration with @mbattista).
|
||||||
- Added `MAX_FPS`, where you can specify max WebRTC frame rate. When set to `0`, frame rate won't be capped and you can enjoy your real `60fps` experience. Originally, it was constant at `25fps`.
|
- Added `MAX_FPS`, where you can specify max WebRTC frame rate. When set to `0`, frame rate won't be capped and you can enjoy your real `60fps` experience. Originally, it was constant at `25fps`.
|
||||||
|
@ -174,14 +174,14 @@
|
||||||
- Added `m1k1o/neko:xfce` tag, as an non video related showcase (by @mbattista).
|
- Added `m1k1o/neko:xfce` tag, as an non video related showcase (by @mbattista).
|
||||||
- Added ARM-based images, for Raspberry Pi support (by @mbattista).
|
- Added ARM-based images, for Raspberry Pi support (by @mbattista).
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.2-bugs}
|
||||||
- Fixed h264 pipelines bugs (by @mbattista).
|
- Fixed h264 pipelines bugs (by @mbattista).
|
||||||
- Fixed sessions manager thread safety by adding mutexes (caused panic in rare edge cases).
|
- Fixed sessions manager thread safety by adding mutexes (caused panic in rare edge cases).
|
||||||
- Now when user gets kicked, he won't join as a ghost user again but will be logged out.
|
- Now when user gets kicked, he won't join as a ghost user again but will be logged out.
|
||||||
- **iOS compatibility!** Fixed really strange CSS bug, which prevented iOS from loading the video.
|
- **iOS compatibility!** Fixed really strange CSS bug, which prevented iOS from loading the video.
|
||||||
- Proper disconnect only once with unsubscribing events. When webrtc fails, user won't be logged in without username again.
|
- Proper disconnect only once with unsubscribing events. When webrtc fails, user won't be logged in without username again.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.2-misc}
|
||||||
- Versions bumped: Go 16, Node.js 14 (by @mbattista).
|
- Versions bumped: Go 16, Node.js 14 (by @mbattista).
|
||||||
- Remove HTML tags from user name.
|
- Remove HTML tags from user name.
|
||||||
- Upgraded `pion/webrtc` to v3 (by @mbattista).
|
- Upgraded `pion/webrtc` to v3 (by @mbattista).
|
||||||
|
@ -191,9 +191,9 @@
|
||||||
- Abiltiy to include neko as a component in another Vue.Js project (by @gbrian).
|
- Abiltiy to include neko as a component in another Vue.Js project (by @gbrian).
|
||||||
- Added HEALTHCHECK to Dockerfile.
|
- Added HEALTHCHECK to Dockerfile.
|
||||||
|
|
||||||
## [n.eko v2.1](https://github.com/m1k1o/neko/releases/tag/v2.1)
|
## [n.eko v2.1](https://github.com/m1k1o/neko/releases/tag/v2.1) {#v2.1}
|
||||||
|
|
||||||
### New Features
|
### New Features {#v2.1-feats}
|
||||||
- Clipboard button with text area - for browsers, that don't support clipboard syncing or for HTTP.
|
- Clipboard button with text area - for browsers, that don't support clipboard syncing or for HTTP.
|
||||||
- Keyboard modifier state synchronization (Num Lock, Caps Lock, Scroll Lock) for each hosting.
|
- Keyboard modifier state synchronization (Num Lock, Caps Lock, Scroll Lock) for each hosting.
|
||||||
- Added chromium ungoogled (with h265 support) an kept up to date by @whalehub.
|
- Added chromium ungoogled (with h265 support) an kept up to date by @whalehub.
|
||||||
|
@ -201,11 +201,11 @@
|
||||||
- Added RTMP broadcast. Enables broadcasting neko screen to local RTMP server, YouTube or Twitch.
|
- Added RTMP broadcast. Enables broadcasting neko screen to local RTMP server, YouTube or Twitch.
|
||||||
- Stereo sound (works properly only in Firefox host).
|
- Stereo sound (works properly only in Firefox host).
|
||||||
|
|
||||||
### Bugs
|
### Bugs {#v2.1-bugs}
|
||||||
- Fixed minor gst pipeline bug.
|
- Fixed minor gst pipeline bug.
|
||||||
- Locked screen only for users, admins can still join.
|
- Locked screen only for users, admins can still join.
|
||||||
|
|
||||||
### Misc
|
### Misc {#v2.1-misc}
|
||||||
- Custom docker workflow.
|
- Custom docker workflow.
|
||||||
- Based on debian buster instead of stretch.
|
- Based on debian buster instead of stretch.
|
||||||
- Custom avatars without any 3rd party depenency.
|
- Custom avatars without any 3rd party depenency.
|
||||||
|
@ -213,8 +213,8 @@
|
||||||
- No pointer events for notify bars.
|
- No pointer events for notify bars.
|
||||||
- Disable debug mode by default.
|
- Disable debug mode by default.
|
||||||
|
|
||||||
## [n.eko v2.0](https://github.com/nurdism/neko/releases/tag/2.0.0)
|
## [n.eko v2.0](https://github.com/nurdism/neko/releases/tag/2.0.0) {#v2.0.0}
|
||||||
|
|
||||||
## [n.eko v1.1](https://github.com/nurdism/neko/releases/tag/1.1.0)
|
## [n.eko v1.1](https://github.com/nurdism/neko/releases/tag/1.1.0) {#v1.1.0}
|
||||||
|
|
||||||
## [n.eko v1.0](https://github.com/nurdism/neko/releases/tag/1.0.0)
|
## [n.eko v1.0](https://github.com/nurdism/neko/releases/tag/1.0.0) {#v1.0.0}
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# Reverse Proxy Setup
|
# Reverse Proxy Setup
|
||||||
|
|
||||||
If you want to run Neko behind a reverse proxy, you can use the following examples to configure your server.
|
If you want to run Neko behind a reverse proxy, you can use the following examples to configure your server.
|
||||||
|
@ -10,7 +6,7 @@ If you want to run Neko behind a reverse proxy, you can use the following exampl
|
||||||
Do not forget to enable `server.proxy=true` in your `config.yml` file to allow the server to trust the proxy headers.
|
Do not forget to enable `server.proxy=true` in your `config.yml` file to allow the server to trust the proxy headers.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Traefik v2
|
## Traefik v2 {#traefik-v2}
|
||||||
|
|
||||||
See the example below for a `docker-compose.yml` file.
|
See the example below for a `docker-compose.yml` file.
|
||||||
|
|
||||||
|
@ -25,7 +21,7 @@ labels:
|
||||||
|
|
||||||
For more information, check out the [official Traefik documentation](https://doc.traefik.io/traefik/v2.0/routing/routers/). For SSL, see the [official Traefik SSL documentation](https://doc.traefik.io/traefik/v2.0/https/acme/).
|
For more information, check out the [official Traefik documentation](https://doc.traefik.io/traefik/v2.0/routing/routers/). For SSL, see the [official Traefik SSL documentation](https://doc.traefik.io/traefik/v2.0/https/acme/).
|
||||||
|
|
||||||
## Nginx
|
## Nginx {#nginx}
|
||||||
|
|
||||||
See the example below for an Nginx configuration file.
|
See the example below for an Nginx configuration file.
|
||||||
|
|
||||||
|
@ -48,7 +44,7 @@ server {
|
||||||
|
|
||||||
For more information, check out the [official Nginx documentation](https://nginx.org/en/docs/beginners_guide.html). For SSL, see the [official Nginx SSL documentation](https://nginx.org/en/docs/http/configuring_https_servers.html) or use [certbot](https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal).
|
For more information, check out the [official Nginx documentation](https://nginx.org/en/docs/beginners_guide.html). For SSL, see the [official Nginx SSL documentation](https://nginx.org/en/docs/http/configuring_https_servers.html) or use [certbot](https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal).
|
||||||
|
|
||||||
## Apache
|
## Apache {#apache}
|
||||||
|
|
||||||
To do this, you need to have a running Apache server. Navigate to the `/etc/apache2/sites-available` folder and create a new configuration file, for example, `neko.conf`.
|
To do this, you need to have a running Apache server. Navigate to the `/etc/apache2/sites-available` folder and create a new configuration file, for example, `neko.conf`.
|
||||||
After creating the new configuration file, you can use the example below and paste it in. Some things may vary on your machine, so read through and modify it if needed.
|
After creating the new configuration file, you can use the example below and paste it in. Some things may vary on your machine, so read through and modify it if needed.
|
||||||
|
@ -103,7 +99,7 @@ After creating your new configuration file, just use `sudo a2ensite neko.conf` a
|
||||||
|
|
||||||
See the [official Apache documentation](https://httpd.apache.org/docs/2.4/vhosts/examples.html) for more information. For SSL, see the [official Apache SSL documentation](https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html) or use [certbot](https://certbot.eff.org/instructions?ws=apache&os=snap).
|
See the [official Apache documentation](https://httpd.apache.org/docs/2.4/vhosts/examples.html) for more information. For SSL, see the [official Apache SSL documentation](https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html) or use [certbot](https://certbot.eff.org/instructions?ws=apache&os=snap).
|
||||||
|
|
||||||
## Caddy
|
## Caddy {#caddy}
|
||||||
|
|
||||||
See the example below for a Caddyfile.
|
See the example below for a Caddyfile.
|
||||||
|
|
||||||
|
@ -115,7 +111,7 @@ https://example.com {
|
||||||
|
|
||||||
For more information, check out the [official Caddy documentation](https://caddyserver.com/docs/caddyfile). For SSL, see the [official Caddy automatic HTTPS documentation](https://caddyserver.com/docs/automatic-https).
|
For more information, check out the [official Caddy documentation](https://caddyserver.com/docs/caddyfile). For SSL, see the [official Caddy automatic HTTPS documentation](https://caddyserver.com/docs/automatic-https).
|
||||||
|
|
||||||
## HAProxy
|
## HAProxy {#haproxy}
|
||||||
|
|
||||||
Using your frontend section *(mine is called http-in)*, add the ACL to redirect correctly to your Neko instance.
|
Using your frontend section *(mine is called http-in)*, add the ACL to redirect correctly to your Neko instance.
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
|
|
||||||
The roadmap outlines the future development plans for Neko. It is divided into three phases, each focusing on a different aspect of the project.
|
The roadmap outlines the future development plans for Neko. It is divided into three phases, each focusing on a different aspect of the project.
|
||||||
|
|
||||||
## Phase 1 - Server migration to V3
|
## Phase 1 - Server migration to V3 {#phase-1}
|
||||||
|
|
||||||
This phase was successfully completed with the release of Neko V3.0.0. The [m1k1o/neko](https://github.com/m1k1o/neko) server was merged with the archived [demodesk/neko](https://github.com/demodesk/neko) server, and the new server was released as V3.0.0. A compatibility layer was added to support V2 clients.
|
This phase was successfully completed with the release of Neko V3.0.0. The [m1k1o/neko](https://github.com/m1k1o/neko) server was merged with the archived [demodesk/neko](https://github.com/demodesk/neko) server, and the new server was released as V3.0.0. A compatibility layer was added to support V2 clients.
|
||||||
|
|
||||||
## Phase 2 - Client rewrite to V3
|
## Phase 2 - Client rewrite to V3 {#phase-2}
|
||||||
|
|
||||||
The client rewrite is the next big step in the development of Neko. The V2 client uses Vue2, which reached [end of life](https://v2.vuejs.org/eol/) a long time ago. The new client will be based on Vue3 and will be more modular and easier to maintain.
|
The client rewrite is the next big step in the development of Neko. The V2 client uses Vue2, which reached [end of life](https://v2.vuejs.org/eol/) a long time ago. The new client will be based on Vue3 and will be more modular and easier to maintain.
|
||||||
|
|
||||||
While the V2 client focused on the user interface, the V3 client will focus on extensibility in the form of components. This means that the client will be able to be loaded seamlessly in any existing application, and the components will be able to be used in any other Vue3 application. For traditional users, the client will still be available as a standalone application with all the known features.
|
While the V2 client focused on the user interface, the V3 client will focus on extensibility in the form of components. This means that the client will be able to be loaded seamlessly in any existing application, and the components will be able to be used in any other Vue3 application. For traditional users, the client will still be available as a standalone application with all the known features.
|
||||||
|
|
||||||
## Phase 3 - Modularization
|
## Phase 3 - Modularization {#phase-3}
|
||||||
|
|
||||||
The V3 client and server will be modularized to allow for easier maintenance and extensibility.
|
The V3 client and server will be modularized to allow for easier maintenance and extensibility.
|
||||||
|
|
||||||
- The client should be split into a library TypeScript component **that does not use Vue.js** or any library and can be imported by any project. It should be as easy to integrate into a custom project as embedding a video player. Similar to how [demodesk/neko-client](https://github.com/demodesk/neko-client) is built, but without Vue.js.
|
- The client should be split into a library TypeScript component **that does not use Vue.js** or any library and can be imported by any project. It should be as easy to integrate into a custom project as embedding a video player. Similar to how [demodesk/neko-client](https://github.com/demodesk/neko-client) is built, but without Vue.js.
|
||||||
- The **connection**, **media streaming**, and **control** should be extracted as an interface so that it can be implemented by various protocols, not just WebSockets+WebRTC. That would elevate this project from just a shared virtual environment to basically a video streaming server with built-in tools for feedback and out-of-band communication (such as natively binding to RDP/VNC protocols, controlling drones/robots/PTZ cameras/industrial devices remotely). Since the controlling layer could be just a plugin, it does not need to rely on only keyboard and mouse but would allow plugging in gamepads, joysticks, or even Virtual Reality glasses (anything).
|
- The **connection**, **media streaming**, and **control** should be extracted as an interface so that it can be implemented by various protocols, not just WebSockets+WebRTC. That would elevate this project from just a shared virtual environment to basically a video streaming server with built-in tools for feedback and out-of-band communication (such as natively binding to RDP/VNC protocols, controlling drones/robots/PTZ cameras/industrial devices remotely). Since the controlling layer could be just a plugin, it does not need to rely on only keyboard and mouse but would allow plugging in gamepads, joysticks, or even Virtual Reality glasses (anything).
|
||||||
|
|
||||||
### Connection
|
### Connection {#phase-3-connection}
|
||||||
|
|
||||||
Neko can connect to the backend using multiple channels. Therefore API users should not be exposed to WebSocket internals.
|
Neko can connect to the backend using multiple channels. Therefore API users should not be exposed to WebSocket internals.
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ And about connection type:
|
||||||
- `websocket` - server sends updates to the client using WebSockets.
|
- `websocket` - server sends updates to the client using WebSockets.
|
||||||
- ... others (e.g. MQTT...)
|
- ... others (e.g. MQTT...)
|
||||||
|
|
||||||
### Media streaming
|
### Media streaming {#phase-3-media-streaming}
|
||||||
|
|
||||||
For media streaming, we implement a similar approach with the following streaming backends:
|
For media streaming, we implement a similar approach with the following streaming backends:
|
||||||
- `none` - no media streaming is currently streamed.
|
- `none` - no media streaming is currently streamed.
|
||||||
|
@ -49,7 +49,7 @@ Various media streaming backends can have various features. For example, WebRTC
|
||||||
They can be selected based on the user's device capabilities, network conditions, and server capabilities.
|
They can be selected based on the user's device capabilities, network conditions, and server capabilities.
|
||||||
There must be a single interface that all streaming backends must satisfy and it is their only communication channel with the rest of the system.
|
There must be a single interface that all streaming backends must satisfy and it is their only communication channel with the rest of the system.
|
||||||
|
|
||||||
### Control (Human interface device)
|
### Control (Human interface device) {#phase-3-control}
|
||||||
|
|
||||||
The user can control the target system using various human interface devices. The user can use a keyboard, mouse, gamepad, touch screen, or any other device that can be used to control the system. Custom or virtual devices can be used as well.
|
The user can control the target system using various human interface devices. The user can use a keyboard, mouse, gamepad, touch screen, or any other device that can be used to control the system. Custom or virtual devices can be used as well.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Neko UI loads, but you don't see the screen, and it gives you a `connection timeout` or `disconnected` error?
|
Neko UI loads, but you don't see the screen, and it gives you a `connection timeout` or `disconnected` error?
|
||||||
|
|
||||||
## Test your client
|
## Test your client {#client}
|
||||||
|
|
||||||
Some browsers may block WebRTC access by default. You can check if it is enabled by going to `about:webrtc` or `chrome://webrtc-internals` in your browser.
|
Some browsers may block WebRTC access by default. You can check if it is enabled by going to `about:webrtc` or `chrome://webrtc-internals` in your browser.
|
||||||
|
|
||||||
|
@ -13,11 +13,11 @@ Check if your extensions are not blocking WebRTC access. The following extension
|
||||||
|
|
||||||
Test whether your client [supports](https://www.webrtc-experiment.com/DetectRTC/) and can [connect to WebRTC](https://www.webcasts.com/webrtc/).
|
Test whether your client [supports](https://www.webrtc-experiment.com/DetectRTC/) and can [connect to WebRTC](https://www.webcasts.com/webrtc/).
|
||||||
|
|
||||||
## Networking
|
## Networking {#networking}
|
||||||
|
|
||||||
If you are absolutely sure that your client is working correctly, then most likely your networking is not set up correctly.
|
If you are absolutely sure that your client is working correctly, then most likely your networking is not set up correctly.
|
||||||
|
|
||||||
### Check if your ports are correctly exposed in Docker
|
### Check if your ports are correctly exposed in Docker {#exposed-ports}
|
||||||
|
|
||||||
Check that your ephemeral port range `NEKO_WEBRTC_EPR` is correctly exposed as a `/udp` port range.
|
Check that your ephemeral port range `NEKO_WEBRTC_EPR` is correctly exposed as a `/udp` port range.
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ services:
|
||||||
NEKO_WEBRTC_ICELITE: 1
|
NEKO_WEBRTC_ICELITE: 1
|
||||||
```
|
```
|
||||||
|
|
||||||
### Validate UDP ports reachability
|
### Validate UDP ports reachability {#reachable-ports}
|
||||||
|
|
||||||
Ensure that your ports are reachable through your external IP.
|
Ensure that your ports are reachable through your external IP.
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ sudo apt-get install netcat
|
||||||
```
|
```
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### Check if your external IP was determined correctly
|
### Check if your external IP was determined correctly {#external-ip}
|
||||||
|
|
||||||
One of the first logs, when the server starts, writes down your external IP that will be sent to your clients to connect to.
|
One of the first logs, when the server starts, writes down your external IP that will be sent to your clients to connect to.
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ It's read as `NAT One to One`, so it's a capital letter `O`, not zero `0`, in `N
|
||||||
|
|
||||||
If you want to use n.eko only locally, you must put your local IP address here, otherwise, the public address will be used.
|
If you want to use n.eko only locally, you must put your local IP address here, otherwise, the public address will be used.
|
||||||
|
|
||||||
### Neko works externally, but not locally
|
### Neko works externally, but not locally {#works-externally-but-not-locally}
|
||||||
|
|
||||||
You are probably missing the NAT Loopback (NAT Hairpinning) setting on your router.
|
You are probably missing the NAT Loopback (NAT Hairpinning) setting on your router.
|
||||||
|
|
||||||
|
@ -151,17 +151,17 @@ Example for pfsense with truecharts docker container:
|
||||||
- Test externally to confirm it works.
|
- Test externally to confirm it works.
|
||||||
- Internally you have to access it using `<your-public-ip>:port`
|
- Internally you have to access it using `<your-public-ip>:port`
|
||||||
|
|
||||||
If your router does not support NAT Loopback (NAT Hairpinning), you can use turn servers to overcome this issue. See [more details here](/docs/v3/reference/configuration/webrtc#ice-servers) on how to set up a local coturn instance.
|
If your router does not support NAT Loopback (NAT Hairpinning), you can use turn servers to overcome this issue. See [more details here](/docs/v3/configuration/webrtc#iceservers) on how to set up a local coturn instance.
|
||||||
|
|
||||||
### Neko works locally, but not externally
|
### Neko works locally, but not externally {#works-locally-but-not-externally}
|
||||||
|
|
||||||
Make sure that you are exposing your ports correctly.
|
Make sure that you are exposing your ports correctly.
|
||||||
|
|
||||||
If you put a local IP as `NEKO_WEBRTC_NAT1TO1`, external clients try to connect to that IP. But it is unreachable for them because it is your local IP. You must use your public IP address with port forwarding.
|
If you put a local IP as `NEKO_WEBRTC_NAT1TO1`, external clients try to connect to that IP. But it is unreachable for them because it is your local IP. You must use your public IP address with port forwarding.
|
||||||
|
|
||||||
## Frequently Encountered Errors
|
## Frequently Encountered Errors {#frequently-encountered-errors}
|
||||||
|
|
||||||
### Getting a black screen with a cursor, but no browser for Chromium-based browsers
|
### Getting a black screen with a cursor, but no browser for Chromium-based browsers {#black-screen-with-cursor}
|
||||||
|
|
||||||
Check if you did not forget to add `cap_add` to your `docker-compose.yaml` file. Make sure that the `shm_size` is set to `2gb` or higher.
|
Check if you did not forget to add `cap_add` to your `docker-compose.yaml` file. Make sure that the `shm_size` is set to `2gb` or higher.
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ services:
|
||||||
NEKO_WEBRTC_EPR: 52000-52100
|
NEKO_WEBRTC_EPR: 52000-52100
|
||||||
```
|
```
|
||||||
|
|
||||||
### Common server errors
|
### Common server errors {#common-server-errors}
|
||||||
|
|
||||||
```
|
```
|
||||||
WRN session created with an error error="invalid 1:1 NAT IP mapping"
|
WRN session created with an error error="invalid 1:1 NAT IP mapping"
|
||||||
|
@ -211,7 +211,7 @@ WRN undeclaredMediaProcessor failed to open SrtcpSession: the DTLS transport has
|
||||||
|
|
||||||
Check if your UDP ports are exposed correctly and reachable.
|
Check if your UDP ports are exposed correctly and reachable.
|
||||||
|
|
||||||
### Common client errors
|
### Common client errors {#common-client-errors}
|
||||||
|
|
||||||
```
|
```
|
||||||
Firefox can’t establish a connection to the server at ws://<your-IP>/ws?password=neko.
|
Firefox can’t establish a connection to the server at ws://<your-IP>/ws?password=neko.
|
||||||
|
@ -227,7 +227,7 @@ NotAllowedError: play() failed because the user didn't interact with the documen
|
||||||
|
|
||||||
This error occurs when the browser blocks the video from playing because the user has not interacted with the document. You just need to manually click on the play button to start the video.
|
This error occurs when the browser blocks the video from playing because the user has not interacted with the document. You just need to manually click on the play button to start the video.
|
||||||
|
|
||||||
### Unrelated server errors
|
### Unrelated server errors {#unrelated-server-errors}
|
||||||
|
|
||||||
```
|
```
|
||||||
[ERROR:bus.cc(393)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
|
[ERROR:bus.cc(393)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
|
||||||
|
@ -249,7 +249,7 @@ I: [pulseaudio] protocol-native.c: Connection died.
|
||||||
|
|
||||||
These are just logs from pulseaudio. Unless you have audio issues, you can ignore them.
|
These are just logs from pulseaudio. Unless you have audio issues, you can ignore them.
|
||||||
|
|
||||||
### Broadcast pipeline not working with some ingest servers
|
### Broadcast pipeline not working with some ingest servers {#broadcast-pipeline-not-working}
|
||||||
|
|
||||||
See [related issue](https://github.com/m1k1o/neko/issues/276).
|
See [related issue](https://github.com/m1k1o/neko/issues/276).
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
"deploy": "docusaurus deploy",
|
"deploy": "docusaurus deploy",
|
||||||
"clear": "docusaurus clear",
|
"clear": "docusaurus clear",
|
||||||
"serve": "docusaurus serve",
|
"serve": "docusaurus serve",
|
||||||
"gen-help": "node ./src/components/Configuration/generate.js ./docs/reference/configuration/help.txt ./docs/reference/configuration/help.json",
|
"gen-help": "node ./src/components/Configuration/generate.js ./docs/configuration/help.txt ./docs/configuration/help.json",
|
||||||
"gen-help:v2": "node ./src/components/Configuration/generate.js ./docs/reference/v2-migration/help.txt ./docs/reference/v2-migration/help.json",
|
"gen-help:v2": "node ./src/components/Configuration/generate.js ./docs/v2-migration/help.txt ./docs/v2-migration/help.json",
|
||||||
"write-translations": "docusaurus write-translations",
|
"write-translations": "docusaurus write-translations",
|
||||||
"write-heading-ids": "docusaurus write-heading-ids",
|
"write-heading-ids": "docusaurus write-heading-ids",
|
||||||
"gen-api-docs": "./gen-api-docs.sh",
|
"gen-api-docs": "./gen-api-docs.sh",
|
||||||
|
|
|
@ -20,7 +20,20 @@ const sidebars: SidebarsConfig = {
|
||||||
label: 'Getting Started',
|
label: 'Getting Started',
|
||||||
className: 'menu__list-item-flat',
|
className: 'menu__list-item-flat',
|
||||||
collapsible: false,
|
collapsible: false,
|
||||||
items: [{ type: "autogenerated", dirName: "getting-started" }]
|
items: [
|
||||||
|
'introduction',
|
||||||
|
'quick-start',
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Installation',
|
||||||
|
collapsed: false,
|
||||||
|
link: { type: "doc", id: "installation/README" },
|
||||||
|
items: [
|
||||||
|
'installation/docker-images',
|
||||||
|
'installation/examples',
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
|
@ -28,7 +41,21 @@ const sidebars: SidebarsConfig = {
|
||||||
className: 'menu__list-item-flat',
|
className: 'menu__list-item-flat',
|
||||||
collapsible: false,
|
collapsible: false,
|
||||||
items: [
|
items: [
|
||||||
{ type: "autogenerated", dirName: "reference" },
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Configuration',
|
||||||
|
collapsed: false,
|
||||||
|
link: { type: "doc", id: "configuration/README" },
|
||||||
|
items: [
|
||||||
|
'configuration/authentication',
|
||||||
|
'configuration/capture',
|
||||||
|
'configuration/desktop',
|
||||||
|
'configuration/webrtc',
|
||||||
|
'configuration/plugins',
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'migration-from-v2/README',
|
||||||
|
'reverse-proxy-setup',
|
||||||
{
|
{
|
||||||
type: 'link',
|
type: 'link',
|
||||||
label: 'API Reference',
|
label: 'API Reference',
|
||||||
|
|
28
webpage/src/components/Anchor.tsx
Normal file
28
webpage/src/components/Anchor.tsx
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import useBrokenLinks from '@docusaurus/useBrokenLinks';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export function Anchor(props: {id: string}) {
|
||||||
|
useBrokenLinks().collectAnchor(props.id);
|
||||||
|
return <span style={{scrollMarginTop: "var(--ifm-navbar-height)"}} {...props}/>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <Def id="cookie.http_only" /> -> <a href="#cookie.http_only"><code id="cookie.http_only">http_only</code></a>
|
||||||
|
export function Def({id, code, ...props}: {id: string, code?: string}) {
|
||||||
|
// split by . and get last part
|
||||||
|
if (code === undefined) {
|
||||||
|
code = id.split('.').pop();
|
||||||
|
}
|
||||||
|
useBrokenLinks().collectAnchor(id);
|
||||||
|
// get current heading id
|
||||||
|
return <a href={`#${id}`} {...props}><code id={id} title={id} style={{scrollMarginTop: "var(--ifm-navbar-height)"}}>{code}</code></a>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <Opt id="cookie.http_only" /> -> <a href="#cookie.http_only"><code>http_only</code></a>
|
||||||
|
export function Opt({id, code, ...props}: {id: string, code?: string}) {
|
||||||
|
// split by . and get last part
|
||||||
|
if (code === undefined) {
|
||||||
|
code = id.split('.').pop();
|
||||||
|
}
|
||||||
|
// get current heading id
|
||||||
|
return <a href={`#${id}`} {...props}><code title={id} style={{scrollMarginTop: "var(--ifm-navbar-height)"}}>{code}</code></a>;
|
||||||
|
}
|
|
@ -43,7 +43,7 @@ function HomepageHeader() {
|
||||||
<div className={styles.buttons}>
|
<div className={styles.buttons}>
|
||||||
<Link
|
<Link
|
||||||
className="button button--secondary button--lg"
|
className="button button--secondary button--lg"
|
||||||
to="/docs/v3/getting-started/quick-start-guide">
|
to="/docs/v3/quick-start">
|
||||||
Get started
|
Get started
|
||||||
</Link>
|
</Link>
|
||||||
<span className={styles.indexCtasGitHubButtonWrapper}>
|
<span className={styles.indexCtasGitHubButtonWrapper}>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue