Issue
In nvidia-smi’s output, I do see the GPU externally connected via Thunderbolt in an eGPU. But never see the GPU ID of it in it’s processes section. Based on this output I conclude the eGPU is not utilized, unless I’m mistaken.
Env
- Lenovo Thinkpad p16s
- RTX 4060 Ti dual 16GB vram
- Sonnet eGPU Breakaway Box 650W, Thunderbolt 4 (not 3) cable.
- Ubuntu 24.04, nvidia-driver-580-open
Note
On the same computer and the same GPU and the eGPU, GPU was utilized, before the OS Ubuntu 22.04 (w/nvidia-driver-535) crashed (for a cause likely unrelated to GPU). Since then, I freshly installed Ubuntu 22.04/24.04/25.04, tried various different versions of nvidia-driver pkgs,- but have never been able to utilize the GPU again.
More data
nvidia’s bug-report tool output attached:
nvidia-bug-report_20251105-1010_Ubuntu-24.04.log (4.7 MB)
$ prime-select query
on-demand
$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears &
Running synchronized to the vertical refresh. The framerate should be approximately the same as the monitor refresh rate.
320 frames in 5.0 seconds = 63.968 FPS
300 frames in 5.0 seconds = 59.999 FPS
$ echo "While running glxgears above" && nvidia-smi
Wed Nov 5 14:48:09 2025
±----------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
±----------------------------------------±-----------------------±-----------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+=========|
| 0 NVIDIA T550 Laptop GPU Off | 00000000:03:00.0 Off | N/A |
| N/A 54C P8 7W / 30W | 14MiB / 4096MiB | 4% Default |
| | | N/A |
±----------------------------------------±-----------------------±-----------+
| 1 NVIDIA GeForce RTX 4060 Ti Off | 00000000:52:00.0 Off | N/A |
| 0% 31C P8 7W / 165W | 2MiB / 16380MiB | 0% Default |
| | | N/A |
±----------------------------------------±-----------------------±-----------+
±----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|============================================================================|
| 0 N/A N/A 3354 G /usr/lib/xorg/Xorg 6MiB |
| 0 N/A N/A 36822 G glxgears 6MiB |
±----------------------------------------------------------------------------+
$ lspci | grep -i "nvidia"
03:00.0 3D controller: NVIDIA Corporation TU117GLM [T550 Laptop GPU] (rev a1)
52:00.0 VGA compatible controller: NVIDIA Corporation AD106 [GeForce RTX 4060 Ti 16GB] (rev a1)
52:00.1 Audio device: NVIDIA Corporation Device 22bd (rev a1)
$ boltctl list
● Sonnet Technologies, Inc. eGFX Breakaway Box 650 OC
├─ type: peripheral
├─ name: eGFX Breakaway Box 650 OC
├─ vendor: Sonnet Technologies, Inc.
├─ uuid: c1010000-0070-6518-2314-a01660b01022
├─ generation: Thunderbolt 3
├─ status: authorized
│ ├─ domain: 15338780-b10c-5ab1-ffff-ffffffffffff
│ ├─ rx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ ├─ tx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ └─ authflags: none
├─ authorized: Wed 05 Nov 2025 06:38:06 AM UTC
├─ connected: Wed 05 Nov 2025 06:36:37 AM UTC
└─ stored: Thu 30 Oct 2025 04:54:17 PM UTC
├─ policy: auto
└─ key: no
As you have multiple (2) Nvidia GPUs, if you don’t specify which one to use, one will picked randomly and it just happens that after your OS re-installation the built-in one is picked. Try specifying manually: for example run vkcube with --gpu_number option and see what happens then.
Thanks.
After many many more attempts, I’m finally having the external GPU utilized by the following:
Create a custom udev rule to disable the internal nvidia GPU (Create /etc/udev/rules.d/99-disable-internal-gpu.rules with the content (0000:03:00.0 is the internal one lspci returns)), then reboot the OS:
# Remove internal Nvidia GPU from the system on boot
ACTION==“add”, KERNEL==“0000:03:00.0”, SUBSYSTEM==“pci”, ATTR{remove}=“1”
This certainly disables the internal GPU (T550 in my case) but I’m desperately in need of the higher end model card that can only be connected externally (RTX 4060 Ti) to my laptop so this is fine to me (hence, making this post as a solution).
Confirming that the eGPU is utilized:
$ vkcube --gpu_number 1 &
Selected GPU 1: NVIDIA GeForce RTX 4060 Ti, type: DiscreteGpu
Tue Nov 18 16:30:13 2025
±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
±----------------------------------------±-----------------------±---------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti Off | 00000000:52:00.0 Off | N/A |
| 0% 29C P8 11W / 165W | 31MiB / 16380MiB | 11% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+
±----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|==============================================================|
| 0 N/A N/A 8655 C+G vkcube 8MiB |
±----------------------------------------------------------------------------------------+
I’m a bit confused: didn’t --gpu_number do the trick for some reason? Disabling the bult-in GPU totally in udev seems like an overkill comparing to just configuring individual apps to use the one you want… Not mentioning that if you boot your laptop without the eGPU things may break (unless you also have an Intel iGPU)
That’s an option for vkcube executable, isn’t it? And no, choosing the eGPU with that option ends up with the same error discussed in e.g. Vulkan under Wayland does not seem to work on dual GPU Laptop RTX 3050
Ah, I definitely overlooked that usecase.
In my laptop’s case there is indeed an Intel’s iGPU so I’m hoping things wouldn’t go super bad even if the OS reboots while eGPU is disconnected (the following is taken while nvidia T550, on board discrete GPU is disabled by the aforementioned customization), but that’s a good point.
$ lspci | grep -i 'vga\|3d\|2d'
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P GT2 [Iris Xe Graphics] (rev 0c)
52:00.0 VGA compatible controller: NVIDIA Corporation AD106 [GeForce RTX 4060 Ti 16GB] (rev a1)
Yes, but most modern programs have similar options.
you mean Could not find both graphics and present queues and crash? Could you please paste the exact output of vkcube --gpu_number ${vulkan-eGPU-device-number} (substitute the number) as well as the output of vulkaninfo --summary? Perhaps there’s some misconfiguration with this (usually wrong permission / group membership of some device files).
Also do you use X or Wayland?
UPDATE:
try running vkcube as root: sudo vkcube --gpu_number ${vulkan-eGPU-device-number}, if it helps, then it’s almost certainly a permission issue.
Thanks for digging!
Without mentioned customization that disables T550, the vkcube command above with RTX 4060 Ti
$ vkcube --gpu_number 1 &
Selected GPU 1: NVIDIA GeForce RTX 4060 Ti, type: DiscreteGpu
Could not find both graphics and present queues
vkcube command right now (T550 is disabled, OS recognizes only 1 nvidia card):
$ vkcube --gpu_number 0 &
Selected GPU 0: Intel(R) Iris(R) Xe Graphics (ADL GT2), type: IntegratedGpu
$ vkcube --gpu_number 1 &
Selected GPU 1: NVIDIA GeForce RTX 4060 Ti, type: DiscreteGpu
$ vkcube --gpu_number 2 &
Selected GPU 2: llvmpipe (LLVM 20.1.2, 256 bits), type: Cpu
$ vkcube --gpu_number 3 &
GPU 3 specified is not present, GPU count = 3
Specified GPU number is not present
Sure, I’ll get to it when I can.
vulkaninfo --summary output while T550 is disabled.
==========
VULKANINFO
==========
Vulkan Instance Version: 1.3.275
Instance Extensions: count = 24
-------------------------------
VK_EXT_acquire_drm_display : extension revision 1
VK_EXT_acquire_xlib_display : extension revision 1
VK_EXT_debug_report : extension revision 10
VK_EXT_debug_utils : extension revision 2
VK_EXT_direct_mode_display : extension revision 1
VK_EXT_display_surface_counter : extension revision 1
VK_EXT_headless_surface : extension revision 1
VK_EXT_surface_maintenance1 : extension revision 1
VK_EXT_swapchain_colorspace : extension revision 5
VK_KHR_device_group_creation : extension revision 1
VK_KHR_display : extension revision 23
VK_KHR_external_fence_capabilities : extension revision 1
VK_KHR_external_memory_capabilities : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2 : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2 : extension revision 1
VK_KHR_portability_enumeration : extension revision 1
VK_KHR_surface : extension revision 25
VK_KHR_surface_protected_capabilities : extension revision 1
VK_KHR_wayland_surface : extension revision 6
VK_KHR_xcb_surface : extension revision 6
VK_KHR_xlib_surface : extension revision 6
VK_LUNARG_direct_driver_loading : extension revision 1
Instance Layers: count = 5
--------------------------
VK_LAYER_INTEL_nullhw INTEL NULL HW 1.1.73 version 1
VK_LAYER_MESA_device_select Linux device selection layer 1.4.303 version 1
VK_LAYER_MESA_overlay Mesa Overlay layer 1.4.303 version 1
VK_LAYER_NV_optimus NVIDIA Optimus layer 1.4.312 version 1
VK_LAYER_NV_present NVIDIA GR2608 layer 1.4.312 version 1
Devices:
========
GPU0:
apiVersion = 1.4.305
driverVersion = 25.0.7
vendorID = 0x8086
deviceID = 0x46a6
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) Iris(R) Xe Graphics (ADL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 25.0.7-0ubuntu0.24.04.2
conformanceVersion = 1.4.0.0
deviceUUID = 8680a646-0c00-0000-0002-000000000000
driverUUID = 802b0057-40c2-aed9-e538-d78b797f04f4
GPU1:
apiVersion = 1.4.312
driverVersion = 580.95.5.0
vendorID = 0x10de
deviceID = 0x2805
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA GeForce RTX 4060 Ti
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 580.95.05
conformanceVersion = 1.4.1.3
deviceUUID = d0eb8f73-07f4-d19f-fa4c-7728059b355e
driverUUID = b92269a1-b525-5615-ab8a-e2095ee37192
GPU2:
apiVersion = 1.4.305
driverVersion = 0.0.1
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 20.1.2, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 25.0.7-0ubuntu0.24.04.2 (LLVM 20.1.2)
conformanceVersion = 1.3.1.1
deviceUUID = 6d657361-3235-2e30-2e37-2d3075627500
driverUUID = 6c6c766d-7069-7065-5555-494400000000
I meant with everything enabled, of course…
Now I disabled udev customization, so I see both nvidia GPU connected.
$ lspci | grep -i "nvidia"
03:00.0 3D controller: NVIDIA Corporation TU117GLM [T550 Laptop GPU] (rev a1)
52:00.0 VGA compatible controller: NVIDIA Corporation AD106 [GeForce RTX 4060 Ti 16GB] (rev a1)
52:00.1 Audio device: NVIDIA Corporation Device 22bd (rev a1)
$ vkcube --gpu_number 0 &
Selected GPU 0: Intel(R) Iris(R) Xe Graphics (ADL GT2), type: IntegratedGpu
$ vkcube --gpu_number 1 &
Selected GPU 1: NVIDIA T550 Laptop GPU, type: DiscreteGpu
$ vkcube --gpu_number 2 &
Selected GPU 2: NVIDIA GeForce RTX 4060 Ti, type: DiscreteGpu
Could not find both graphics and present queues
$ vkcube --gpu_number 3 &
Selected GPU 3: llvmpipe (LLVM 20.1.2, 256 bits), type: Cpu
==========
VULKANINFO
==========
Vulkan Instance Version: 1.3.275
Instance Extensions: count = 24
-------------------------------
VK_EXT_acquire_drm_display : extension revision 1
VK_EXT_acquire_xlib_display : extension revision 1
VK_EXT_debug_report : extension revision 10
VK_EXT_debug_utils : extension revision 2
VK_EXT_direct_mode_display : extension revision 1
VK_EXT_display_surface_counter : extension revision 1
VK_EXT_headless_surface : extension revision 1
VK_EXT_surface_maintenance1 : extension revision 1
VK_EXT_swapchain_colorspace : extension revision 5
VK_KHR_device_group_creation : extension revision 1
VK_KHR_display : extension revision 23
VK_KHR_external_fence_capabilities : extension revision 1
VK_KHR_external_memory_capabilities : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2 : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2 : extension revision 1
VK_KHR_portability_enumeration : extension revision 1
VK_KHR_surface : extension revision 25
VK_KHR_surface_protected_capabilities : extension revision 1
VK_KHR_wayland_surface : extension revision 6
VK_KHR_xcb_surface : extension revision 6
VK_KHR_xlib_surface : extension revision 6
VK_LUNARG_direct_driver_loading : extension revision 1
Instance Layers: count = 5
--------------------------
VK_LAYER_INTEL_nullhw INTEL NULL HW 1.1.73 version 1
VK_LAYER_MESA_device_select Linux device selection layer 1.4.303 version 1
VK_LAYER_MESA_overlay Mesa Overlay layer 1.4.303 version 1
VK_LAYER_NV_optimus NVIDIA Optimus layer 1.4.312 version 1
VK_LAYER_NV_present NVIDIA GR2608 layer 1.4.312 version 1
Devices:
========
GPU0:
apiVersion = 1.4.305
driverVersion = 25.0.7
vendorID = 0x8086
deviceID = 0x46a6
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) Iris(R) Xe Graphics (ADL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 25.0.7-0ubuntu0.24.04.2
conformanceVersion = 1.4.0.0
deviceUUID = 8680a646-0c00-0000-0002-000000000000
driverUUID = 802b0057-40c2-aed9-e538-d78b797f04f4
GPU1:
apiVersion = 1.4.312
driverVersion = 580.95.5.0
vendorID = 0x10de
deviceID = 0x1fb7
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA T550 Laptop GPU
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 580.95.05
conformanceVersion = 1.4.1.3
deviceUUID = bafd9e33-10da-dff0-cd1d-3dd31c1e52f1
driverUUID = b92269a1-b525-5615-ab8a-e2095ee37192
GPU2:
apiVersion = 1.4.312
driverVersion = 580.95.5.0
vendorID = 0x10de
deviceID = 0x2805
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA GeForce RTX 4060 Ti
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 580.95.05
conformanceVersion = 1.4.1.3
deviceUUID = d0eb8f73-07f4-d19f-fa4c-7728059b355e
driverUUID = b92269a1-b525-5615-ab8a-e2095ee37192
GPU3:
apiVersion = 1.4.305
driverVersion = 0.0.1
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 20.1.2, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 25.0.7-0ubuntu0.24.04.2 (LLVM 20.1.2)
conformanceVersion = 1.3.1.1
deviceUUID = 6d657361-3235-2e30-2e37-2d3075627500
driverUUID = 6c6c766d-7069-7065-5555-494400000000
how about running vkcube on the 4060 as root? (sudo vkcube --gpu_number 2) Since vulkaninfo running as a normal user is able to report all GPUs correctly, it will probably not help, but still worth trying.
Honestly I was expecting that vulkaninfo would not be able to see the 4060, which would explain a lot. Now I’m a bit out of ideas :/ Hopefully some other users who have better understanding of Vulkan internals will be able to advise more…
Sorry, time has run out for now so enabling a udev customization again to have eGPU working, so haven’t tried sudo vkcube yet.
I agree if someone argues udev customization I proposed above is a hack, particularly because it disables one of the hardware i.e. iGPU (one should be able to utilize all the hardware plugged in). So unmarking this thread.
I asked w/Gemini Pro supplying syslog. At the begining of the conversation it also suspected permission, so I felt confident in relying on Gemini for its assistance now that an expert on this forum and GenAI might have shared a common suspicion. After several interactions, unfortunately the situation didn’t improve. If anyone is curious you can see the detail of the series of the suggestions Gemini made and the result of each attempt at hut_10sqft#1317.