The following is a quick guide on how to manually download, extract and run Signal for Linux on a non-(deb)apt based distro (and includes a shell script that automates the entire process). This is for use when no suitable, native (re)package is available. It also includes some additional instructions on how to integrate with your desktop environment. Almost any recent distro (configured for desktop use) will likely have all the dependencies already installed—especially so if you already have any other Electron apps or a Chromium based browser installed, since they will require the same things.
[Note: Triple-click to easily select any of the lines below for copy and pasting into the terminal]
- Switch to a directory you think is suitable for housing Signal (for example
~/opt
)
mkdir -p ~/opt && cd ~/opt
- Download the latest .deb package
wget https://updates.signal.org/desktop/apt/`wget -qO- https://updates.signal.org/desktop/apt/dists/xenial/main/binary-amd64/Packages.gz | zgrep -m1 '^Filename:.*/signal-desktop/' | cut -d' ' -f2`
[Note: Version '7.32.0' as of the 11th of Nov 2024 at 21:30 UTC]
- Extract the files
ar p "`ls -t signal-desktop_*.deb* | head -1`" data.tar.xz | tar xJ --one-top-level=signal-desktop
[Note: The ar
command is found in the GNU Binutils package if you do not have it installed and the tar
command assumes a fairly recent GNU tar]
- Launch Signal
signal-desktop/opt/Signal/signal-desktop &
[Note: Repeat this last command every time you need to re-launch. You will need to either switch to the same working directory you used in the initial step first or simply adjust the path accordingly.]
If you want to check for a new version in the future, simply issue the following
wget -qO- https://updates.signal.org/desktop/apt/dists/xenial/main/binary-amd64/Packages.gz | zgrep -Exm1 'Version: ([0-9\.]+){2}[0-9\.]+'
If there is a new one and you do want to upgrade to it, just delete the "signal-desktop" directory then repeat the "Fetch, extract and launch" steps above.
[Note: You do not have to worry about accidentally deleting your settings when deleting the contents of the "install" directory ("signal-desktop"), as they are stored separately in "${XDG_CONFIG_HOME:-$HOME/.config}/Signal"
]
If you want to get a little advanced, you can even integrate the manually extracted copy of Signal with your Desktop Environment, so that it shows up in the desktop launcher, like any other installed application. 😉
[Note:You will need to issue these commands from the same working directory as the previous steps. Normally you should not need to repeat this for every upgrade. Unless there are new icons or major changes to the desktop file, doing it once is often enough. However repeating these steps is unlikely to be problematic]
- Ensure that the
XDG_DATA_HOME
directory structure exists
mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/applications"
- Copy icons into
XDG_DATA_HOME
(cd signal-desktop/usr/share; find icons -name signal-desktop.png | cpio --quiet -pud "${XDG_DATA_HOME:-$HOME/.local/share}")
- Copy a (tweaked) desktop file into
XDG_DATA_HOME
sed "s,^Exec=.*signal-desktop[\(\" \) ],Exec=\"$PWD/signal-desktop/opt/Signal/signal-desktop\" ," signal-desktop/usr/share/applications/signal-desktop.desktop > "${XDG_DATA_HOME:-$HOME/.local/share}/applications/signal-desktop.desktop"
- Register with your desktop environment
update-desktop-database -q "${XDG_DATA_HOME:-$HOME/.local/share}/applications"
[Note: You may need to re-login to your desktop environment before Signal shows up]
Should you wish to remove the desktop integration in the future issue the following
find "${XDG_DATA_HOME:-$HOME/.local/share}" -name signal-desktop.\* -delete
[Note: If it does not disappear immediately, either log out and back into your desktop environment or just issue that "update-desktop-database
" command listed above again]
For the lazy I also include a shell script that automates all of the above, including fetching upgrades and clean removal. It also handles the beta, alpha and staging streams. I tested it fairly well but review it and use at your own risk. 😉
For example to install the normal/stable verison, make the install script executable (chmod 755 fetch_signal_linux.sh
) and then issue the following
./fetch_signal_linux.sh
To install the Beta stream instead
./fetch_signal_linux.sh --beta
[Note: Other switches include --alpha
and --staging
for those streams respectively]