Skip to content

Frequently Asked Questions

Victor Bayas edited this page Apr 12, 2024 · 11 revisions

Frequently Asked Questions (FAQ)

How is this different from optimus-manager?

EnvyControl is a much lighter tool designed with simplicity in mind, it doesn't requires extensive config files or having a daemon running 24/7 on your system as well as having to install a patched version of GDM if you're a Gnome user. EnvyControl is also compatible with most Linux distributions (including Arch Linux, Debian, Ubuntu and its derivatives).

Feel free to use the tool of your choice.

Graphics modes explained

The current state of Nvidia Optimus laptops on Linux is sad, each mode comes with a downside so you may find yourself switching modes quite often.

integrated

This mode will power off the Nvidia GPU by blacklisting the Nvidia and nouveau drivers, as well as removing the card from the PCI bus using Udev rules.

Since the dGPU is turned off your battery may last longer than on Windows, also you will be able to use Wayland and enjoy Linux without having to worry about overheating. The downside is that you can't use any external screen because on most laptops the HDMI ports are wired to the dGPU.

nvidia

This mode will render both internal and external screens using the Nvidia GPU, it requires the propietary Nvidia drivers to be installed and currently it's only compatible with Intel + Nvidia systems.

It works by creating a X.org config file with the Intel iGPU attached to an inactive screen forcing the system to render all screens with the Nvidia dGPU. It will also enable modesetting for the Nvidia driver which is required for PRIME synchronzation.

The downsides are that you can't use Wayland, your battery will drain in a couple of minutes, the laptop will overheat even if doing nothing and the fans will go brrrrr.

This is the recommended mode for working with external screens, if tearing appears on external screens please use nvidia-force-comp-pipeline .

hybrid

This is the default behavior for both Nvidia and nouveau drivers, the dGPU can be accesed on-demand with DRI_PRIME=1 <command> for nouveau or __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia <command> for the propietary driver.

The propietary driver implements dynamic power management (like Windows) only on Turing and newer cards paired with Intel 8th gen or newer processors. Read the official documentation to enable it if you're eligible.

The downsides are poor battery life on cards that don't support dynamic power management (like mine), external screens are laggy due to a broken reverse PRIME implementation on X.org and Wayland crashes if an external screen is connected (tested on Gnome).

Well, nouveau supports external screens on Wayland but it's laggy and prone to make your system crash.

Should I buy Nvidia hardware?

See this video 👇

Linus Torvalds to Nvidia

Tested distros

  • Arch Linux (GNOME, MATE, Plasma, Xfce)
  • Debian 11, 12 (GNOME, Plasma, Xfce)
  • ElementaryOS 6.x,7.x (Pantheon)
  • EndeavourOS (GNOME, Plasma, Xfce)
  • Fedora 40 (GNOME, Plasma, Xfce)
  • Linux Mint 20, 21, 22 (Cinnamon, Xfce)
  • Manjaro (GNOME, Plasma, MATE, Xfce)
  • MX Linux 21 (Plasma, Xfce)
  • Regolith 2.x (i3wm)
  • Ubuntu 20.04,22.04, 24.04 (GNOME, Plasma, XFCE, MATE)
  • Void Linux (bspwm, dwm)

Feel free to report me if EnvyControl works on other distros in order to update this list.

Instructions for Ubuntu and its derivatives

Ubuntu bundles its own tool for managing Nvidia Optimus graphics, before using EnvyControl please run sudo prime-select on-demand followed by sudo systemctl mask gpu-manager.service to prevent gpu-manager from interfering.

Supported Display Managers

  • GDM
  • SDDM
  • LightDM

What to do if my display manager is not supported?

This step is only required for nvidia mode, you need to setup your display to manager to execute a script with the following content:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

Known workarounds

Display runs at 1FPS when lid is closed on hybrid mode

Try disabling DRI3 and falling back to DRI2 as stated here.

  • Add LIBGL_DRI3_DISABLE=true to /etc/environment and reboot.