[2025-jun-17] The SlackDocs Wiki has moved to a new server, in order to make it more performant.
Table of Contents
Video calls and Screen Sharing on Slackware64 15.0 with Dino and OBS-Studio
This HOWTO is about making video calls and screensharing on Slackware 15.0.
Short Summary
- 1. HE DNS
- 2. acme.sh or dehydrated DNS-TLS
- 3. Turnserver-Coturn
- 4. Prosody
- 5. gstreamer-vaapi
- 6. Dino
- 7. Conversations
- 8. Pipewire
- 9. v4l2loopback
- 10. obs-studio
- 11. bluetooth headphones
Main text
Introduction
This HOWTO is about how to host your own 1-on-1 communication system using Slackware64-15.0.
The motivation behind it is the following: Internet is getting increasingly fragmented, and various services which are convenient to use in different places end up be incompatible. The time when a single company (and a single piece of software) dominated the communication market (Skype) is over, and it often happens that you and the person you have to deal with (a business partner, a company branch, a scientific adviser) lives in a place where the software you and people around you use for text messaging an making calls is inaccessible.
It thus becomes advantageous to have one's own communication mechanism for calling, text chatting, and screen sharing. Not as a way to replace the existing big oligarchs, but as a backup, which becomes incredibly useful when using big tech get politically inconvenient, big tech services malfunction, or when their security systems ban you or your scientific adviser for no apparent reason and with no ability to appeal.
The protocol we will be building our communication system on is called XMPP, or “Jabber”. Even though there are other systems out there, such as Matrix and IRC, XMPP programs are usually less resource consuming than the former and less capital-intensive than the latter.
In order for a communication software to be up to date in 2025, we need the following features:
- 1. Text messaging with server archive support,
- 2. Audio calling,
- 3. Video calling,
- 4. Screen sharing,
- 5. Image and file transfers via HTTPS with permanent links,
- 6. An input method for smileys and Asian writing systems,
- 7. End-to-end encryption using OMEMO or a similar system,
- 8. (optional) GnuPG encryption.
DNS, TLS, and a server.
The first step is to obtain a server to be the third party in communications. Even though it is still often possible to establish peer-to-peer connections on modern Internet, a third party adds a level of reliability inaccessible by other means.
Hardware
It is recommended to rent a qemu VM with about ~40 Gb of storage, 2 gb of RAM, and install Slackware64-15.0.
It is probably possible to use a VM with less space and less RAM, and even use a 32-bit build of Slackware, but I have no experience doing so.
Software
After the server is up and running, you have register a domain name, find a DNS server to server it for you and get TLS certificates for it.
I cannot recommend a free domain registration service, but Hurricane Electric allows free DNS hosting, and even allows altering DNS records with a simple ~curl~ request, which means that it is possible to use a DNS-01 ACME challenge to convince Let's Encrypt to give you a tls certificate for as many domains as you need.
You need certificates for the following domains:
- 1. yourdomain.com
- 2. xmpp.yourdomain.com
- 3. turn.yourdomain.com
- 4. xmpp-upload.yourdomain.com
- 5. conference.yourdomain.com (if you want group chats)
To pass the DNS-01 challenge you can use acme.sh, which is on SBo, but possibly also using stock 15.0's dehydrated.
After you have obtained the TLS certificates, you are able to install and set up server software.
Prosody
Prosody (available on SBo) is an XMPP server, which also supports HTTP uploads. When Prosody is used with a recent Lua, such as SBo's Lua 5.4, it can handle moderate amounts of HTTP uploads by itself, without help from nginx.
Enable prosody on start with /etc/rc.d/rc.prosody
Configuring prosody is beyond the scope of this HOWTO, but there are many HOWTOs out there. It is important to enable the modules which implement modern chat experience, such as
- 1. “smacks”;
- 2. “cloud_notify”
- 3. “bookmarks”
- 4. “admin_shell”
- 5. “turn_external”
- 6. “groups”
- 7. “proxy65”
- 8. “mam”
- 9. “csi_simple”
- 10. “carbons”
- 11. “pep”
- 12. “private”
- 13. “blocklist”
- 14. “vcard4”
- 15. “vcard_legacy”
- 16. “limits”
Register some users with prosodyctl.
Coturn
A TURN server is mandatory for reliable voice communication, and SBo has “coturn”.
Configuring coturn is also out of scope of this HOWTO, but there are many HOWTOs available on the Internet.
use-auth-secret static-auth-secret=<your secret>
It is important to add Coturn's authentication method to Prosody's configuration file, so that when calls are made, Prosody would hand out credentials.
turn_external_host = "turn.yourdomain.com" turn_external_port = 3478 turn_external_secret = "<your secret>"
Enable /etc/rc.d/rc.turnserver wherever you like.
Conversations
Conversations is an open source Android XMPP client. You can install it from F-Droid or build yourself.
Try using it with the accounts (login:password) you just created, and do not miss trying to try a voice/video call.
There is a branch of Conversations which support screen sharing: https://codeberg.org/iNPUTmice/Conversations/pulls/533 , but it is not yet in the master branch.
Beagle
Beagle is an XMPP client for MacOS, which has voice and video calls capability. Recommend it to your scientific adviser which uses an Apple computer.
If everything works, including calls, you can try to setup calling and screen sharing on your Slackware laptop.
Dino
Dino is a desktop XMPP client, which we will be using in this HOWTO.
Rebuild Ibus
Ibus on Slackware 15.0 does not support gtk4 immodules, so cannot help you input emoji and CJK characters into Dino.
Rebuild it with
--enable-gtk4
from the official SlackBuild
http://slackware.uk/slackware/slackware64-15.0/source/x/ibus/
gstreamer-vaapi
gstreamer-vaapi is on SBo. Dino can work without it, but I found the experience to be too slow and unstable.
You really need to have video acceleration for smooth video conversations.
Check that your system support both accelerated vp8 decoding and encoding. (You might try vp9 insted.)
gst-inspect-1.0 vaapi
The code above should print something like vaapivp8enc _and_ vaapivp8dec.
Check that it works without Dino, using bare gstreamer:
gst-launch-1.0 videotestsrc ! vaapivp8enc tune=low-power ! vaapivp8dec ! \ fakesink
This should work.
Dino
Dino is available on SBo, you can install it with sbopkg or sboinstall.
Pay attention to whether or not you need to pass VP9=yes.
(If your GPU supports it.)
Now you should try and call someone over Dino, use the “video call” button in the upper right.
Pipewire
Dino works better with pipewire.
Use pipewire-enable.sh to enable pipewire.
This will simultaneously disable pulseaudio, but you might have to edit your GUI session manager (be it KDE, XFCE, or something else) configuration to not start as well.
Reboot.
After reboot you should see three pipewire-related daemons in the output of pgrep -lwf pipewire, and pgrep -lf pulse should only print pipewire-pulse.
v4l2loopback
Dino already allows you to choose a video camera you want to grab your video from, but so far we only have a single video camera.
But do not despair, we have a v4l2loopback module on SBo.
For the reasons explained below, we need version 0.13.2, and not the one available on SBo, but replacing one should be easy, just download the correct tarball and run the SlackBuild with VERSION=0.13.2.
After you have installed it, make it start in rc.local or a similar script.
/sbin/modprobe v4l2loopback exclusive_caps=1 card_label='OBS Virtual Camera'
Either reboot your computer, or restart the pipewire daemons, to have pipewire pick up the new device, which should be called something like /dev/video2 (since /dev/video{0,1} should be your real camera).
OBS
Now we have the virtual camera module, but nothing writes into it yet.
Install OBS Studio from SBo, and configure a single source: screencasting. On X11 you can use X11shm, on Wayland, I do not know.
Then click “Start Virtual Camera”, and hopefully it will work, making the virtual camera mirror your desktop. (You probably can choose a separate window instead.)
Final tests
Try calling someone with Dino, and at the bottom of the call screen, near the “video camera” button, there should be a small triangle, which should allow you to choose the 'OBS Virtual Camera' video source.
Now you can have video calls with your supervisor using only self-hosted open source software.
Sources
- * Originally written by Lockywolf
- * Prosody and TURN: https://prosody.im/doc
- * Acme.sh: https://wiki.archlinux.org/title/Acme.sh