aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2023-11-08-scli.org
blob: dba88ff258ab75b7eae110655c5e498c56029361 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#+date: <2023-11-08>
#+title: Installing scli on Alpine Linux (musl)
#+description: 


[[https://github.com/isamert/scli][scli]] is a command-line tool that
allows you to connect to your Signal messenger account. This program
utilizes a two-pane display that shows you chats on the left and the
focused conversation on the right.

This guide will show you how to install =scli= and its dependencies on
Alpine Linux, which requires some extra work due to musl.

If you're using a non-musl system, you can likely following the =scli=
README and download the packaged binaries for an easier installation
process.

* Dependencies

In order to use =scli=, you need a few dependencies:

- =openjdk17-jre= - Used as a dependency for the =signal-cli= tool.
  Version may vary.
- =signal-cli= - Used as the backbone of the =scli= tool.
- =findutils= - Replaces the standard Busybox version of =xargs=.
- =urwid= - A console user interface library for Python.
- =urwid-readline= - For GNU emacs-like keybinds on the input line.
- =qrencode= - Displays a QR code in the terminal to link the device
  using your phone. Not necessary if you're only linking on desktop and
  can copy/paste the connection URL.

Let's start by installing the packages available via Alpine's
repositories. Be sure to install the latest version of =openjdk=. If you
run into Java-related issues, uninstall =openjdk= and install an older
version.

#+begin_src sh
doas apk add openjdk17-jre findutils qrencode
#+end_src

Next, let's install =signal-cli=. Be sure to export the version of
=signal-cli= that you want. I use version =0.12.4= below, but that may
be outdated by the time you're reading this.

#+begin_src sh
export VERSION="0.12.4"
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
doas tar xf signal-cli-"${VERSION}".tar.gz -C /opt
doas ln -sf /opt/signal-cli-${VERSION}"/bin/signal/cli /usr/local/bin
#+end_src

Finally, install the =urwid= packages using the Python packaging
utility.

#+begin_src sh
pip3 install urwid urwid-readline
#+end_src

* Installation

Now that we have all of the dependencies we need, we can install =scli=.
Start by simply cloning the repository.

#+begin_src sh
git clone https://github.com/isamert/scli
#+end_src

When I cloned this repository on 2023-11-08, I found a bug in the logic
that required a fix. You must edit the =scli= file and replace the one
instance of =RLIMIT_OFILE= with =RLIMIT_NOFILE=.

#+begin_src sh
cd scli
nano scli
#+end_src

Once complete, you can move this program to anywhere on your =$PATH=. I
chose the following directory.

#+begin_src sh
doas mv scli /usr/local/bin/scli
#+end_src

* Initial Setup

Now that everything is installed, we can login and configure the client.
Start by generating a connection link.

#+begin_src sh
signal-cli link -n "YOUR-DEVICE-NICKNAME" | tee >(xargs -L 1 qrencode -t utf8)
#+end_src

This will generate a connection link and related QR code for you to use
to link the devices together. Once complete, *wait patiently* for the
connection process to finish.

Once it completes, it will exit and return you to the prompt. From here,
you need to perform an initial =receive= command to start things off.
The =USERNAME= variable should be your phone number, such as
=+15551237890=.

#+begin_src sh
signal-cli -u USERNAME receive
#+end_src

Also be sure to test the daemon to ensure it works properly. If no
errors occur, it's working. If you run into errors because you're not
running a DBUS session, see my notes below.

#+begin_src sh
signal-cli -u USERNAME daemon
#+end_src

Once the initial reception is complete, you are ready to use =scli=.

This process will differ depending on your desktop environment (DE). If
you are running a DE, you likely have a DBUS session running already and
can simply launch the program.

However, if you're like me and running your computer straight on the TTY
without a DE, you'll need to start a DBUS session for this program.

#+begin_src sh
# If you're not running a DBUS session yet, you need to start one for scli
dbus-run-session -- scli

# OR - If you're already running a DBUS session, simply run scli
scli
#+end_src

* Configuration

Lastly, there are a number of configuration options that you can pass
via the command or in the =~/.config/sclirc= file. See the Github README
for more information on configuration options.

#+begin_src sh
nano ~/.config/sclirc
#+end_src

#+begin_src conf
# ~/.config/sclirc

wrap-at = 80
enable-notifications = true
#+end_src

That's it! Following this guide, I have a functional =scli= program that
successfully sends messages to my contacts and myself!