# Install the FSRdp Client on Linux

For Ubuntu, Xubuntu, Debian and Raspberry Pi OS (64-bit). Every command is explained
individually, even if this is your first time using a terminal.

> Plain-text version of <https://www.fssoft.de/FsRdp/en/InstallingClientLinux.aspx>
> for AI assistants and printing. Its content matches the HTML version;
> the web page is authoritative in case of doubt.
>
> Automatically generated from the page and language resources by
> FsRdp/Build-InstallDocs.ps1. Edit those sources rather than this file.

## On This Page

1. Prerequisites
2. Understand and Install Dependencies
3. Extract and Install the Package
4. Enable Remote Control of This Computer
5. Microphone, Audio and Echo Cancellation
6. Settings: Server, Name and Language
7. Join Your First Room
8. Differences from the Windows Client
9. Updates and Uninstallation
10. Common Problems

---

## 1. Prerequisites

- **Linux with a graphical desktop.** Tested on Ubuntu and Xubuntu (x64), Debian and
  Raspberry Pi OS (64-bit) on Raspberry Pi 5. The client does not run on a server
  without a desktop.
- The correct architecture: `linux-x64` for Intel/AMD, `linux-arm64` for Raspberry Pi.
  Check with `uname -m` – `x86_64` or `aarch64`.
- No separate .NET installation; the package is self-contained.
- The **server name** and ports of your FsRdpServer (default `8888` and `8889`).
- An account with `sudo`permissions for installation.

> **You do not need to open any ports on the client.** The client always initiates the
> connection to the server. Only the *server* must be reachable.

---

## 2. Understand and Install Dependencies

Linux has no single interface for screen capture and keyboard input. The client
therefore uses established small utilities. You only need to install those required for
the features you intend to use:

| Package | Purpose | Required When … |
|---|---|---|
| `grim` | Screen capture on Wayland (Raspberry Pi OS with labwc, wlroots compositors) | … you want to share your screen |
| `gnome-screenshot` | Screen capture on X11 (Xubuntu/XFCE and similar desktops) | … you want to share your screen |
| `ydotool` | Inject mouse and keyboard input | … **your** computer should accept remote control |
| `pipewire-bin`, `wireplumber` | Microphone and speakers | … you want to use voice |
| `wl-clipboard` or `xclip` or `xsel` | Clipboard between computers | … your computer's screen is shared *and* remotely controlled |
| `v4l-utils` | Gives cameras readable names | … optional, for convenience only |
| `policykit-1` | Confirmation before installing updates | … always |

> **You do not need to find these packages manually.** Every package includes a
> preparation script that installs the appropriate dependencies for your system:
> `prepare-raspberry-pi.sh` for the ARM64 package, `prepare-ubuntu-server.sh` for the x64
> package. The table above explains what happens and why.

`ydotool` is not in the default package repositories on some systems. On Raspberry Pi OS
it is in backports, for example; the ARM64 package includes a suitable repository source
file.

---

## 3. Extract and Install the Package

Open a terminal (on Raspberry Pi OS and Ubuntu, usually with Ctrl+Alt+T) and change to
the folder containing the downloaded ZIP file, usually:

```bash
cd ~/Downloads
```

### Step 1: Extract

```bash
sudo apt update
sudo apt install -y unzip
unzip FsRdpClient-linux-arm64.zip -d FsRdpClient
cd FsRdpClient
```

On an Intel/AMD computer, the file is named `FsRdpClient-linux-x64.zip`. The archive has
no password.

### Step 2: Make Files Executable

```bash
chmod +x FsRdpClient install.sh apply-update.sh
```

For the Raspberry Pi package, also include `prepare-raspberry-pi.sh` ; for the x64
package, include `prepare-ubuntu-server.sh`. Linux does not automatically mark extracted
files as executable; this step does so.

### Step 3: Prepare Dependencies

```bash
./prepare-raspberry-pi.sh
```

On an x64 system, use `./prepare-ubuntu-server.sh`instead. A restart is required
afterwards because the script also configures the desktop.

### Step 4: Install the Client

```bash
./install.sh
```

**Important:** Run this script as your *ordinary desktop user* , without prefixing it
with `sudo` . It requests administrative permissions where needed. The application menu
entry and input service are configured for the user running the script.

The program is then installed under `/opt/fsrdp-client/` and appears in the application
menu. Alternatively, start it in a terminal:

```bash
fsrdp-client
```

---

## 4. Enable Remote Control of This Computer

Only required if **your** computer should be controlled by someone else. If you only
want to control other computers, skip this section.

On Linux, an ordinary program cannot generate keyboard and mouse events. A small system
service called `ydotoold`handles this. If `ydotool` is installed, `install.sh`
automatically configures this service as well (`fsrdp-input.service`), tailored to your
user account.

Check that it is running:

```bash
systemctl status fsrdp-input.service --no-pager
```

> **Why Use a Dedicated Service?** The standard ydotool service makes its control
> interface writable by all users, so anyone signed in could generate keyboard input for
> other users. The supplied `fsrdp-input.service` restricts the interface to your account.

If installation reports that `ydotool` is not installed, remote control of this computer
remains disabled. Everything else still works.

---

## 5. Microphone, Audio and Echo Cancellation

