/////
vim:set ts=4 sw=4 tw=82 noet:
/////
:quotes.~:

signal-cli (1)
============

Name
----
signal-cli - A commandline and dbus interface for the Signal messenger

Synopsis
--------
*signal-cli* [--config CONFIG] [-h | -v | -u USERNAME | --dbus | --dbus-system] command [command-options]

Description
-----------

signal-cli is a commandline interface for libsignal-service-java. It supports
registering, verifying, sending and receiving messages. For registering you need a
phone number where you can receive SMS or incoming calls.
signal-cli was primarily developed to be used on servers to notify admins of
important events. For this use-case, it has a dbus interface, that can be used to
send messages from any programming language that has dbus bindings.

Options
-------

*-h*, *--help*::
	Show help message and quit.

*-v*, *--version*::
	Print the version and quit.

*--config* CONFIG::
	Set the path, where to store the config.
	(Default: $HOME/.config/signal)

*-u* USERNAME, *--username* USERNAME::
	Specify your phone number, that will be your identifier.
	The phone number must include the country calling code, i.e. the number must
	start with a "+" sign.

*--dbus*::
	Make request via user dbus.

*--dbus-system*::
	Make request via system dbus.

Commands
--------

register
~~~~~~~~
Register a phone number with SMS or voice verification. Use the verify command to
complete the verification.

*-v*, *--voice*::
	The verification should be done over voice, not SMS.

verify
~~~~~~
Verify the number using the code received via SMS or voice.

VERIFICATIONCODE::
	The verification code.

link
~~~~
Link to an existing device, instead of registering a new number.  This shows a
"tsdevice:/…" URI. If you want to connect to another signal-cli instance, you can
just use this URI. If you want to link to an Android/iOS device, create a QR code
with the URI (e.g. with qrencode) and scan that in the Signal app.

*-n* NAME, *--name* NAME::
	Optionally specify a name to describe this new device. By default "cli" will
	be used.

addDevice
~~~~~~~~~
Link another device to this device. Only works, if this is the master device.

*--uri* URI::
	Specify the uri contained in the QR code shown by the new device.                                                            

listDevices
~~~~~~~~~~~
Show a list of connected devices.

removeDevice
~~~~~~~~~~~~
Remove a connected device. Only works, if this is the master device.

*-d* DEVICEID, *--deviceId* DEVICEID::
	Specify the device you want to remove. Use listDevices to see the deviceIds.

send
~~~~
Send a message to another user or group.

RECIPIENT::
	Specify the recipients’ phone number.

*-g* GROUP, *--group* GROUP::
	Specify the recipient group ID in base64 encoding.

*-m* MESSAGE, *--message* MESSAGE::
	Specify the message, if missing, standard input is used.

*-a* [ATTACHMENT [ATTACHMENT ...]], *--attachment* [ATTACHMENT [ATTACHMENT ...]]::
	Add one or more files as attachment.

*-e*, *--endsession*::
	Clear session state and send end session message.

receive
~~~~~~~
Query the server for new messages. New messages are printed on standardoutput and
attachments are downloaded to the config directory.

*-t* TIMEOUT, *--timeout* TIMEOUT::
	Number of seconds to wait for new messages (negative values disable timeout).
	Default is 5 seconds.
*--ignore-attachments*::
	Don’t download attachments of received messages.

updateGroup
~~~~~~~~~~~
Create or update a group.

*-g* GROUP, *--group* GROUP::
	Specify the recipient group ID in base64 encoding. If not specified, a new
	group with a new random ID is generated.

*-n* NAME, *--name* NAME::
	Specify the new group name.

*-a* AVATAR, *--avatar* AVATAR::
	Specify a new group avatar image file.

*-m* [MEMBER [MEMBER ...]], *--member* [MEMBER [MEMBER ...]]::
	Specify one or more members to add to the group.

quitGroup
~~~~~~~~~
Send a quit group message to all group members and remove self from member list.

*-g* GROUP, *--group* GROUP::
	Specify the recipient group ID in base64 encoding.


listIdentities
~~~~~~~~~~~~~~
List all known identity keys and their trust status, fingerprint and safety
number.

*-n* NUMBER, *--number* NUMBER::
	Only show identity keys for the given phone number.

trust
~~~~~
Set the trust level of a given number. The first time a key for a number is seen,
it is trusted by default (TOFU). If the key changes, the new key must be trusted
manually.

number::
	Specify the phone number, for which to set the trust.

*-a*, *--trust-all-known-keys*::
	Trust all known keys of this user, only use this for testing.

*-v* VERIFIED_FINGERPRINT, *--verified-fingerprint* VERIFIED_FINGERPRINT::
	Specify the safety number or fingerprint of the key, only use this option if you have verified
	the fingerprint.


daemon
~~~~~~
signal-cli can run in daemon mode and provides an experimental dbus interface. For
dbus support you need jni/unix-java.so installed on your system (Debian:
libunixsocket-java ArchLinux: libmatthew-unix-java (AUR)).

*--system*::
	Use DBus system bus instead of user bus.
*--ignore-attachments*::
	Don’t download attachments of received messages.


Examples
--------

Register a number (with SMS verification)::
    signal-cli -u USERNAME register

Verify the number using the code received via SMS or voice::
    signal-cli -u USERNAME verify CODE

Send a message to one or more recipients::
    signal-cli -u USERNAME send -m "This is a message" [RECIPIENT [RECIPIENT ...]] [-a [ATTACHMENT [ATTACHMENT ...]]]

Pipe the message content from another process::
    uname -a | signal-cli -u USERNAME send [RECIPIENT [RECIPIENT ...]]

Create a group::
	signal-cli -u USERNAME updateGroup -n "Group name" -m [MEMBER [MEMBER ...]]

Add member to a group::
	signal-cli -u USERNAME updateGroup -g GROUP_ID -m "NEW_MEMBER"

Leave a group::
	signal-cli -u USERNAME quitGroup -g GROUP_ID

Send a message to a group::
	signal-cli -u USERNAME send -m "This is a message" -g GROUP_ID

Trust new key, after having verified it::
    signal-cli -u USERNAME trust -v FINGER_PRINT NUMBER

Trust new key, without having verified it. Only use this if you don't care about security::
    signal-cli -u USERNAME trust -a NUMBER

Files
-----
The password and cryptographic keys are created when registering and stored in the
current users home directory, the directory can be changed with *--config*:

    $HOME/.config/signal/

For legacy users, the old config directory is used as a fallback:

    $HOME/.config/textsecure/


Authors
-------

Maintained by AsamK <asamk@gmx.de>, who is assisted by other open
source contributors. For more information about signal-cli development, see
<https://github.com/AsamK/signal-cli>.
