Fedora

How To Install Microsoft Teams on Fedora 45 / 44

Microsoft does not ship a Teams client for Linux. The native app was retired, and the client documentation now lists Linux as unsupported. Two routes still work on Fedora: the community teams-for-linux desktop client, and the Teams web app installed as a PWA from Chrome. Everything below was run on Fedora 45 and Fedora 44 Workstation in October 2026, with teams-for-linux 2.24.0 and Google Chrome 155.

Original content from computingforgeeks.com - post 40146

One thing changed since earlier versions of this guide, and it matters. The vendor key file now carries a second, unrelated signing key. The install below trusts only the key that actually signs the Teams package.

Pick a route

The Teams system requirements say Linux users get Teams for Web and the PWA. The community client wraps the same web app in Electron and adds a tray icon and a config file. None of them is a native Teams stack.

teams-for-linux RPMteams-for-linux FlatpakPWA in Chrome
Maintained byIndependent open source projectSame project, listed on Flathub as “Portal for Teams”Microsoft (it is the web app)
Updates throughdnf upgradeflatpak updateChrome and Microsoft’s web releases
Disk on Workstation333 MiB1.7G with runtimesNothing beyond Chrome
Tray icon and config fileYesYesNo
Microsoft supportNoneNoneTeams for Web is supported

On Workstation, the RPM is the cleanest fit. Use the Flatpak on the Fedora Atomic Desktops such as Silverblue. Use the PWA when policy says Microsoft-supported only.

Import only the Teams signing key

The project’s own instructions download a key file and pass it straight to rpm --import. Look inside it first:

curl -fsSL -o /tmp/teams-for-linux.asc https://repo.teamsforlinux.de/teams-for-linux.asc
gpg --show-keys /tmp/teams-for-linux.asc

Two public keys come back. The second has nothing to do with Teams:

pub   rsa4096 2023-06-30 [SC]
      D112747BDF6269C845972E5C2FD80E00E6A6E47D
uid                      Teams for Linux Repo <[email protected]>
sub   rsa4096 2023-06-30 [E]

pub   rsa4096 2026-06-03 [SCEAR]
      77A763264D32E3975FD9FB549F6DA9A97DEBF982
uid                      BackupPilot Repo <[email protected]>
sub   rsa4096 2026-06-03 [SEA]

Every key in the RPM keyring is trusted for every package on the system, from any repository. Importing the whole file therefore lets a second, unrelated publisher sign packages your machine will accept. The Teams RPM is signed only by the first key, 2FD80E00E6A6E47D, so that is the only one you need.

Export that single key into the Fedora key directory. A throwaway GnuPG home keeps your own keyring out of it:

GNUPGHOME=$(mktemp -d); export GNUPGHOME
gpg --quiet --import /tmp/teams-for-linux.asc
gpg --armor --export D112747BDF6269C845972E5C2FD80E00E6A6E47D | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-teams-for-linux >/dev/null
rm -rf "$GNUPGHOME"; unset GNUPGHOME

Confirm the exported file holds one key and nothing else:

gpg --show-keys /etc/pki/rpm-gpg/RPM-GPG-KEY-teams-for-linux

Only the Teams for Linux key is listed:

pub   rsa4096 2023-06-30 [SC]
      D112747BDF6269C845972E5C2FD80E00E6A6E47D
uid                      Teams for Linux Repo <[email protected]>
sub   rsa4096 2023-06-30 [E]

Add the repository and install

The repo file the project publishes sets gpgcheck=1 but has no gpgkey line. Write your own that points at the single key:

sudo vim /etc/yum.repos.d/teams-for-linux.repo

Paste the definition:

[teams-for-linux]
name=Teams for Linux
baseurl=https://repo.teamsforlinux.de/rpm/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-teams-for-linux

The baseurl has no $releasever, so one repository serves Fedora 45 and 44 alike. Install the client:

sudo dnf install -y teams-for-linux

On Workstation the transaction is three packages. DNF imports the key from the gpgkey path during the run and prints the fingerprint, which should match the one above:

Package          Arch   Version         Repository           Size
Installing:
 teams-for-linux x86_64 0:2.24.0-1      teams-for-linux 333.2 MiB
Installing dependencies:
 libXScrnSaver   x86_64 0:1.2.4-7.fc44  fedora           49.5 KiB
Installing weak dependencies:
 fido2-tools     x86_64 0:1.16.0-5.fc44 fedora          138.3 KiB

Transaction Summary:
 Installing:         3 packages