Unlike Windows, there are no permission switches: if PipeWire is running and a
microphone is connected, it works. Select devices in the client's settings.

**Without echo cancellation, the client uses half-duplex audio:** while playing audible
room audio, it pauses your microphone. Otherwise it would capture other participants'
sound and everyone would hear a delayed echo. With a headset, this is not noticeable.

To use speakers without a headset and allow simultaneous speech, enable PipeWire echo
cancellation once per computer:

```bash
mkdir -p ~/.config/pipewire/pipewire.conf.d
```

Create the file `99-echo-cancel.conf` there. The exact template is in `README-LINUX.md`
or the package's included README. Then:

```bash
systemctl --user restart pipewire wireplumber
```

---

## 6. Settings: Server, Name and Language

Open settings using the gear icon and enter:

| Feld | Bedeutung |
|---|---|
| Your Name | The display name other participants see. |
| Server Address | Your server's DNS name, e.g. `server.ihrefirma.de`. **Do not use an IP address** : the certificate is issued for the name. |
| Ports | Normally `8888` and `8889`. |
| Spoken Language | Determines the language in which your speech is recognized and in which you read other participants' captions. Only relevant if your server offers live captions. |
| Supporter Key | If you have one, it makes you the owner of rooms you create. |

> The settings dialog **cannot be opened during an active session**. Configure settings
> before joining a room.

---

## 7. Join Your First Room

A **room** is a virtual meeting place. Everyone entering the same room number joins the
same session. Enter the number you received and connect. While alone in a room, screen
sharing, chat and file sending are disabled, since there is no one to receive them.

When sharing your screen, a red border continuously shows the transmitted area. Only one
person can share at a time; starting a new share replaces the current one.

> **Connecting to a Server without a License?** During its 30-day trial period, a server
> accepts exactly **one** room number: `123456789`. Any other number is rejected with an
> explanatory message. The room can remain open for **up to 24 hours** and can be reopened
> immediately afterwards; all participants see a watermark. On a licensed server, this
> particular number is blocked instead.

---

## 8. Differences from the Windows Client

Both clients offer the same features, with three platform-specific exceptions:

- **No session recording.** Only the Windows client can record a session as a video
  file. The Linux client displays a notice while someone else records, but cannot start
  a recording itself.
- **Plain-text clipboard only.** The Linux client does not transfer formatted content
  such as tables or styled text; it uses the included plain-text representation. There
  is no common way to transfer formatted clipboard content across X11 and Wayland.
- **Starting again does not bring the window forward.** Only one client instance runs
  per user here as well. A second launch displays a notice and exits because Wayland
  compositors refuse requests to activate another application's windows.

The single-instance limit has the same reason as on Windows: a second instance would
recapture the first instance's room audio through the shared microphone. Neither
half-duplex switching nor PipeWire echo cancellation can prevent this, since each only
knows its own playback stream.

---

## 9. Updates and Uninstallation

At startup, the client checks its update channel; x64 and ARM64 are separate. Updates
are downloaded only after confirmation. A cryptographically signed manifest, package
size and SHA-256 checksum are verified before PolicyKit asks for your password. Nothing
is silently installed in the background.

To remove the client, run:

```bash
sudo rm -rf /opt/fsrdp-client
sudo rm -f /usr/local/bin/fsrdp-client
rm -f ~/.local/share/applications/fsrdp-client.desktop
sudo systemctl disable --now fsrdp-input.service
```

---

## 10. Common Problems

### `./install.sh: Permission denied`

The file has not been marked executable yet. Repeat the `chmod +x`step from section 3.

### Screen Sharing Is Black or Does Not Start

The required capture utility is missing: `grim` on Wayland, `gnome-screenshot` on X11.
To identify your session type:

```bash
echo $XDG_SESSION_TYPE
```

### Remote Control of My Computer Does Not Work

Check `systemctl status fsrdp-input.service`. If the service is missing, `ydotool` was
not available during installation. Install it and run `./install.sh` again.

### The Mouse Pointer Jumps During Remote Control

On labwc systems, the virtual input device needs a flat acceleration profile.
Installation creates an appropriate `rc.xml` . If your own file already exists, it is
left unchanged and you must copy the section from the included template yourself.

### Others Cannot Hear Me

1. Is the microphone muted in the client?
2. Is the correct recording device selected in settings?
3. Is PipeWire running? `systemctl --user status pipewire`
4. Is the client currently playing room audio? The microphone is intentionally paused in
   that case (section 5).

### The Client Does Not Connect

Check the server address (name, rather than IP) and both port numbers. To check name
resolution, run `getent hosts server.ihrefirma.de`. If there is no answer, the problem
is DNS rather than the client.

---

## Further Reading

- [The Same Guide for
  Windows](https://www.fssoft.de/FsRdp/en/InstallingClientWindows.aspx)
- [Run Your Own Server on
  Linux](https://www.fssoft.de/FsRdp/en/InstallingServerLinux.aspx)
- [License Terms](https://www.fssoft.de/FsRdp/en/Lizenz.aspx)

**Something Not Working as Described?** Please write to me; I am happy to help.

Robert Fischbacher

[Contact Me Directly](https://www.fssoft.de/en/Impressum.aspx)
