Skip to content

Add Rustdesk module #266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .icons/rustdesk.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions RustDesk.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[security]
password = "123456"
Binary file added registry/BenraouaneSoufiane/.images/avatar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions registry/BenraouaneSoufiane/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
display_name: "Benraouane Soufiane"
bio: "Full stack developer creating awesome things."
avatar_url: "./.images/avatar.png"
github: "benraouanesoufiane"
linkedin: "https://www.linkedin.com/in/benraouane-soufiane" # Optional
website: "https://benraouanesoufiane.com" # Optional
support_email: "[email protected]" # Optional
status: "community"
---

# Benraouane Soufiane

Full stack developer creating awesome things.
68 changes: 68 additions & 0 deletions registry/BenraouaneSoufiane/modules/rustdesk/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
---
display_name: Rustdesk
description: Create desktop environmetn & run rustdesk in your workspace
icon: ../../../../.icons/rustdesk.svg
verified: false
tags: [rustdesk, rdp, vm]
---

# RustDesk Coder Module

This is the basic Coder's rustdesk module that install minimal desktop environment (xfce) & launches the rustdesk within your workspace

---

## Features

- Installs RustDesk & launches it in GUI not with black screen
- Outputs the RustDesk ID and password
- Automatically launches RustDesk on workspace start
- Provides an external app link to the [RustDesk web client](https://rustdesk.com/web)

---

## Usage

### Prerequisites

- Coder v2.5 or higher
- A workspace agent compatible with Linux and `apt` package manager
- Root scope (to install desktop environment, rustdesk & execute rustdesk --password "somepassword", because rustdesk cli does not provide a way to get the password else setup in advance, the command rustdesk --password "somepassword" only for root users)


---

### Quickstart

1. Add the module to your [Coder Terraform workspace](https://registry.coder.com)
2. Include it in your `main.tf`:

```hcl
module "rustdesk" {
source = "registry.coder.com/BenraouaneSoufiane/rustdesk/BenraouaneSoufiane"
agent_id = var.agent_id
}
```
Also add this within resource "docker_container" "workspace":

```hcl
privileged = true
user = "root"
network_mode = "host"
ports {
internal = 21115
external = 21115
}
ports {
internal = 21116
external = 21116
}
ports {
internal = 21118
external = 21118
}
ports {
internal = 21119
external = 21119
}
```
61 changes: 61 additions & 0 deletions registry/BenraouaneSoufiane/modules/rustdesk/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
terraform {
required_version = ">= 1.0"

required_providers {
coder = {
source = "coder/coder"
version = ">= 2.5"
}
}
}

locals {
# A built-in icon like "/icon/code.svg" or a full URL of icon
icon_url = "https://upload.wikimedia.org/wikipedia/commons/9/96/Rustdesk.svg"
}

# Add required variables for your modules and remove any unneeded variables
variable "agent_id" {
type = string
description = "The ID of a Coder agent."
}

variable "log_path" {
type = string
description = "The path to log rustdesk to."
default = "/tmp/rustdesk.log"
}

variable "port" {
type = number
description = "The port to run rustdesk on."
default = 19999
}

variable "order" {
type = number
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
default = null
}

resource "coder_script" "rustdesk" {
count = 1
agent_id = var.agent_id
display_name = "Rustdesk"
icon = local.icon_url
script = templatefile("${path.module}/run.sh", {})
run_on_start = true
run_on_stop = false
}

resource "coder_app" "rustdesk" {
count = 1
agent_id = var.agent_id
slug = "rustdesk"
display_name = "Rustdesk"
url = "https://rustdesk.com/web"
icon = local.icon_url
order = var.order
external = true
}

61 changes: 61 additions & 0 deletions registry/BenraouaneSoufiane/modules/rustdesk/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/bash

# Check if RustDesk is installed
if ! command -v rustdesk &> /dev/null; then
echo "RustDesk is not installed. Installing..."

# Download RustDesk manually
RUSTDESK_VERSION="1.4.0"
RUSTDESK_DEB="rustdesk-$RUSTDESK_VERSION-x86_64.deb"

echo "Downloading RustDesk $RUSTDESK_VERSION..."
wget "https://github.com/rustdesk/rustdesk/releases/download/$RUSTDESK_VERSION/$RUSTDESK_DEB"

# Check if download was successful
if [ $? -eq 0 ]; then
echo "Installing dependencies..."
sudo apt update
sudo apt install -y libva2 libva-drm2 libva-x11-2 libgstreamer-plugins-base1.0-0 gstreamer1.0-pipewire xfce4 xfce4-goodies xvfb x11-xserver-utils dbus-x11
echo "Installing RustDesk..."
sudo dpkg -i $RUSTDESK_DEB
sudo apt-get install -f -y # To fix any dependencies
rm $RUSTDESK_DEB # Clean up
else
echo "Failed to download RustDesk. Please check your network connection."
exit 1
fi
else
echo "RustDesk is already installed."
fi

# Start perform other necessary actions perform other necessary actions
echo "Starting Rustdesk..."
# Start virtual display
Xvfb :99 -screen 0 1024x768x16 &
export DISPLAY=:99

# Wait for X to be ready
for i in {1..10}; do
if xdpyinfo -display :99 >/dev/null 2>&1; then
echo "X display is ready"
break
fi
sleep 1
done

# Start desktop environment
xfce4-session &
# Wait for xfce session to be ready (rudimentary check)
echo "Waiting for xfce4-session to initialize..."
sleep 5 # Adjust if needed

rustdesk &
# Start RustDesk with password
generated=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 6 | head -n 1)
rustdesk --password "$generated" &

sleep 5

rid=$(rustdesk --get-id)
echo "The ID is: $rid"
echo "The password is: $generated"
Binary file added rustdesk-1.1.9.deb
Binary file not shown.
Binary file added rustdesk-1.1.9.deb.1
Binary file not shown.
Binary file added rustdesk-1.4.0-x86_64.deb
Binary file not shown.
Binary file added rustdesk-1.4.0-x86_64.deb.1
Binary file not shown.
Binary file added rustdesk-1.4.0-x86_64.deb.2
Binary file not shown.
Binary file added rustdesk-1.4.0-x86_64.deb.3
Binary file not shown.
Loading