In this article you will learn how to use Netflix (also other streaming services that require Widevine DRM) and Signal/Telegram on FreeBSD desktop.
You may want to check other articles in the FreeBSD Desktop series on the FreeBSD Desktop – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.
The Table of Contents for the article:
While Netflix serves their content using FreeBSD servers the Netflix streaming service itself is not available on the FreeBSD platform because Widevine DRM does not support browsers on FreeBSD system.
We will use one of the more known FreeBSD features – the Linux Compatibility Layer. When FreeBSD 13.0-RELEASE was introduced the LINUX_COMPAT support was greatly improved. To the point where you can swap the default CentOS 7 based layer into the newer and more suited for desktop – the Ubuntu based layer.
Thank to author of NomadBSD system – mrclksr – we can now install needed Chrome/Brave/Vivaldi browser with automatic install and setup of that Ubuntu layer under /compat/ubuntu path. Its available on the GitHub https://github.com/mrclksr/linux-browser-installer page. First we will clone this repository with git(1) command.
# pkg install git-lite # exit % git clone email@example.com:mrclksr/linux-browser-installer.git Cloning into 'linux-browser-installer'... remote: Enumerating objects: 158, done. remote: Counting objects: 100% (158/158), done. remote: Compressing objects: 100% (95/95), done. remote: Total 158 (delta 91), reused 114 (delta 54), pack-reused 0 Receiving objects: 100% (158/158), 25.59 KiB | 323.00 KiB/s, done. Resolving deltas: 100% (91/91), done.
Some notes before starting it. You need to choose which LINUX_COMPAT are you using on FreeBSD. You can not use both the default CentOS based layer under /compat/linux and another one with Ubuntu based layer under /compat/ubuntu for example. To use the Ubuntu based layer the script will set the compat.linux.emul_path variable to /compat/ubuntu dir. Also under the /etc/rc.conf variable linux_enable=YES will be replaced by ubuntu_enable=YES one.
Lets run it then.
From available browsers I have chosen to install and run Chrome.
It will take about 10-15 minutes to download and setup all needed packages.
% cd linux-browser-installer % ls -l total 24K drwxr-xr-x 2 vermaden vermaden 5 2021-08-06 22:06 bin/ drwxr-xr-x 3 vermaden vermaden 3 2021-08-06 22:06 chroot/ drwxr-xr-x 2 vermaden vermaden 3 2021-08-06 22:06 rc.d/ -rw-r--r-- 1 vermaden vermaden 350 2021-08-06 22:06 linux-brave.desktop -rwxr-xr-x 1 vermaden vermaden 9363 2021-08-06 22:06 linux-browser-installer -rw-r--r-- 1 vermaden vermaden 362 2021-08-06 22:06 linux-chrome.desktop -rw-r--r-- 1 vermaden vermaden 348 2021-08-06 22:06 linux-vivaldi.desktop -rw-r--r-- 1 vermaden vermaden 3200 2021-08-06 22:06 README.md % ./linux-browser-installer install chrome
Now reboot(8) please. After you started your system you should be able to start Linux version of Chrome.
This command below is started from the host system – not from within the Ubuntu compat layer at the /compat/ubuntu path.
Sometimes applications in that Ubuntu compat layer yield about no knowing you hostname. I usually add that hostname as 127.0.0.1 alias as shown below.
% doas chroot /compat/ubuntu bash root@w520:/# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters root@w520:/# vi /etc/hosts root@w520:/# cat /etc/hosts 127.0.0.1 localhost w520.local ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Now Netflix will just work. Just go to the Netflix page, login and start some movie.
Signal – the trusted and encrypted communicator – provides a dedicated Debian/Ubuntu repository for installation … but not for FreeBSD systems.
As the Signal packages are dedicated for Ubuntu systems we will use out just created Ubuntu compat layer from the previous step and will use it to install and setup Signal on FreeBSD.
On the https://www.signal.org/download/linux/ page you will find official Signal install instructions.
I will paste them here so you will not have to go to another page just to copy them.
wget -O- https://updates.signal.org/desktop/apt/keys.asc \ | gpg --dearmor > signal-desktop-keyring.gpg cat signal-desktop-keyring.gpg \ | sudo tee -a /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' \ | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list sudo apt update \ && sudo apt install signal-desktop
The installation of that signal-desktop package will take quite some space – more then 820 MB – but with ZFS compression enabled it should be only half of that 🙂
You may encounter this problem just after the signal-desktop installation.
(...) Errors were encountered while processing: libfprint-2-2:amd64 fprintd libpam-fprintd:amd64 (...)
The solution is quite simple – remove these packages shown below.
root@w520:/# apt remove libpam-fprintd:amd64 libfprint-2-2:amd64 root@w520:/# apt autoremove root@w520:/# apt install signal-desktop
On the contrary to the Chrome the Signal is located within the Ubuntu compat layer /compat/ubuntu path.
To make it work it needs to be started with the --no-sandbox argument – like that.
% /compat/ubuntu/opt/Signal/signal-desktop --no-sandbox
To make it work you still need to have Signal installed and configured on your phone and also add that Signal Desktop application as Linked Device to make it work. I was able to set it up without any problems. Below you will find configured and working Signal Desktop on FreeBSD.
Telegram – the other secure messenger – is available in the FreeBSD Ports tree and packages.
This means you do not have to make any additional steps and you can just install and run it.
# pkg install telegram-desktop # exit % telegram-desktop
Here is Telegram Desktop working flawlessly under FreeBSD.
This section summarized this article – hope that it will help some of you to expand you FreeBSD system possibilities.