Total size of inbound packages is 88 MiB. Need to download 88 MiB.
After this operation, 333 MiB extra will be used (install 333 MiB, remove 0 B).
...
Running transaction
Importing OpenPGP key 0xE6A6E47D:
 UserID     : "Teams for Linux Repo <[email protected]>"
 Fingerprint: D112747BDF6269C845972E5C2FD80E00E6A6E47D
 From       : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-teams-for-linux
The key was successfully imported.
...
Complete!

That run is from Fedora 44. Fedora 45 resolved the same three packages and sizes. A machine without a desktop is a different story, because the Electron app drags in the GTK, PipeWire and libcamera stack:

Starting pointPackagesDownloadInstalled size
Fedora Workstation388 MiB333 MiB
Fedora Cloud Base / minimal220238 MiB886 MiB

Check the keyring. The Fedora key and the Teams key are the only entries:

rpmkeys --list

No BackupPilot key in sight:

d112747bdf6269c845972e5c2fd80e00e6a6e47d Teams for Linux Repo <[email protected]> public key
4f50a6114cd5c6976a7f1179655a4b02f577861e Fedora (45) <[email protected]> public key

Be clear about what this check proves. The key and the packages come from the same HTTPS host, and upstream publishes no fingerprint anywhere else, so this is trust on first use over TLS. If the project ever re-signs with a new key, installs start failing with a signature error and the export above has to be redone with the new fingerprint.

Then the package and the binary:

rpm -q teams-for-linux
teams-for-linux --version

The version flag prints a config notice before the number. That notice is normal until you create a config file:

teams-for-linux-2.24.0-1.x86_64
No config file found (user or system-wide), using default values
2.24.0

The package installs under /opt/teams-for-linux and runs as your user. The launcher pins Electron to X11:

grep ^Exec /usr/share/applications/teams-for-linux.desktop

On a GNOME Wayland session that means the app menu entry runs through XWayland. That is the upstream default, not a Fedora change:

Exec=/opt/teams-for-linux/teams-for-linux --ozone-platform=x11 %U

SELinux needs no attention. After installing, launching and closing the client with SELinux enforcing, ausearch -m AVC,USER_AVC -ts today had no entries mentioning Teams on either release.

Error: “The repository does not have any OpenPGP keys configured”

This is what the vendor repo file produces when the key never made it into the RPM keyring. DNF downloads everything first, then refuses the transaction at the very end:

[220/220] Total                         100% |   2.0 MiB/s | 238.1 MiB |  02m00s
Running transaction
Transaction failed: Signature verification failed.
OpenPGP check for package "teams-for-linux-2.24.0-1.x86_64" (/var/cache/libdnf5/teams-for-linux-52070eda2215cb3c/packages/teams-for-linux-2.24.0.x86_64.rpm) from repo "teams-for-linux" has failed: The repository does not have any OpenPGP keys configured.

The fix is the gpgkey line from the repo file above. Do not reach for --nogpgcheck. The repository metadata itself is unsigned (there is no repomd.xml.asc), so the package signature is the only check you have. For other signature failures on local RPM files, see fixing NOKEY and signature errors on Fedora.

Launch Teams and sign in

Open “Teams for Linux” from Activities, or run teams-for-linux in a terminal. The window loads the Microsoft sign-in page, because the wrapper is the Teams web app in its own frame:

Teams for Linux desktop client showing the Microsoft sign-in page on Fedora 45

Chromium stores its session secrets in the desktop keyring. Our lab sessions used automatic login, which starts the session without the password that normally unlocks the keyring. That is when the prompts below appear, and the two releases behave differently.

Fedora 44 runs gnome-keyring. With no keyring created yet, the first launch opens “Choose password for new keyring”:

GNOME Choose password for new keyring dialog opened by Teams for Linux on Fedora 44

Set a password and the keyring is created. Cancel it and the client still loads the sign-in page. Fedora 45 replaces gnome-keyring with the oo7 secret service. Teams for Linux showed no dialog there and logged Prompt call returned no response instead. Chrome on the same Fedora 45 session did prompt, asking to unlock the “Login” keyring:

Authentication required dialog asking to unlock the Login keyring on Fedora 45

Your login password unlocks it. To keep the client away from the keyring entirely, start it with the basic password store:

teams-for-linux --password-store=basic

That flag applies only to the launch you type. The Activities entry runs the packaged launcher, so give your user a copy with the flag added:

