OBS on Linux

It should be straight forward. You install OBS and the use it, right?

Maybe. But that’s not how it went for me.

Since it’s the third time I forgot how to install the OBS plugins manually, I’m writing a post as a future personal reference and maybe to help someone.

Repository Package vs. Flatpak#

I used the Flatpak version for many months, but recently I started using the repository package version because I had few problem with the Flatpak one.

  1. If I modify my systemd-boot options and use the vfio driver for my NVIDIA card at boot and then load the nvidia one, OBS Flatpak can’t use the NVIDIA encoder. It can see the NVIDIA card, it lets me select it as encoder, but if I try to record a video, it raises an error about not being able to find NVIDIA drivers.

This sometimes forced me to record videos with the integrated graphics card. It is a good one and works fine, but I can feel that it’s stressed by OBS and it gets hotter than usual. Offloading the work to the RTX makes the whole system run cooler.

  1. You have to download your NVIDIA driver twice, once from the main repository and once for the flatpak apps, and you need their versions synchronized. If they are not, you cannot use the NVIDIA encoder in OBS Flatpak.

Aside from these problems, the flatpak version of OBS acts pretty much like the normal one.

All the files of the Flatpak version usually resides in the ~/.var/app/com.obsproject.Studio directory.

😅😅😅 Now that I wrote the whole blog post and wanted to record some videos for it, it seems that problem #1 disappeared. AFTER MONTHS,it disappeared just now… 🐒

Installing plugins manually#

Binary version#

Many plugins are not available on the package repository or the AUR and you need to install them manually.

All the people and posts online (even the Arch wiki) tells you that you need to copy the plugin’s file in the ~/.config/obs folder using a particular directory structure.

That didn’t work for me. I had to put the plugin file directly in the OBS system folders.

If you want to manually install a plugin, you need to put their files in these two folders:

  • /usr/lib/obs-plugins/ for the plugin’s library files
  • /usr/share/obs/obs-plugins/<plugin-name>/ for the plugin’s data files

Example

Let’s use the tuna plugin as an example. It shows on OBS the music you are listening to.

You can usually build the plugin yourself, but I usually extract the .deb version.

If you download the .deb file and extract it, you get some files:

.
├── control.tar.gz
├── data.tar.gz
└── debian-binary

Extract the data.tar.gz archive and find the plugin’s library and data/config files. This is what you get for the tuna plugin:

usr/
├── lib
│   └── x86_64-linux-gnu
│       └── obs-plugins
│           └── tuna.so
└── share
    └── obs
        └── obs-plugins
            └── tuna
                ├── locale
                │   ├── da-DK.ini
                │   ├── de-DE.ini
                │   ├── en-US.ini
                │   ├── es-ES.ini
                │   ├── fr-FR.ini
                │   ├── pt-BR.ini
                │   ├── ru-RU.ini
                │   ├── zh-CN.ini
                │   └── zh-TW.ini
                ├── placeholder.png
                └── widget.html

Copy the file tuna.so in /usr/lib/obs-plugins/ and the tuna folder in /usr/share/obs/obs-plugins/.

Now the plugin should appear in the ‘Tools’ section of the menu.

Do the same process for each plugin you want. I tried this method with other plugins and they seems to work.

Flatpak Version#

They shoud be placed in the Flatpak app folder (~/.var/app/com.obsproject.Studio) as described here on the Arch Wiki (The method that didn’t work for the binary version 😑).

~/.var/app/com.obsproject.Studio $ tree config/obs-studio/plugins/  

config/obs-studio/plugins/  
├── tuna  
│   ├── bin  
│   │   └── 64bit  
│   │       └── tuna.so  
│   └── data  
│       ├── locale  
│       │   ├── da-DK.ini  
│       │   ├── de-DE.ini  
│       │   ├── en-US.ini  
│       │   ├── es-ES.ini  
│       │   ├── fr-FR.ini  
│       │   ├── pt-BR.ini  
│       │   ├── ru-RU.ini  
│       │   ├── zh-CN.ini  
│       │   └── zh-TW.ini  
│       ├── lyrics.txt  
│       ├── song_album.txt  
│       ├── song_artist.txt  
│       ├── song_date.txt  
│       ├── song_info.txt  
│       ├── song_title.txt  
│       └── widget.html  
└── waveform  
   ├── bin  
   │   └── 64bit  
   │       └── waveform.so  
   └── data  
       ├── gradient.effect  
       └── locale  
           ├── en-US.ini  
           └── zh-CN.ini  
  
11 directories, 21 files

Virtual Camera#

Since I’m using Wayland as a compositor, sometimes I have problems sharing the screen with some applications like Teams.

Shitty apps like Teams shouldn’t be used at all, but they seems to be required everywhere. It seems impossible to run away from it, I’m sure you had a similar experience.

The solution for this problem is OBS Virtual Camera. It allows you to make OBS act as a webcam.

The ‘Virtual Camera’ button appeared on OBS after installing v4l2loopback-dkms and v4l2loopback-utils and loading the relative kernel module.