跳过正文
  1. 技术杂项/

NixOS 下使用 distrobox 的一些问题记录

·814 字·4 分钟
目录

Nvidia in container
#

  1. 首先确保 NixOS 本身已经配置好 Nvidia 驱动: https://nixos.wiki/wiki/Nvidia

  2. NixOS docker 相关配置

      virtualisation.docker.enable = true;
      hardware.nvidia-container-toolkit.enable = true;
  3. 创建 distrobox 容器时的参数

    注意 –additional-flags

    distrobox-create --root -i ubuntu:24.04 -n ubuntu-2404-n --hostname ubuntu-2404-n --additional-flags "--device nvidia.com/gpu=all"

distrobox 使用 host 的输入法
#

参考1:https://github.com/89luca89/distrobox/issues/957

1.change GTK_IM_MODULE and QT_IM_MODULE to xim,like

export GTK_IM_MODULE=xim # 有些应用需要指定 xim, 如 vscode, 有些需要 fcitx 如 wps
export QT_IM_MODULE=xim # 同上
export XMODIFIERS=@im=fcitx # 固定为 fcitx

2.enable locale in /etc/locale.gen and run locale-gen command

参考2:https://github.com/fcitx/fcitx5/discussions/990

Ubuntu 容器内 vulkan 无法正常使用
#

问题描述
#

容器外 nvidia-smi 和 vulkaninfo 输出都正常,能看到 N 卡信息。

$ nvidia-smi 
Fri Jul  4 10:32:09 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77                 Driver Version: 565.77         CUDA Version: 12.7     |
|-----------------------------------------+------------------------+----------------------+
| 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 2080        Off |   00000000:01:00.0  On |                  N/A |
| N/A   65C    P8              8W /   50W |     529MiB /   8192MiB |      7%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A    151550      G   ...0jn1l86i6-xorg-server-21.1.16/bin/X        272MiB |
|    0   N/A  N/A    152101      G   /run/current-system/sw/bin/cinnamon            77MiB |
|    0   N/A  N/A    154788      G   ...bda102dc07718372145c47159957d6ca33b         79MiB |
|    0   N/A  N/A    158835      G   ...an,WebOTP --variations-seed-version         20MiB |
|    0   N/A  N/A    181293      G   /usr/share/code/code                           58MiB |
+-----------------------------------------------------------------------------------------+
$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
	apiVersion         = 1.3.289
	driverVersion      = 565.77.0.0
	vendorID           = 0x10de
	deviceID           = 0x1ed0
	deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName         = NVIDIA GeForce RTX 2080
	driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
	driverName         = NVIDIA
	driverInfo         = 565.77
	conformanceVersion = 1.3.8.2
	deviceUUID         = 714dd5f1-e57d-7b68-85b5-9e3f8ebbff93
	driverUUID         = 5d948742-de2b-5e32-9692-c2a5621aed9a
GPU1:
	apiVersion         = 1.3.289
	driverVersion      = 24.2.8
	vendorID           = 0x8086
	deviceID           = 0x3e98
	deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName         = Intel(R) UHD Graphics 630 (CFL GT2)
	driverID           = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
	driverName         = Intel open-source Mesa driver
	driverInfo         = Mesa 24.2.8
	conformanceVersion = 1.3.6.0
	deviceUUID         = 8680983e-0200-0000-0002-000000000000
	driverUUID         = 235d7fbb-cda3-983c-2211-66b6596d8146
GPU2:
	apiVersion         = 1.3.289
	driverVersion      = 0.0.1
	vendorID           = 0x10005
	deviceID           = 0x0000
	deviceType         = PHYSICAL_DEVICE_TYPE_CPU
	deviceName         = llvmpipe (LLVM 18.1.8, 256 bits)
	driverID           = DRIVER_ID_MESA_LLVMPIPE
	driverName         = llvmpipe
	driverInfo         = Mesa 24.2.8 (LLVM 18.1.8)
	conformanceVersion = 1.3.1.1
	deviceUUID         = 6d657361-3234-2e32-2e38-000000000000
	driverUUID         = 6c6c766d-7069-7065-5555-494400000000

容器内,nvidia-smi 输出正常,vulkaninfo 输出却看不到 N 卡。

