GUI for monitoring and toggling NVIDIA GPU power on Optimus laptops.
Provides a user-friendly interface for managing power state and monitoring utilization of dedicated graphics adapter.
Useful for pre-Turing GPU generations without dynamic power management features, allows to fully benefit from NVIDIA PRIME Render Offload technology without need to keep graphics adapter turned on all the time.
For Turing generation cards with Intel Coffee Lake or above CPUs as well as some Ryzen CPUs like the 5800H, it is possible to fully power down the GPU when not in use automatically without user interaction: see NVIDIA documentation.
Uses bbswitchd daemon
to switch video adapter power state (ON or OFF) and NVML to monitor GPU parameters.
The most straightforward way to install is to use prebuilt packages from copr for Fedora or PPA for Ubuntu.
For Fedora:
$ sudo dnf copr enable polter/bumblebee
$ sudo dnf install bbswitch-guiFor Ubuntu:
$ sudo add-apt-repository ppa:polter-rnd/bbswitch-gui
$ sudo apt update
$ sudo apt install bbswitch-guiAfter package installation please check that your user have been added to bbswitchd
group using groups command, and then re-login or reboot the machine to apply it.
That simple.
Check if you have PyGObject module installed (usually available in you Linux ditribution),
pynvml module for gathering GPU information, fuser utility to find processes using video card
and GTK+ library for GUI (development package is not needed).
For Fedora:
$ sudo dnf install gtk3 python3-gobject python3-py3nvml hwdata psmiscFor Ubuntu:
$ sudo apt-get install libgtk-3-0 python3-gi python3-pynvml hwdata psmiscTo be able to manage dedicated GPU power state, you also need to install bbswitchd daemon.
Refer to Installation paragraph
of bbswitchd manual.
You can build and install a wheel or egg package using pip.
Example of per-user installation:
$ python3 -m pip install --user .And system-wide:
$ sudo python3 -m pip install .After that bbswitch-gui command will appear in your PATH.
Desktop files are not created when installing by pip.
First you need to install meson build system:
For Fedora:
$ sudo dnf install mesonFor Ubuntu:
$ sudo apt-get install python3-distutils mesonThen build and install the project (specify --prefix argument
if you need to unstall somewhere not in /usr/local):
$ meson build # --prefix=/usrTo install the package on your system:
$ sudo meson install -C buildAfter that bbswitch-gui command will appear in your PATH
and bbswitch-gui.desktop will appear in menu.
Run bbswitch-gui command or select BBswitch GUI app from menu, the window will appear:
You can turn dedicated graphics card on and off using switch control in the top left corner, after that GPU monitoring panel will appear:
Also a nice tray icon will appear allowing you to switch the power state even without launching the window:
If you have switchroo-control installed, after GPU has been enabled you should be able to launch any application on dedicated graphics card by right-click in GNOME shell:
To launch from console you need to setup environment variables, e.g.:
$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgearsTo use PRIME offload for Vulkan applications:
$ __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only vkmark
Then you will see a list of applications using the dedicated GPU:
You won't be able to turn GPU off while some application still uses it. To force killing them you can check desired processes and click Kill selected processes button.
To make bbswitch-gui auto-start minimized to tray, one can create a file
~/.config/autostart/io.github.polter-rnd.bbswitch-gui.desktop with the following
content (-m option means run minimized):
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=BBswitch GUI
Comment=GUI tool for managing NVIDIA GPU power states and utilization
Exec=/usr/bin/bbswitch-gui -v -m
Icon=bbswitch-gui
Categories=System;Monitor;Utility;X-GNOME-Utilities;
Keywords=nvidia;bbswitch;optimus;prime;
X-AppInstall-Keywords=nvidia;bbswitch;optimus;prime;
X-GNOME-Keywords=nvidia;bbswitch;optimus;prime;
X-GNOME-UsesNotifications=trueAfter logout from GNOME shell with enabled NVIDIA GPU, on next login it will detect it and take in use, thus making it impossible to turn dedicated GPU off.
Workaround is to hide NVIDIA GPU from gnome-shell process while keeping it available
for all other processes. It can be solved by creating a fake directory on startup for
EGL library configurations which is normally in /usr/share/glvnd/egl_vendor.d:
$ ls /usr/share/glvnd/egl_vendor.d/
10_nvidia.json 50_mesa.jsonThen override configuration of [email protected] user-owned systemd unit:
$ systemctl --user edit [email protected]
[Service]
ExecStartPre=/usr/bin/mkdir -p /tmp/egl_vendor.d
ExecStartPre=/usr/bin/rm -f /tmp/egl_vendor.d/10_nvidia.json
ExecStartPre=/usr/bin/ln -fs /usr/share/glvnd/egl_vendor.d/50_mesa.json /tmp/egl_vendor.d
Environment=__EGL_VENDOR_LIBRARY_DIRS=/tmp/egl_vendor.d
ExecStartPost=/usr/bin/ln -fs /usr/share/glvnd/egl_vendor.d/10_nvidia.json /tmp/egl_vendor.dOn each gnome-shell startup it will see only 50_mesa.json configuration
and only then 10_nvidia.json will appear therefore making it availabe for all other processes.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
This software is distributed under GNU GPL v3. See LICENSE file for more information.