mkdir -p ~/.local/share/applications
cp /usr/share/applications/teams-for-linux.desktop ~/.local/share/applications/
sed -i 's|^Exec=/opt/teams-for-linux/teams-for-linux |Exec=/opt/teams-for-linux/teams-for-linux --password-store=basic |' ~/.local/share/applications/teams-for-linux.desktop
grep ^Exec ~/.local/share/applications/teams-for-linux.desktop

The copy in your home directory overrides the system entry, and it no longer follows changes upstream makes to the packaged file:

Exec=/opt/teams-for-linux/teams-for-linux --password-store=basic --ozone-platform=x11 %U

On Fedora 44 with no keyring created, launching from that entry went straight to the sign-in page with no dialog. The cost is that the session data sits in the profile directory without keyring encryption. Fine on a single-user laptop, wrong on a shared machine.

Configure the client with config.json

Everything the wrapper adds on top of the web app is driven by one file, ~/.config/teams-for-linux/config.json. It does not exist until you create it. The client creates the directory on first launch:

vim ~/.config/teams-for-linux/config.json

This catches people out: most of the flat option names in older guides are deprecated. teams-for-linux --help marks them, for example closeAppOnCross with “deprecated: use window.closeOnCross instead”. Use the nested form:

{
  "window": { "closeOnCross": true },
  "tray": { "enabled": true },
  "notificationMethod": "electron",
  "platform": { "spellCheckerLanguages": ["en-US"] }
}

By default the close button only hides the window, and the process keeps running in the tray. With window.closeOnCross set, clicking the X exited the client completely in our test. notificationMethod accepts web, electron or custom, with web as the default.

Start the client from a terminal to confirm the file was read. The first line changes from the “No config file found” notice to this:

Using user configuration
Initialising logger with config: {"transports":{"console":{"level":"info"},"file":{"level":false}}}
12:49:17.697 › configPath: /home/[USER]/.config/teams-for-linux

A syntax error does not stop the app. It falls back to defaults and says so on the first line, with “Error in user config file, using system config or defaults”. Validate the file with python3 -m json.tool ~/.config/teams-for-linux/config.json if that shows up.

Every option is also a command line flag. The --help output lists 86 of them with defaults, including the start URL, https://teams.cloud.microsoft. The Flatpak build reads its config from ~/.var/app/com.github.IsmaelMartinez.teams_for_linux/config/teams-for-linux/config.json, so copy the file across if you switch.

Install Teams as a PWA in Chrome

This is the route Microsoft supports. It needs a Chromium browser and nothing else. If Chrome is not installed yet, install Google Chrome on Fedora from the Google repository so it updates with the system.

Open https://teams.cloud.microsoft in a tab and sign in before you install anything. The order matters, as shown below. Chrome keeps the generic install entry in the three-dot menu under Cast, save, and share, as Install page as app…, and may also offer an install icon in the address bar once the Teams page has loaded:

Google Chrome Cast save and share menu with Install page as app on Fedora 45

This catches people out. Chrome builds the app from whatever page is open. Before you sign in, the Teams URL redirects to login.microsoftonline.com, so the dialog offers “Sign in to your account” on that origin:

Chrome Install this page as an app dialog for Microsoft Teams on Fedora 45

Cancel that dialog. An app created there starts from a one-time Microsoft sign-in request on the login origin, and renaming it does not change that. Finish signing in, wait for Teams itself to load, then install. Our lab had no Teams account, so the screens here stop at the sign-in page.

An installed app opens in its own window with no tabs. Its three-dot menu is the place to check the result: App info shows the origin the app was created on, and the uninstall entry sits below it. The window below is the wrong variant, built from the sign-in page, which is exactly what App info exposes:

Microsoft Teams PWA window menu showing App info and Uninstall on Fedora 45

If App info reads login.microsoftonline.com, uninstall from that menu and install again after signing in. The install also writes a chrome-*-Default.desktop file under ~/.local/share/applications, which puts the app in the GNOME app grid and launches it by app ID. Deleting that file by hand leaves the app registered in the Chrome profile, so always remove it from the app menu.

Use the Flatpak build

On Silverblue and the other Fedora Atomic Desktops, layering an RPM for a chat client is not worth a reboot. Use the Flathub build instead, which GNOME Software lists as “Portal for Teams”. A per-user install needs no root and no polkit prompt, which also makes it work over SSH. The Flatpak and Flathub guide for Fedora covers the system-wide setup.

flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub com.github.IsmaelMartinez.teams_for_linux

Flathub carries the same release as the RPM repository. The app is 359.5 MB installed, but it also needs the freedesktop runtime and GL extensions:

flatpak list --user --columns=application,version,size,runtime

On a user with no other Flatpaks, the runtimes outweigh the app:

