scli
is a simple terminal user interface for Signal. It uses signal-cli or optionally signald and urwid.
- Firstly, you need to install signal-cli. Follow the guide provided in the README. The instructions for
signald
are similar, except you don't need the next step. - For DBUS and daemon support, install the
libmatthew-java
library, commonly found packaged under the nameslibunixsocket-java
(Debian/Ubuntu) orlibmatthew-unix-java
(Arch Linux) from your package manager if you have not installed it yet. (If on Arch you installedsignal-cli
from AUR, you can skip this step.) - Install
urwid
. You can install it trough your distributions package manager (search forpython3-urwid
orpython-urwid
) or you can usepip
to install:pip3 install urwid
.
scli
does not provide anything for registering/linking, you need to do this using signal-cli
or signald
.
For linking your computer follow these steps (for registering a new number, see README of signal-cli or that of signald)
- Run
signal-cli link -n "DEVICE_NAME"
. (DEVICE_NAME is just an alias for your computer. You can skip-n "DEVICE_NAME
part. Without that, your devices alias will be justcli
.) - This will output
tsdevice:/...
URI (Do not terminate this command, it needs to be alive during linking process. Continue in a separate terminal.). Copy the URI and create a QR code with it usingqrencode
(or any other QR code generator of your choice):
qrencode 'LINK' -o qrcode.png
- Open Signal application on your phone and scan the QR code you just generated.
- Run
signal-cli -u PHONE_NUMBER receive
. This is required to fetch your contacts for the first time. Forsignald
this step is not required. Note:PHONE_NUMBER
starts with+
followed by the country code. - Now you can start using:
scli
For signald
, you need one of these TOOLs to be installed: socat or netcat (the OpenBSD version). After starting up signald
, run:
scli --signald TOOL
A simple two-paned interface is provided. Left pane contains the contact list and the right pane contains the conversation. You can switch focus between panes by hitting Tab
(or Shift + Tab
). Hitting tab for the first time focuses the conversation, hitting it again focuses to input line. So the tab order is Contacts -> Conversation -> Input
, you can use Shift + Tab
for cycling backwards.
- Use
j
/k
or the cursor keys to go down/up in contacts list or in messages. - Hitting
enter
on a contact starts conversation and focuses to input line. - Hitting
l
on a contact only starts conversation. - Hitting
o
on a message opens the URL if there is one, if not it opens the attachment if there is one. - Hitting
enter
on a message opens the attachment if there is one, if not it opens the URL if there is one. - Hitting
y
on a message puts it into system clipboard. (needs xclip) g
focuses first contact/message.G
focuses last contact/message.d
deletes the message from your screen (and from your history, if history is enabled).i
show a popup that contains detailed information about the message.u
in contacts list unfocusses the currently active conversation (if any)+
orinsert
in the contact list allows to add new contacts.
There are some basic commands that you can use. Hit :
to enter command mode (or simply focus the beginning of the input line and type :
).
You can abort the command mode by hitting Backspace
at the beginning or ESC
anywhere.
:quit
or:q
simply quits the program.:openUrl
or:u
opens last URL in messages, if there is one.:openAttach
or:o
opens last attachment in messages, if there is one.:attach FILE_PATH MSG
or:a FILE_PATH MSG
attaches the file under the given path to message. The message is optional and FILE_PATH is shell-escaped, e.g.:a 'this file'
will attachthis file
(including white-space).:attachClip
or:c
attaches clipboard content to message. This command tries to detect clipboard content. If clipboard contains something with the mime-typeimage/png
orimage/jpg
, simply attaches the image to message. If clipboard containstext/uri-list
it attaches all the files in that URI list to your message. This command needsxclip
installed.:toggleNotifications
or:n
toggles desktop notifications.:edit
or:e
lets you edit your message in your$EDITOR
.:toggleAutohide
or:h
toggles autohide property of the contacts pane.
Examples:
:attach ~/cute_dog.png check out this cute dog!
:attachclip here is another picture.
Note: Commands are case insensitive, :quit
and :qUiT
does the same thing.
There is a built-in search feature. Simply hit /
(or focus the input line then type /
) and start typing, the chat will be filtered out based on your input. You can focus any of the search results and hit enter
(or l
) to open that result in full conversation.
As with the command mode, Backspace
at the beginning of the input line or ESC
anywhere will stop the search mode and put you back into message editing.
There are some simple configuration options. You can either pass them as command-line arguments or add them to your configuration file. Run scli --help
to see options. Configuration file syntax is also pretty easy. Lines starting with #
and empty lines are ignored, other lines should consist key=value
pairs.
scli -u +1234567890 --enable-notifications=true
Configuration file equivalent of this command is:
# Long option forms are used in config file. (u=+123... is not valid.)
username=+1234567890
enable-notifications=true