signal-logo.pngSignal is an open-source messaging application that provides end-to-end encrypted instant messaging, voice calls, and video calls.

Installation

Signal is not currently packaged on Debian. Upstream (Signal Technology Foundation, Signal Messenger LLC) provides Debian packages and AppImages on its download page. They include installation instructions.

Known problems

Signal generally works well on Debian trixie. The following section documents known issues that may affect some systems. Tested using the provided Debian packages.

Not sending/receiving messages after screen lock

When using the LXDE desktop environment, the default screen locker may be light-locker, provided by the package of the same name.

In some cases, after the session has been locked for a while, Signal Desktop may stop sending or receiving messages.

A possible workaround is to replace light-locker with xscreensaver:

$ sudo apt install xscreensaver
$ sudo apt remove light-locker
$ xscreensaver-settings

Use xscreensaver-settings to configure screen locking as required. You may need to log out and back in for the change to take effect.

Not sending/receiving messages after suspend-resume cycle

On some systems, after resuming from suspend, Signal may stop sending and receiving messages until it is restarted.

One workaround is to restart Signal automatically when the network connection is re-established. This is a workaround with at least one problem: unsent messages may be lost, but it avoids having to restart Signal manually after every suspend/resume cycle.

If using NetworkManager on your Debian, create a file in /etc/NetworkManager/dispatcher.d/90-restart-software with the following contents:

   1 #!/bin/sh
   2 
   3 set -eu
   4 
   5 USER_NAME="YourUserName"
   6 SCRIPT="/home/$USER_NAME/bin/restart-apps-after-connecting.sh"
   7 IFACE="$1"
   8 STATE="$2"
   9 
  10 case "$STATE" in
  11   up)
  12     runuser -u "$USER_NAME" "$SCRIPT"
  13     ;;
  14 esac

Then, create the file /home/$USER_NAME/bin/restart-apps-after-connecting.sh with the following contents:

   1 #!/bin/sh
   2 
   3 # Script referenced from /etc/NetworkManager/dispatcher.d/90-restart-software
   4 
   5 USER_ID=$(id -u "$USER")
   6 
   7 export DISPLAY=:0
   8 export XAUTHORITY="/home/$USER/.Xauthority"
   9 export XDG_RUNTIME_DIR="/run/user/$USER_ID"
  10 export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$USER_ID/bus"
  11 export HOME="/home/$USER"
  12 export USER="$USER"
  13 export LOGNAME="$USER"
  14 export LANG=C.UTF-8
  15 export PATH="/usr/local/bin:/usr/bin:/bin"
  16 
  17 restart_if_running() {
  18   name="$1"
  19   cmd="$2"
  20 
  21   if pgrep -u "$USER" -f "$name" >/dev/null; then
  22     pkill -u "$USER" -f "$name" || true
  23 
  24     timeout=5
  25     end=$(( $(date +%s) + $timeout ))
  26 
  27     while pgrep -u "$USER" -f "$name" >/dev/null
  28     do
  29       if [ "$(date +%s)" -ge "$end" ]
  30       then
  31         echo "Timed out waiting for $name" >&2
  32         break
  33       fi
  34 
  35       sleep 0.1
  36     done
  37 
  38     setsid "$cmd" </dev/null >>"/tmp/restart-$name.log" 2>&1 &
  39   fi
  40 }
  41 
  42 
  43 restart_if_running signal-desktop /usr/bin/signal-desktop

Adjust it for your case (specially the top environment variables).