Graphics-capable nvidia proprietary drivers with *minimal* dependencies?

What is with the insane list of dependencies for the proprietary nvidia drivers?

I have been trying to get GUI LXC containers to work, but that is another story. It's mainly relevant because it is the reason why I want the drivers to be able to drive a display, but not bring all the trappings of a desktop.

In the process of trying different driver versions/sources, I noticed that Gnome kept getting installed. Indeed, even the server version of the nvidia drivers pulls in a crazy list of dependencies. Do I really need all this crap? How do I figure out what crap I really do need? Does this come from Nvidia or the Universe repo maintainers?

sudo apt install --dry-run nvidia-driver-470-server | less

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  acl adwaita-icon-theme apg aptdaemon aptdaemon-data aspell aspell-en
  at-spi2-core avahi-daemon avahi-utils bluez bolt bubblewrap build-essential
  cheese-common colord colord-data cpp cpp-9 cracklib-runtime cups-pk-helper
  dbus-user-session dbus-x11 dconf-cli dconf-gsettings-backend dconf-service
  dctrl-tools desktop-file-utils dictionaries-common dirmngr dkms
  dns-root-data dnsmasq-base docbook-xml dpkg-dev emacsen-common enchant-2
  evolution-data-server evolution-data-server-common fakeroot fontconfig
  fprintd g++ g++-9 gcc gcc-9 gcc-9-base gcr gdm3 geoclue-2.0
  gir1.2-accountsservice-1.0 gir1.2-atk-1.0 gir1.2-atspi-2.0
  gir1.2-freedesktop gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdesktopenums-3.0
  gir1.2-gdkpixbuf-2.0 gir1.2-gdm-1.0 gir1.2-geoclue-2.0
  gir1.2-gnomebluetooth-1.0 gir1.2-gnomedesktop-3.0 gir1.2-graphene-1.0
  gir1.2-gtk-3.0 gir1.2-gweather-3.0 gir1.2-ibus-1.0 gir1.2-json-1.0
  gir1.2-mutter-6 gir1.2-nm-1.0 gir1.2-nma-1.0 gir1.2-notify-0.7
  gir1.2-packagekitglib-1.0 gir1.2-pango-1.0 gir1.2-polkit-1.0 gir1.2-rsvg-2.0
  gir1.2-secret-1 gir1.2-soup-2.4 gir1.2-upowerglib-1.0 gir1.2-vte-2.91 gjs
  gkbd-capplet glib-networking glib-networking-common glib-networking-services
  gnome-control-center gnome-control-center-data gnome-control-center-faces
  gnome-desktop3-data gnome-keyring gnome-keyring-pkcs11 gnome-menus
  gnome-online-accounts gnome-session-bin gnome-session-common
  gnome-settings-daemon gnome-settings-daemon-common gnome-shell
  gnome-shell-common gnome-startup-applications gnome-user-docs gnupg
  gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf
  gpgsm gsettings-desktop-schemas gstreamer1.0-clutter-3.0 gstreamer1.0-gl
  gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-pulseaudio
  gstreamer1.0-x gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme
  hunspell-en-us ibus ibus-data ibus-gtk ibus-gtk3 iio-sensor-proxy im-config
  ippusbxd language-selector-gnome libaa1 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libappindicator3-1
  libappstream4 libarchive13 libasan5 libasound2-plugins libaspell15
  libassuan0 libasyncns0 libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data
  libatomic1 libatspi2.0-0 libavahi-client3 libavahi-common-data
  libavahi-common3 libavahi-core7 libavahi-glib1 libavc1394-0 libbluetooth3
  libboost-thread1.71.0 libc-dev-bin libc6-dev libcaca0 libcairo-gobject2
  libcamel-1.2-62 libcanberra-gtk3-0 libcanberra-gtk3-module libcanberra-pulse
  libcc1-0 libcdparanoia0 libcheese-gtk25 libcheese8 libclutter-1.0-0
  libclutter-1.0-common libclutter-gst-3.0-0 libclutter-gtk-1.0-0
  libcogl-common libcogl-pango20 libcogl-path20 libcogl20 libcolord-gtk1
  libcolord2 libcolorhug2 libcrack2 libcrypt-dev libcups2 libcurl3-gnutls
  libdaemon0 libdatrie1 libdbusmenu-glib4 libdbusmenu-gtk3-4 libdconf1
  libdpkg-perl libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1
  libdv4 libebackend-1.2-10 libebook-1.2-20 libebook-contacts-1.2-3
  libecal-2.0-1 libedata-book-1.2-26 libedata-cal-2.0-1 libedataserver-1.2-24
  libedataserverui-1.2-2 libegl-mesa0 libegl1 libenchant-2-2 libepoxy0
  libexif12 libfakeroot libfile-fcntllock-perl libflac8 libfontenc1
  libfprint-2-2 libgail-common libgail18 libgbm1 libgcc-9-dev libgck-1-0
  libgcr-base-3-1 libgcr-ui-3-1 libgd3 libgdata-common libgdata22
  libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgdm1
  libgee-0.8-2 libgeoclue-2-0 libgeocode-glib0 libgjs0g libgl1 libgl1-mesa-dri
  libglapi-mesa libgles2 libglib2.0-bin libglvnd0 libglx-mesa0 libglx0
  libgnome-autoar-0-0 libgnome-bluetooth13 libgnome-desktop-3-19
  libgnomekbd-common libgnomekbd8 libgoa-1.0-0b libgoa-1.0-common
  libgoa-backend-1.0-1 libgomp1 libgphoto2-6 libgphoto2-l10n libgphoto2-port12
  libgraphene-1.0-0 libgraphite2-3 libgsound0 libgssdp-1.2-0
  libgstreamer-gl1.0-0 libgstreamer-plugins-base1.0-0
  libgstreamer-plugins-good1.0-0 libgstreamer1.0-0 libgtk-3-0 libgtk-3-bin
  libgtk-3-common libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgtop-2.0-11
  libgtop2-common libgupnp-1.2-0 libgupnp-av-1.0-2 libgupnp-dlna-2.0-3
  libgusb2 libgweather-3-16 libgweather-common libharfbuzz-icu0 libharfbuzz0b
  libhunspell-1.7-0 libhyphen0 libibus-1.0-5 libical3 libice6 libidn11
  libiec61883-0 libieee1284-3 libinput-bin libinput10 libisl22 libitm1
  libjack-jackd2-0 libjansson4 libjavascriptcoregtk-4.0-18 libjbig0
  libjpeg-turbo8 libjpeg8 libjson-glib-1.0-0 libjson-glib-1.0-common libksba8
  liblcms2-2 libldb2 libllvm12 liblsan0 libmbim-glib4 libmbim-proxy
  libmediaart-2.0-0 libmm-glib0 libmozjs-68-0 libmp3lame0 libmpc3 libmpfr6
  libmpg123-0 libmtdev1 libmutter-6-0 libmysqlclient21 libndp0
  libnl-route-3-200 libnm0 libnma0 libnotify4 libnpth0 libnspr4 libnss-mdns
  libnss3 libnvidia-cfg1-470-server libnvidia-common-470-server
  libnvidia-compute-470-server libnvidia-decode-470-server
  libnvidia-encode-470-server libnvidia-extra-470-server
  libnvidia-fbc1-470-server libnvidia-gl-470-server libnvidia-ifr1-470-server
  libopenjp2-7 libopus0 liborc-0.4-0 libpackagekit-glib2-18 libpam-fprintd
  libpam-gnome-keyring libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0
  libpangoxft-1.0-0 libpcsclite1 libphonenumber7 libprotobuf17 libproxy1v5
  libpulse-mainloop-glib0 libpulse0 libpulsedsp libpwquality-common
  libpwquality1 libqmi-glib5 libqmi-proxy libquadmath0 libraw1394-11
  librest-0.7-0 librsvg2-2 librsvg2-common librygel-core-2.6-2
  librygel-db-2.6-2 librygel-renderer-2.6-2 librygel-server-2.6-2
  libsamplerate0 libsane libsane-common libsbc1 libsecret-1-0 libsecret-common
  libshout3 libsm6 libsmbclient libsnapd-glib1 libsndfile1 libsnmp-base
  libsnmp35 libsoup-gnome2.4-1 libsoup2.4-1 libsoxr0 libspeex1 libspeexdsp1
  libstartup-notification0 libstdc++-9-dev libstemmer0d libtag1v5
  libtag1v5-vanilla libtalloc2 libteamdctl0 libtevent0 libthai-data libthai0
  libtheora0 libtiff5 libtsan0 libtwolame0 libubsan1 libudisks2-0 libv4l-0
  libv4lconvert0 libvdpau1 libvisual-0.4-0 libvorbisenc2 libvpx6 libvte-2.91-0
 libvte-2.91-common libvulkan1 libwacom-bin libwacom-common libwacom2
  libwavpack1 libwayland-client0 libwayland-cursor0 libwayland-egl1
  libwayland-server0 libwbclient0 libwebkit2gtk-4.0-37 libwebp6 libwebpdemux2
  libwebrtc-audio-processing1 libwhoopsie-preferences0 libwhoopsie0 libwoff1
  libx11-xcb1 libxatracker2 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0
  libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-present0 libxcb-randr0
  libxcb-render-util0 libxcb-res0 libxcb-shape0 libxcb-sync1 libxcb-util1
  libxcb-xfixes0 libxcb-xkb1 libxcb-xv0 libxcomposite1 libxcursor1 libxdamage1
  libxfixes3 libxfont2 libxft2 libxi6 libxinerama1 libxkbcommon-x11-0
  libxkbcommon0 libxkbfile1 libxklavier16 libxmu6 libxpm4 libxrandr2
  libxshmfence1 libxslt1.1 libxss1 libxt6 libxtst6 libxv1 libxvmc1 libxxf86vm1
  libyelp0 linux-libc-dev manpages-dev mesa-vdpau-drivers mesa-vulkan-drivers
  mobile-broadband-provider-info modemmanager mousetweaks mutter mutter-common
  mysql-common network-manager network-manager-gnome network-manager-pptp
  nvidia-compute-utils-470-server nvidia-dkms-470-server
  nvidia-kernel-common-470-server nvidia-kernel-source-470-server nvidia-prime
  nvidia-settings nvidia-utils-470-server p11-kit p11-kit-modules packagekit
  packagekit-tools patch pinentry-curses pinentry-gnome3 pkg-config ppp
  pptp-linux pulseaudio pulseaudio-module-bluetooth pulseaudio-utils
  python3-aptdaemon python3-aptdaemon.gtk3widgets python3-cairo python3-cups
  python3-cupshelpers python3-defer python3-ibus-1.0 python3-ldb
  python3-macaroonbakery python3-protobuf python3-rfc3339 python3-talloc
  python3-tz python3-xkit rtkit rygel samba-libs sane-utils
  screen-resolution-extra session-migration sgml-base sgml-data
  switcheroo-control system-config-printer system-config-printer-common
  system-config-printer-udev ubuntu-docs ubuntu-mono ubuntu-session
  ubuntu-wallpapers ubuntu-wallpapers-focal unzip update-inetd usb-modeswitch
  usb-modeswitch-data vdpau-driver-all wamerican whoopsie-preferences
  wpasupplicant x11-common x11-xkb-utils x11-xserver-utils xdg-dbus-proxy
  xfonts-base xfonts-encodings xfonts-utils xml-core xserver-common
  xserver-xephyr xserver-xorg xserver-xorg-core xserver-xorg-input-all
  xserver-xorg-input-libinput xserver-xorg-input-wacom xserver-xorg-legacy
  xserver-xorg-video-all xserver-xorg-video-amdgpu xserver-xorg-video-ati
  xserver-xorg-video-fbdev xserver-xorg-video-intel xserver-xorg-video-nouveau
  xserver-xorg-video-nvidia-470-server xserver-xorg-video-qxl
  xserver-xorg-video-radeon xserver-xorg-video-vesa xserver-xorg-video-vmware
  xwayland yaru-theme-gnome-shell yelp yelp-xsl zenity zenity-common

When I installed from the .run file downloaded from the Nvidia website, I also ended up with bits of Gnome.

I see that a different package nvidia-headless-470-server has a much more reasonable list of dependencies, but I do need it to be graphics-capable as it will be driving GUI apps. But preferably using X without a window manager.


Solution 1:

My guess is the nvidia-settings dependency is requiring most of the others. "nvidia-settings" is a GUI and is only a recommended dependency. Your package installer may have a way to ignore "recommended" and "suggested" dependencies. You can also ignore them when installing packages from the command line by using the correct options.