How to build Signal Desktop on Linux
Today let’s try to make your own Linux build of Signal Desktop, in .deb and .AppImage format.
Signal is a mobile app developed by Open Whisper Systems. The app provides instant messaging, voice and video calling, and all communications are end-to-end encrypted.
Signal is free and open source, and also provides a desktop application developed using Electron: all sourcecode is available on GitHub.
So, if you want to try the last version of the desktop app, or if you don’t want relying on the pre-builded releases, you can simply build the app on your workstation.
Here the steps (in my case performed on a Debian 9).
First, install build-essential and nvm:
`$ sudo apt install build-essential
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash`
Then, clone the Signal Desktop git repository…
`$ git clone`
Install and configure the correct NodeJs version:
`$ cd Signal-Desktop`
`$ nvm use
Found '~/Signal-Desktop/.nvmrc' with version <10.13.0>
N/A: version "v10.13.0" is not yet installed`
`$ nvm install 10.13.0
Downloading
######################################################################## 100,0%
WARNING: checksums are currently disabled for node.js v4.0 and later
Now using node v10.13.0 (npm v6.4.1)`
`$ nvm use
Found '~/Signal-Desktop/.nvmrc' with version <10.13.0>
Now using node v10.13.0 (npm v6.4.1)`
Install some dependencies and start building process:
`$ npm install --global yarn`
`$ yarn install --frozen-lockfile`
`$ yarn grunt`
`$ yarn icon-gen`
`$ yarn generate`
`$ yarn build-release`
Now, in the release directory you will find both .deb package and unpacked version:
`$ ~/Signal-Desktop$ cd release/
$ ~/Signal-Desktop/release$ ls
builder-effective-config.yaml linux-unpacked signal-desktop_1.23.0-beta.4_amd64.deb`
Finally, you can create a desktop file in ~/.local/share/applications/signal-desktop.desktop to get a launcher icon:
`[Desktop Entry]
Version=1.23.0-beta.4
Terminal=false
Type=Application
Name=Signal Desktop
Exec=env LANGUAGE=tlh /home/andrea/Signal-Desktop/release/linux-unpacked/signal-desktop
Icon=/home/andrea/Signal-Desktop/build/icons/png/128x128.png
StartupWMClass=signal`
Bonus: build an AppImage release
If you prefer the, more portable, AppImage format, you can build it with a small change on package.json file, in top source directory.
Search the “Linux” build section:
`"linux": {
"category": "Network",
"desktop": {
"StartupWMClass": "Signal"
},
"asarUnpack": "node_modules/spellchecker/vendor/hunspell_dictionaries",
"target": [
"deb"
],
"icon": "build/icons/png"
},`
and add the “AppImage” target:
`"linux": {
"category": "Network",
"desktop": {
"StartupWMClass": "Signal"
},
"asarUnpack": "node_modules/spellchecker/vendor/hunspell_dictionaries",
"target": [
"deb",
"AppImage"
],
"icon": "build/icons/png"
},`
then execute
`$ yarn build-release`
And here the result in release directory:
`$ ~/Signal-Desktop$ cd release/
$ ~/Signal-Desktop/release$ ls
builder-effective-config.yaml latest-linux.yml linux-unpacked signal-desktop_1.23.0-beta.4_amd64.deb signal-desktop-1.23.0-beta.4-x86_64.AppImage`
P.S. The builds created during the making of this article are available here.
References
- Signal Homepage
- Signal Desktop GitHub repository
- NVM installation
- Electron
- My own builds of Signal Desktop (.deb and .AppImage)