I learned more about Signal at the HOPE conference in New York City and wanted it on my Fedora laptop.

Signal does not publish a Fedora RPM. Its official Linux packages target Debian-based distributions, and its newer AppImage does not fit how I manage desktop software. I chose Distrobox instead.

This is the system I set it up for:

Fedora Linux 44 KDE Plasma Desktop Edition
KDE Plasma on Wayland
x86-64
DNF5 5.4.2.1
Distrobox 1.8.2.5

Distrobox gives me Signal’s official Debian package without adding an unsupported RPM repository to Fedora. Signal still appears in the KDE application launcher like any other desktop app.

Why I chose Distrobox

I wanted four things from this setup:

  • Signal’s official APT repository
  • normal KDE Plasma desktop integration
  • no third-party Signal RPM repository on Fedora
  • a separate home directory for Signal’s container

Distrobox checks those boxes. It uses Podman on Fedora, starts an Ubuntu user space, and exports the installed application back to the host desktop.

The container is closely integrated with Fedora. It uses the host display, audio, network, and user session. I do not treat it as a security boundary.

Check Fedora and the CPU architecture

Signal Desktop supports x86-64 Linux. Confirm the operating system and architecture:

cat /etc/fedora-release
uname -m

My laptop reports:

Fedora Linux release 44 (Forty Four)
x86_64

Signal Desktop also needs an existing Signal account on Android or iPhone. Finish the phone setup before linking the laptop.

Install Distrobox and Podman

Fedora 44 uses DNF5:

sudo dnf install distrobox podman

Check both tools:

distrobox --version
podman --version

Run Distrobox as your normal user. Do not put sudo before distrobox. Rootless Podman gives the container fewer host privileges.

Give Signal its own container home

Distrobox shares your normal home directory by default. Signal does not need access to every document, SSH file, and browser profile in my account, so I gave this box a separate home.

mkdir -p ~/.local/share/distrobox-homes/signal-box

Create an Ubuntu 24.04 container with the new home:

distrobox create \
  --name signal-box \
  --image ubuntu:24.04 \
  --home ~/.local/share/distrobox-homes/signal-box

Enter it:

distrobox enter signal-box

The first entry takes longer. Distrobox installs the packages needed for host integration before opening the shell.

Add Signal’s official APT repository

Run the commands in this section inside signal-box.

Install the tools needed for the repository setup:

sudo apt update
sudo apt install curl gnupg

Download Signal’s signing key and install it for APT:

curl https://updates.signal.org/desktop/apt/keys.asc \
  | gpg --dearmor \
  > signal-desktop-keyring.gpg

sudo install \
  -o root \
  -g root \
  -m 0644 \
  signal-desktop-keyring.gpg \
  /usr/share/keyrings/signal-desktop-keyring.gpg

Signal now publishes a deb822 repository file. Download it instead of copying an old xenial repository line from another guide:

curl -o signal-desktop.sources \
  https://updates.signal.org/static/desktop/apt/signal-desktop.sources

sudo install \
  -o root \
  -g root \
  -m 0644 \
  signal-desktop.sources \
  /etc/apt/sources.list.d/signal-desktop.sources

Install Signal Desktop:

sudo apt update
sudo apt install signal-desktop

Confirm which repository supplies the package:

apt policy signal-desktop

The candidate package should come from updates.signal.org.

Test and export Signal

Start Signal once from the container shell:

signal-desktop

Close the window after confirming it opens. Export its desktop entry while still inside signal-box:

distrobox-export --app signal-desktop

Leave the container:

exit

Open KDE Plasma’s application launcher and search for Signal. The exported shortcut starts the Ubuntu package through Distrobox.

Signal displays a QR code on first launch.

On the phone, open Signal Settings, select Linked devices, and add a new device. Scan the QR code from the Fedora laptop and confirm the device name.

The phone remains the primary Signal device. The Fedora installation works as a linked desktop.

Update Signal

Update the entire container from Fedora:

distrobox upgrade signal-box

Update only Signal through APT:

distrobox enter signal-box -- \
  sudo apt update

distrobox enter signal-box -- \
  sudo apt install --only-upgrade signal-desktop

