Signal-cli/README.md

105 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# signal-cli
First and foremost a big thank you to [AsamK](https://github.com/AsamK), most of this guide is copied from AsamK's [signal-cli](https://github.com/AsamK/signal-cli) repo and modified to fit my own needs.
This guide is for installing and running signal-cli as a daemon and setting up a system-wide dbus.
signal-cli is a commandline interface for the [Signal messenger](https://signal.org/).
It supports registering, verifying, sending and receiving messages.
signal-cli uses a [patched libsignal-service-java](https://github.com/Turasa/libsignal-service-java),
extracted from the [Signal-Android source code](https://github.com/signalapp/Signal-Android/tree/main/libsignal/service).
For registering you need a phone number where you can receive SMS or incoming calls.
## Installation
System requirements:
- at least Java Runtime Environment (JRE) 17
- wget
Debian/Ubuntu:
```sh
$ sudo apt install wget openjdk-17-jre
```
### Install system-wide on Linux
See [latest version](https://github.com/AsamK/signal-cli/releases).
```sh
$ export VERSION=<latest version, format "x.y.z">
$ wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}"-Linux.tar.gz
$ sudo tar xf signal-cli-"${VERSION}"-Linux.tar.gz -C /opt
$ sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/
```
## Initial Setup
Create user for running the service, --system creates a system user without home dir and password. :
```sh
# adduser --system --group signal-cli
```
Create a folder for signal account configs:
```sh
# mkdir /var/lib/signal-cli
# chown signal-cli: /var/lib/signal-cli
```
## Register Account
```sh
# su signal-cli -s /bin/bash
$ /usr/local/bin/signal-cli --config /var/lib/signal-cli -u <PHONE NUMBER> register
```
Registering may require solving a CAPTCHA challenge: [Registration with captcha](https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha)
Verify the number using the code received via SMS or voice, optionally add `--pin PIN_CODE` if you've added a pin code to your account:
```sh
signal-cli$ /usr/local/bin/signal-cli --config /var/lib/signal-cli -u <PHONE NUMBER> verify <CODE>
```
## Setup systemd service and dbus
To run on the system bus you need to take some additional steps. Its advisable to run signal-cli as a separate unix user, the following steps assume you created a user named signal-cli. To run a service on the system bus, a config file is needed to allow the signal-cli user to take a name on the system bus. An example config file can be found in data/org.asamk.Signal.conf. This file also configures that any user can talk with the signal-cli daemon. The data/org.asamk.Signal.service and data/signal-cli.service files configure a dbus activated systemd service for signal-cli, so the service is automatically started when the dbus service is requested.
Git clone this repo as you will need files from the data folder.
```sh
git clone https://git.data.coop/sune/Signal-cli.git
```
These steps, executed as root, should work on all distributions using systemd.
Move the files:
```sh
# mv data/org.asamk.Signal.conf /etc/dbus-1/system.d/
# mv data/org.asamk.Signal.service /usr/share/dbus-1/system-services/
# mv data/signal-cli.service /etc/systemd/system/
```
Edit service file to match phone number and enable systemd service:
```sh
# sed -i -e "s|%number%|<PHONE NUMBER>|" /etc/systemd/system/signal-cli.service
# systemctl daemon-reload
# systemctl enable signal-cli.service
# systemctl reload dbus.service
# systemctl start signal-cli.service
```
## Test
Send a message:
```sh
$ signal-cli --dbus-system send -m "hey test" <RECIPIENT>
```
## Receive messages from signal-cli daemon
The signal-cli daemon publishes new messages to dbus.
Here's an example using python:
```python
def msgRcv (timestamp, source, groupID, message, attachments):
print ("Message", message, "received in group", signal.getGroupName (groupID))
return
from pydbus import SystemBus
from gi.repository import GLib
bus = SystemBus()
loop = GLib.MainLoop()
signal = bus.get('org.asamk.Signal')
signal.onMessageReceived = msgRcv
loop.run()
```