com.github.IsmaelMartinez.teams_for_linux	2.24.0	359.5 MB	org.freedesktop.Platform/x86_64/25.08
org.freedesktop.Platform	freedesktop-sdk-25.08.17	668.9 MB
org.freedesktop.Platform.GL.default	26.2.2	462.4 MB
org.freedesktop.Platform.GL.default	26.2.2	462.4 MB
org.freedesktop.Platform.codecs-extra		43.4 MB

du -sh ~/.local/share/flatpak reported 1.7G after the install. The runtimes are shared, so the cost drops if other Flatpaks already use them. Check the sandbox before rolling it out:

flatpak info --user --show-permissions com.github.IsmaelMartinez.teams_for_linux

The Context section is the part that matters. The manifest grants your whole home directory and all devices, which covers webcams and file attachments. That is not much of a sandbox:

[Context]
shared=ipc;network;
sockets=fallback-x11;pulseaudio;wayland;
devices=all;
filesystems=home;xdg-run/pipewire-0;
...

Update or remove Teams

The RPM updates with the rest of the system through sudo dnf upgrade, and the Flatpak through flatpak update --user. Both reported nothing to do right after install, because Flathub and the RPM repository carried the same release.

To remove the RPM, take the key and repo file out with it:

sudo dnf remove teams-for-linux
sudo rpmkeys --delete d112747bdf6269c845972e5c2fd80e00e6a6e47d
sudo rm /etc/yum.repos.d/teams-for-linux.repo /etc/pki/rpm-gpg/RPM-GPG-KEY-teams-for-linux
rm -rf ~/.config/teams-for-linux
rm -f ~/.local/share/applications/teams-for-linux.desktop

rpmkeys --delete is the current way to drop a key. rpm -e gpg-pubkey-... still works but prints a deprecation warning. If you imported the vendor file whole at some point, delete the BackupPilot key, 77a763264d32e3975fd9fb549f6da9a97debf982, the same way.

For the Flatpak, uninstall the app, then the runtimes nothing else uses, then the app data:

flatpak uninstall --user com.github.IsmaelMartinez.teams_for_linux
flatpak uninstall --user --unused
rm -rf ~/.var/app/com.github.IsmaelMartinez.teams_for_linux

The RPM gives you a managed package with a config file. The PWA gives you the client Microsoft will actually answer tickets about. Most office desktops end up with Slack on Fedora and the Zoom client beside Teams. On a fresh install, work through the things to do after installing Fedora 45, and keep the DNF5 cheatsheet nearby.

Keep reading

How to Upgrade Fedora 44 to Fedora 45 (GUI, CLI and Rollback) Fedora How to Upgrade Fedora 44 to Fedora 45 (GUI, CLI and Rollback) Enable RPM Fusion and Install Multimedia Codecs on Fedora 45 / 44 / 43 Fedora Enable RPM Fusion and Install Multimedia Codecs on Fedora 45 / 44 / 43 Harden Fedora 45 / 44 for Desktop and Server: Complete Guide Fedora Harden Fedora 45 / 44 for Desktop and Server: Complete Guide Switch Fedora From GRUB to systemd-boot With bootctl Fedora Switch Fedora From GRUB to systemd-boot With bootctl DNF5 Cheatsheet for Fedora 45 / 44: Tested Commands and Fixes Fedora DNF5 Cheatsheet for Fedora 45 / 44: Tested Commands and Fixes Enable Hibernation on Fedora 45: Btrfs Swapfile and Secure Boot Fedora Enable Hibernation on Fedora 45: Btrfs Swapfile and Secure Boot

3 thoughts on “How To Install Microsoft Teams on Fedora 45 / 44”

  1. This does not work.
    [iss-soc@srcpos01 ~]$ sudo sh -c ‘echo -e “[teams]\nname=teams\nbaseurl=https://packages.microsoft.com/yumrepos/ms-teams\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc” > /etc/yum.repos.d/teams.repo’
    [sudo] password for iss-soc:
    [iss-soc@srcpos01 ~]$ sudo rpm –import https://packages.microsoft.com/keys/microsoft.asc
    [iss-soc@srcpos01 ~]$ sudo dnf check-update
    teams 4.6 kB/s | 1.5 kB 00:00
    [iss-soc@srcpos01 ~]$ sudo dnf install teams
    Last metadata expiration check: 0:00:14 ago on Fri 15 Sep 2023 05:53:16 AM PDT.
    No match for argument: teams
    Error: Unable to find a match: teams

    Reply

Leave a Comment

Press ESC to close