---
title: Arch Linux
description: Install the Punktfunk host on Arch, CachyOS or EndeavourOS from the signed pacman repo — four steps.
---

For **Arch Linux** and Arch-based distros (CachyOS, EndeavourOS, …). The host comes from a signed
binary repo and updates with `pacman -Syu` like everything else. SteamOS is different — it has
[its own page](/docs/steamos-host).

## 1. GPU driver

- **NVIDIA:** `sudo pacman -S --needed nvidia-utils` (NVENC and the zero-copy path; Arch's `ffmpeg`
  already has NVENC built in).
- **AMD / Intel:** the Mesa stack you already have — `vulkan-radeon` / `vulkan-intel` for Vulkan
  Video, `libva-mesa-driver` / `intel-media-driver` for VAAPI. Usually all installed on a desktop.

## 2. Install the host

Trust the repo key once, add the repo, install. Every install and update here is a **full**
`-Syu` on purpose — our packages are built against current Arch sonames, and `pacman -Sy <pkg>` is
the partial upgrade that breaks Arch boxes:

<Install platform="arch" />

The browser console is **optional** on Arch, so name it yourself — same line, full upgrade:
`sudo pacman -Syu punktfunk-web`. (Also in the repo: `punktfunk-gamescope` for HDR off gamescope,
`punktfunk-scripting` for [plugins](/docs/plugins), `punktfunk-client` if this box is also a client.)

From then on a normal `sudo pacman -Syu` moves every Punktfunk package; restart the host afterwards
(`systemctl --user restart punktfunk-host`) — or let the [console do it](/docs/updating).

## 3. Let it use your controllers

Join the `input` group (virtual gamepads go through `/dev/uinput`), then **log out and back in**:

```sh
sudo usermod -aG input "$USER"
```

Want the **virtual Steam Deck controller** (paddles, trackpads, gyro)? Also join the `punktfunk`
group — [what it gates and why it's separate](/docs/gamescope#nobara-and-other-autologin-display-managers).

## 4. Start it

From a terminal inside your desktop session:

```sh
systemctl --user enable --now punktfunk-host punktfunk-web
systemctl --user enable --now punktfunk-scripting   # if you installed the plugin runner — other distros start it for you, Arch doesn't
```

**Firewall:** stock Arch has none. **CachyOS enables `ufw`**, EndeavourOS enables **firewalld** —
on those the host is unreachable until you allow it (the package installed the profiles):

```sh
sudo ufw allow punktfunk-native && sudo ufw allow punktfunk-web                                   # CachyOS (ufw)
sudo firewall-cmd --reload && sudo firewall-cmd --permanent --add-service=punktfunk-native --add-service=punktfunk-web && sudo firewall-cmd --reload   # firewalld
```

[Ports & firewall](/docs/ports) has every port, and the GameStream profile if you turn Moonlight
compat on.

**That's the install.** Continue with the [Quick Start from step 3](/docs/quickstart#3-open-the-web-console)
— open the console, pair a client, stream.

## When you want more

- **pacman says `database already registered`?** The repo got added twice —
  [the one-line fix](/docs/troubleshooting#pacman-error-could-not-register-punktfunk-database-database-already-registered).
  **`unable to satisfy dependency 'libavcodec.so=…'`?** FFmpeg major mismatch —
  [what to do](/docs/troubleshooting#pacman-unable-to-satisfy-dependency-libavcodecso).
- `punktfunk-host detect-conflicts` tells you if Sunshine or Apollo is also running;
  [Troubleshooting](/docs/troubleshooting) starts from the symptom.
- Your desktop's particulars — [KDE](/docs/kde), [GNOME](/docs/gnome), [gamescope](/docs/gamescope),
  [Hyprland](/docs/hyprland), [Sway](/docs/sway).
- Stream with nobody logged in — [Running as a service](/docs/running-as-a-service) (`sudo loginctl
  enable-linger "$USER"` is the one extra line).
- Track `main` instead of releases (`[punktfunk-canary]`, same `Server` line — enable exactly one) —
  [Release channels](/docs/channels). Build it yourself with the split `PKGBUILD` —
  [Build from source](/docs/build-from-source#arch-pkgbuild).
