In my quest to perfect my “road warrior” setup, I have been experimenting with coding in VR. I have been using the Immersed VR app on my Quest 3 headset to create a virtual workspace. Unfortunately, the official Immersed documentation is not very clear on how to get Immersed VR setup on Ubuntu. Here are the steps I took to get it working. I would like to credit this blog post by Alexandre Souza for pointing me in the right direction, my contribution is porting the steps to Ubuntu Linux.

Steps:

sudo apt install v4l2loopback-dkms v4l2loopback-utils
  • Create a file to start the v4l2loopback service at boot:
sudo vim /etc/systemd/system/v4l2loopback.service

Here are the settings I used for the service file, based on the aforementioned blog post. The device is set to /dev/video9 to avoid conflicts with other devices.

[Unit]
Description=v4l2loopback

[Service]
ExecStart=/bin/modprobe v4l2loopback video_nr=9 card_label="ImmersedVR" exclusive_caps=1
ExecStop=/bin/rmmod v4l2loopback
Type=simple
RemainAfterExit=yes

[Install]
WantedBy=default.target
  • Enable the service:
sudo systemctl enable v4l2loopback
  • Start the service:
sudo systemctl start v4l2loopback
  • Update the ~/.ImmersedConf file to use the new device:
# before:
# "CameraDevice": "/dev/video0"
# after:
"CameraDevice": "/dev/video9"
  • Run the ImmersedVR AppImage:
chmod +x Immersed-x86_64.AppImage
./Immersed-x86_64.AppImage

On my machine, the app will display a “Virtual camera device is not found at /dev/video0” error, even though we set the config file to use /dev/video9. I just click “OK” and the app correctly uses the /dev/video9 device.

Another tip is that you can create virtual monitors, even if you don’t have a physical monitor connected. This is natively supported by the Immersed app on Windows/Mac, but for Linux you need to use a tool like xrandr to create a virtual monitor. This blog post by Craig Wardman explains how to do it.