I use the full Distrobox upgrade so Ubuntu’s security updates do not get ignored.

Troubleshoot the Distrobox setup

Signal does not appear in the KDE menu

Run the export again from inside the box:

distrobox enter signal-box
distrobox-export --app signal-desktop
exit

Log out and back in if Plasma still shows a stale application menu.

Signal opens as a blank window

Start it from a terminal and disable GPU acceleration for one test:

distrobox enter signal-box -- \
  signal-desktop --disable-gpu

If the window works, the problem involves Electron’s graphics path. Keep the terminal output for troubleshooting before making a permanent launcher change.

Older guides suggest this command:

xhost +local:

I would not run it on this system. It broadens local access to the X server, and my Fedora 44 desktop uses Wayland. Distrobox already handles display integration. A blank Electron window does not prove an X authorization problem.

APT rejects the Signal repository

Check the installed files:

ls -l /usr/share/keyrings/signal-desktop-keyring.gpg
ls -l /etc/apt/sources.list.d/signal-desktop.sources

Download both files again from Signal’s Linux page if either one is missing. Do not disable signature checks to force the installation.

Remove and rebuild the box

Delete the exported shortcut first:

distrobox enter signal-box
distrobox-export --app signal-desktop --delete
exit

Remove the container:

distrobox rm signal-box

The separate home remains here:

~/.local/share/distrobox-homes/signal-box/

Keep it until you are sure no local Signal data is needed. Removing and relinking Signal Desktop does not guarantee the return of every old message.

Flatpak is easier, but I did not choose it

Flatpak is a good desktop package format. Fedora integrates it with the application menu and graphical software tools. Flatpak also provides shared runtimes, centralized updates, permission controls, and clean removal.

The Signal package on Flathub is an unverified community redistribution. Signal Foundation does not maintain or support it. For private messaging software, I prefer Signal’s official package inside Distrobox.

Install the Flatpak with:

flatpak install flathub org.signal.Signal

Launch and verify it:

flatpak run org.signal.Signal
flatpak list | grep org.signal.Signal

Electron permissions

Some guides suggest full home-directory access when Signal crashes:

flatpak override --user \
  --filesystem=home \
  org.signal.Signal

This weakens the sandbox. Signal then sees documents, downloads, SSH files, browser profiles, and other data under your home directory. Try the app without this override first.

If Signal only needs a folder for saved attachments, expose one directory instead:

mkdir -p ~/Signal-Attachments

flatpak override --user \
  --filesystem=~/Signal-Attachments:create \
  org.signal.Signal

Remove the broad home permission with:

flatpak override --user \
  --nofilesystem=home \
  org.signal.Signal

The Flathub maintainers also list GPU acceleration as a source of Electron startup failures:

flatpak override --user \
  --env=SIGNAL_DISABLE_GPU=1 \
  org.signal.Signal

Plain-text database key

The current Flathub launcher defaults to Electron’s basic password store. It writes the local Signal database key as plain text in config.json.

Flathub supports KWallet 6 on this KDE Plasma system:

flatpak override --user \
  --env=SIGNAL_PASSWORD_STORE=kwallet6 \
  org.signal.Signal

Set the backend before linking Signal. Switching between basic, GNOME libsecret, KWallet 5, and KWallet 6 after profile creation has caused startup failures. Current Signal releases lack a general migration path between every Linux storage backend.

The KWallet entry and Signal profile belong together. Losing either one leaves the local database unreadable. Full-disk encryption still matters because Signal attachments and other local data need protection too.

Why I do not use the AppImage

Signal publishes an official signed AppImage for x86-64 Linux. It remains an option, but I do not want it as my normal installation.

AppImages feel disconnected from the rest of the system:

  • Fedora’s package manager does not own the application.
  • desktop-menu integration needs manual work or another tool.
  • update behavior differs between applications.
  • bundled libraries duplicate storage.
  • moving the file breaks launchers with a fixed path.
  • Signal’s AppImage lacks operating-system authentication prompts for some optional features.
  • signature verification needs separate key, signature, and application downloads.

An AppImage makes sense for a portable test. I find it clumsy for software I use every day.

References