Install on Linux
Find the right version
To use Espanso on Linux, you first need to determine whether your system is running a X11 or Wayland desktop environment. If you are unsure, please open a terminal and run the following command:
echo $XDG_SESSION_TYPE
If the above command doesn't output anything, please try with this method.
Now that you know your desktop environment, you're ready to choose the right method in the following section.
Choosing the right install method
There are multiple installation methods on Linux. This table summarizes them based on distribution and desktop environment:
| Distribution | X11 | Wayland |
|---|---|---|
| Ubuntu/Debian | DEB package (recommended), AppImage, Manual compilation | DEB package (recommended), Manual compilation |
| Fedora | AppImage (recommended), Terra RPM package, Manual compilation | Terra RPM package, Manual compilation |
| Arch/Manjaro | AppImage (recommended), Manual compilation | Manual compilation |
| Other distros | AppImage (recommended), Manual compilation | Manual compilation |
We are continously improving the installation process, so expect more user-friendly methods soon.
Install on X11
Installing with DEB package (Ubuntu/Debian)
Espanso ships with a .deb package, making the installation convenient on Debian-based systems.
Start by downloading the package by running the following command inside a terminal:
wget https://github.com/espanso/espanso/releases/latest/download/espanso-debian-x11-amd64.deb
Verifying package checksum
If you want to verify the correctness of the archive, in the Github Releases page you will find the SHA256 hash
in the file espanso-debian-x11-amd64-sha256.txt
You can now install the package using:
sudo apt install ./espanso-debian-x11-amd64.deb
You can safely ignore any N: Download is performed unsandboxed as root note from apt.
From now on, you should have the espanso command available in the terminal (you can verify by running espanso --version).
At this point, you are ready to use espanso by registering it first as a Systemd service and then starting it with:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
You are now ready to read the Getting Started tutorial!
Installing with Terra RPM package (Fedora-based)
The third party repository Terra automatically builds an .rpm package for the latest Espanso release, making installation on Fedora-based systems easier.
Start by following Terra's instructions on installing their main repository here: https://developer.fyralabs.com/terra/installing
Automatically verified builds
Terra builds all packages automatically using GitHub Actions and signs them before distribution, so installation and upgrades via DNF are always checked for integrity.
You can view the RPM spec files and resulting build artifacts for the packages installed via DNF on their GitHub repository (select the correct branch corresponding to your system version).
After installing the repository, you can install the Espanso using:
sudo dnf install espanso-x11
Beta releases
Terra always builds the latest tagged release from Espanso's GitHub, including pre-releases, meaning that beta versions may be included with updates.
From now on, you should have the espanso command available in the terminal (you can verify by running espanso --version).
At this point, you are ready to use espanso by registering it first as a Systemd service and then starting it with:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
You are now ready to read the Getting Started tutorial!
Installing with AppImage (all distros)
To install the Espanso's AppImage, open a terminal and follow these steps:
# Create the $HOME/opt destination folder
mkdir -p ~/opt
# Download the AppImage inside it
wget -O ~/opt/Espanso.AppImage 'https://github.com/espanso/espanso/releases/latest/download/Espanso-X11.AppImage'
# Make it executable
chmod u+x ~/opt/Espanso.AppImage
# Create the "espanso" command alias
sudo ~/opt/Espanso.AppImage env-path register
From now on, you should have the espanso command available in the terminal (you can verify by running espanso --version).
At this point, you are ready to use espanso by registering it first as a Systemd service and then starting it with:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
You are now ready to read the Getting Started tutorial!
Compiling from sources
Prerequisites
These are the basic tools required to build espanso:
A recent Rust compiler. You can install it following these instructions: https://www.rust-lang.org/tools/install
A C/C++ compiler. On Linux, you should use the default C/C++ compiler (it's usually GCC). If you run the command specified in the next step, this will be included automatically.
Install the required linux packages:
- On Ubuntu/Debian run
sudo apt update && sudo apt install build-essential git libx11-dev libxtst-dev libxkbcommon-dev libdbus-1-dev libssl-dev libwxgtk3.*-dev
- On Ubuntu/Debian run
Compiling Espanso
Once you've got all the prerequisites, you can:
# Clone the Espanso repository
git clone https://github.com/espanso/espanso
cd espanso
# Compile espanso in release mode
# NOTE: this will take a while (~5/15 minutes)
cargo build -p espanso --release --no-default-features --features vendored-tls,modulo
At this point, you should have the espanso binary available in the target/release/ directory.
Installing Espanso
Once you've compiled Espanso, you can move it into the final location. A good option would be the /usr/local/bin folder:
sudo mv target/release/espanso /usr/local/bin/espanso
From now on, you should have the espanso command available in the terminal (you can verify by running espanso --version).
At this point, you are ready to use espanso by registering it first as a Systemd service and then starting it with:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
You are now ready to read the Getting Started tutorial!
Install on Wayland
Wayland support is currently experimental, therefore some features might be missing or not working well yet. Known limitations include:
- If you are using a non-us keyboard layout, you'll need to explicitly specify it in the settings (more on this below).
- There is currently no support for App-specific configurations, which means we can't use patches (which are often necessary to support some terminals).
- If you are using Gnome, Espanso causes a small "flicker" when using the clipboard backend. This does not happen on Sway.
- If you connect a new keyboard, you will need to manually restart Espanso with
espanso restart, otherwise Espanso won't detect it.If you encounter a bug, please open an issue on GitHub, any help is greatly appreciated! :)
Installing with DEB package (Ubuntu/Debian)
Espanso ships with a .deb package, making the installation convenient on Debian-based systems.
Start by downloading the package by running the following command inside a terminal:
wget https://github.com/espanso/espanso/releases/latest/download/espanso-debian-wayland-amd64.deb
Verifying package checksum
If you want to verify the correctness of the archive, in the Github Releases page you will find the SHA256 hash
in the file espanso-debian-wayland-amd64-sha256.txt
You can now install the package using:
sudo apt install ./espanso-debian-wayland-amd64.deb
You can safely ignore any N: Download is performed unsandboxed as root note from apt.
The process is almost complete, you just need to grant the required capabilities.
Adding the required Capabilities
Espanso requires access to the /dev/input/eventX and /dev/uinput interfaces to detect triggers and inject expansions respectively.
Although you could run it as root to grant the necessary permissions, Espanso supports a safer alternative
that consists in adding the CAP_DAC_OVERRIDE capability to the binary's set of Permitted ones. To do so, run the following command:
sudo setcap "cap_dac_override+p" $(which espanso)
Security considerations
In a nutshell, this capability grants Espanso the permissions to read and write to any file in the system, but only when explicitly activated by the binary itself.
To limit the attack surface, Espanso performs the following steps:
When started, the
CAP_DAC_OVERRIDEcapability is contained in thePermittedset. At this point, Espanso CANNOT access arbitrary files in the system, as this is only possible once theCAP_DAC_OVERRIDEis moved to theEffectiveset.After a partial initialization of the various modules, Espanso moves the
CAP_DAC_OVERRIDEpermission to theEffectiveset and opens the necessary interfaces to the/dev/input/eventXand/dev/uinputfiles.Immediately after, the
PermittedandEffectivesets are cleared, meaning Espanso cannot access privileged files anymore. Moreover, because thePermittedset was cleared as well, the process won't be able to grant the permission again.In short, Espanso uses the
CAP_DAC_OVERRIDEpermission only when opening the/dev/input*interfaces, and ungrant that permission immediately after.For more information on Linux capabilities, see: https://man7.org/linux/man-pages/man7/capabilities.7.html
Final steps
Now run espanso --version. If you see the version appear, it means Espanso was successfully installed!
To complete the configuration, run these commands:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
Keyboards
If you are using a non-US keyboard layout (and some US variants), you'll need to specify its "code" into
the $CONFIG/config/default.yml file as follows:
# For example, this is what I use for the Italian layout
keyboard_layout:
layout: "it"
The keyboard_layout: object accepts rules:, model:, layout:, variant: and options: fields.
Your current system settings may be displayed with one of the following commands: setxkbmap -query, localectl status, swaymsg -t get_inputs, gsettings get org.gnome.desktop.input-sources sources or echo $XKB_DEFAULT_LAYOUT, depending on your desktop environment.
You are now ready to read the Getting Started tutorial!
Installing with Terra RPM package (Fedora-based)
The third party repository Terra automatically builds an .rpm package for the latest Espanso release, making installation on Fedora-based systems easier.
Start by following Terra's instructions on installing their main repository here: https://developer.fyralabs.com/terra/installing
Automatically verified builds
Terra builds all packages automatically using GitHub Actions and signs them before distribution, so installation and upgrades via DNF are always checked for integrity.
You can view the RPM spec files and resulting build artifacts for the packages installed via DNF on their GitHub repository (select the correct branch corresponding to your system version).
After installing the repository, you can install the Espanso using:
sudo dnf install espanso-wayland
Beta releases
Terra always builds the latest tagged release from Espanso's GitHub, including pre-releases, meaning that beta versions may be included with updates.
Adding the required Capabilities
Espanso requires access to the /dev/input/eventX and /dev/uinput interfaces to detect triggers and inject expansions respectively.
Although you could run it as root to grant the necessary permissions, Espanso supports a safer alternative
that consists in adding the CAP_DAC_OVERRIDE capability to the binary's set of Permitted ones. To do so, run the following command:
sudo setcap "cap_dac_override+p" $(which espanso)
Security considerations
In a nutshell, this capability grants Espanso the permissions to read and write to any file in the system, but only when explicitly activated by the binary itself.
To limit the attack surface, Espanso performs the following steps:
When started, the
CAP_DAC_OVERRIDEcapability is contained in thePermittedset. At this point, Espanso CANNOT access arbitrary files in the system, as this is only possible once theCAP_DAC_OVERRIDEis moved to theEffectiveset.After a partial initialization of the various modules, Espanso moves the
CAP_DAC_OVERRIDEpermission to theEffectiveset and opens the necessary interfaces to the/dev/input/eventXand/dev/uinputfiles.Immediately after, the
PermittedandEffectivesets are cleared, meaning Espanso cannot access privileged files anymore. Moreover, because thePermittedset was cleared as well, the process won't be able to grant the permission again.In short, Espanso uses the
CAP_DAC_OVERRIDEpermission only when opening the/dev/input*interfaces, and ungrant that permission immediately after.For more information on Linux capabilities, see: https://man7.org/linux/man-pages/man7/capabilities.7.html
Final steps
Now run espanso --version. If you see the version appear, it means Espanso was successfully installed!
To complete the configuration, run these commands:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
Keyboards
If you are using a non-US keyboard layout (and some US variants), you'll need to specify its "code" into
the $CONFIG/config/default.yml file as follows:
# For example, this is what I use for the Italian layout
keyboard_layout:
layout: "it"
The keyboard_layout: object accepts rules:, model:, layout:, variant: and options: fields.
Your current system settings may be displayed with one of the following commands: setxkbmap -query, localectl status, swaymsg -t get_inputs, gsettings get org.gnome.desktop.input-sources sources or echo $XKB_DEFAULT_LAYOUT, depending on your desktop environment.
You are now ready to read the Getting Started tutorial!
Compiling from sources
Prerequisites
These are the basic tools required to build espanso:
A recent Rust compiler. You can install it following these instructions: https://www.rust-lang.org/tools/install
A C/C++ compiler. On Linux, you should use the default C/C++ compiler (it's usually GCC). If you run the command specified in the next step, this will be included automatically.
Install the required linux packages:
- On Ubuntu/Debian run
sudo apt update && sudo apt install build-essential git wl-clipboard libxkbcommon-dev libdbus-1-dev libssl-dev libwxgtk3.*-dev - On Fedora run
sudo dnf install @development-tools gcc-c++ wl-clipboard libxkbcommon-devel dbus-devel wxGTK-devel.x86_64 - On Arch/Manjaro run
sudo pacman -S --needed git dbus base-devel wl-clipboard wxwidgets-gtk3
- On Ubuntu/Debian run
Compiling Espanso
Once you've got all the prerequisites, you can:
# Clone the Espanso repository
git clone https://github.com/espanso/espanso
cd espanso
# Compile espanso in release mode
# NOTE: this will take a while (~5/15 minutes)
cargo build -p espanso --release --no-default-features --features modulo,vendored-tls,wayland
At this point, you should have the espanso binary available in the target/release/ directory.
Installing Espanso
Once you've compiled Espanso, you can move it into the final location.
A good option would be the /usr/local/bin folder:
sudo mv target/release/espanso /usr/local/bin/espanso
The process is almost complete, you just need to grant the required capabilities.
Adding the required Capabilities
Espanso requires access to the /dev/input/eventX and /dev/uinput interfaces to detect triggers and inject expansions respectively.
Although you could run it as root to grant the necessary permissions, Espanso supports a safer alternative
that consists in adding the CAP_DAC_OVERRIDE capability to the binary's set of Permitted ones. To do so, run the following command:
sudo setcap "cap_dac_override+p" $(which espanso)
Security considerations
In a nutshell, this capability grants Espanso the permissions to read and write to any file in the system, but only when explicitly activated by the binary itself.
To limit the attack surface, Espanso performs the following steps:
When started, the
CAP_DAC_OVERRIDEcapability is contained in thePermittedset. At this point, Espanso CANNOT access arbitrary files in the system, as this is only possible once theCAP_DAC_OVERRIDEis moved to theEffectiveset.After a partial initialization of the various modules, Espanso moves the
CAP_DAC_OVERRIDEpermission to theEffectiveset and opens the necessary interfaces to the/dev/input/eventXand/dev/uinputfiles.Immediately after, the
PermittedandEffectivesets are cleared, meaning Espanso cannot access privileged files anymore. Moreover, because thePermittedset was cleared as well, the process won't be able to grant the permission again.In short, Espanso uses the
CAP_DAC_OVERRIDEpermission only when opening the/dev/input*interfaces, and ungrant that permission immediately after.For more information on Linux capabilities, see: https://man7.org/linux/man-pages/man7/capabilities.7.html
Final steps
Now run espanso --version. If you see the version appear, it means Espanso was successfully installed!
To complete the configuration, run these commands:
# Register espanso as a systemd service (required only once)
espanso service register
# Start espanso
espanso start
If you don't want to use espanso as a Systemd service, you can also start it in unmanaged mode with
espanso start --unmanaged. Keep in mind that Espanso will not start automatically when running in unmanaged mode, so you will need to do so manually.
Keyboards
If you are using a non-US keyboard layout (and some US variants), you'll need to specify its "code" into
the $CONFIG/config/default.yml file as follows:
# For example, this is what I use for the Italian layout
keyboard_layout:
layout: "it"
The keyboard_layout: object accepts rules:, model:, layout:, variant: and options: fields.
Your current system settings may be displayed with one of the following commands: setxkbmap -query, localectl status, swaymsg -t get_inputs, gsettings get org.gnome.desktop.input-sources sources or echo $XKB_DEFAULT_LAYOUT, depending on your desktop environment.
You are now ready to read the Getting Started tutorial!