$ nvidia-smi 
Fri Jul  4 01:30:07 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77                 Driver Version: 565.77         CUDA Version: 12.7     |
|-----------------------------------------+------------------------+----------------------+
| 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 2080        Off |   00000000:01:00.0  On |                  N/A |
| N/A   39C    P8              9W /   50W |     364MiB /   8192MiB |     10%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A    151550      G   ...0jn1l86i6-xorg-server-21.1.16/bin/X        217MiB |
|    0   N/A  N/A    152101      G   /run/current-system/sw/bin/cinnamon            58MiB |
|    0   N/A  N/A    154788      G   ...bda102dc07718372145c47159957d6ca33b         68MiB |
+-----------------------------------------------------------------------------------------+
$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
	apiVersion         = 1.3.289
	driverVersion      = 24.2.8
	vendorID           = 0x8086
	deviceID           = 0x3e98
	deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName         = Intel(R) UHD Graphics 630 (CFL GT2)
	driverID           = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
	driverName         = Intel open-source Mesa driver
	driverInfo         = Mesa 24.2.8-1ubuntu1~24.04.1
	conformanceVersion = 1.3.6.0
	deviceUUID         = 8680983e-0200-0000-0002-000000000000
	driverUUID         = 01445b43-3542-5b20-af99-316b29c3521c
GPU1:
	apiVersion         = 1.3.289
	driverVersion      = 0.0.1
	vendorID           = 0x10005
	deviceID           = 0x0000
	deviceType         = PHYSICAL_DEVICE_TYPE_CPU
	deviceName         = llvmpipe (LLVM 19.1.1, 256 bits)
	driverID           = DRIVER_ID_MESA_LLVMPIPE
	driverName         = llvmpipe
	driverInfo         = Mesa 24.2.8-1ubuntu1~24.04.1 (LLVM 19.1.1)
	conformanceVersion = 1.3.1.1
	deviceUUID         = 6d657361-3234-2e32-2e38-2d3175627500
	driverUUID         = 6c6c766d-7069-7065-5555-494400000000

问题原因
#

容器内,vulkan 相关的一些驱动和依赖程序没有安装。

最直接的表现就是 /usr/share/vulkan/icd.d/nvidia_icd.json 文件不存在。

解决方法
#

sudo apt install software-properties-common
sudo add-apt-repository universe multiverse  # 启用标准扩展仓库
sudo add-apt-repository ppa:graphics-drivers/ppa  # 添加专有驱动PPA
sudo apt update
sudo apt install vulkan-tools libvulkan1 libvulkan-dev libnvidia-gl-565/noble # 注意版本要匹配

验证
#

$ cat /usr/share/vulkan/icd.d/nvidia_icd.json
{
    "file_format_version" : "1.0.1",
    "ICD": {
        "library_path": "libGLX_nvidia.so.0",
        "api_version" : "1.3.289"
    }
}
$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
	apiVersion         = 1.3.289
	driverVersion      = 565.77.0.0
	vendorID           = 0x10de
	deviceID           = 0x1ed0
	deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
	deviceName         = NVIDIA GeForce RTX 2080
	driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
	driverName         = NVIDIA
	driverInfo         = 565.77
	conformanceVersion = 1.3.8.2
	deviceUUID         = 714dd5f1-e57d-7b68-85b5-9e3f8ebbff93
	driverUUID         = 5d948742-de2b-5e32-9692-c2a5621aed9a
GPU1:
	apiVersion         = 1.3.289
	driverVersion      = 24.2.8
	vendorID           = 0x8086
	deviceID           = 0x3e98
	deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName         = Intel(R) UHD Graphics 630 (CFL GT2)
	driverID           = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
	driverName         = Intel open-source Mesa driver
	driverInfo         = Mesa 24.2.8-1ubuntu1~24.04.1
	conformanceVersion = 1.3.6.0
	deviceUUID         = 8680983e-0200-0000-0002-000000000000
	driverUUID         = 01445b43-3542-5b20-af99-316b29c3521c
GPU2:
	apiVersion         = 1.3.289
	driverVersion      = 0.0.1
	vendorID           = 0x10005
	deviceID           = 0x0000
	deviceType         = PHYSICAL_DEVICE_TYPE_CPU
	deviceName         = llvmpipe (LLVM 19.1.1, 256 bits)
	driverID           = DRIVER_ID_MESA_LLVMPIPE
	driverName         = llvmpipe
	driverInfo         = Mesa 24.2.8-1ubuntu1~24.04.1 (LLVM 19.1.1)
	conformanceVersion = 1.3.1.1
	deviceUUID         = 6d657361-3234-2e32-2e38-2d3175627500
	driverUUID         = 6c6c766d-7069-7065-5555-494400000000