使用 Singularity 容器时无法通过 GUI 运行 Visual Studio Code:获取 gtk、dbus 和 dconf 错误

使用 Singularity 容器时无法通过 GUI 运行 Visual Studio Code:获取 gtk、dbus 和 dconf 错误

我试图避免在运行 Ubuntu 16.04 的笔记本电脑上安装另一个软件(Blender)的大量依赖项。因此,我决定构建一个具有这些依赖项的 Singularity 容器,以便我可以通过该容器编译 Blender。所以我的目标是在容器中也有 VS Code,以可视化方式运行它,在本地机器上编译 Blender 并进行调试/代码编辑等。以下是我如何构建安装了 VS Code 的容器:

BootStrap: docker
From: nvidia/cuda:9.0-devel-ubuntu16.04

%post

apt-get -y update && apt-get -y install locales
locale-gen en_US.UTF-8
apt-get -y update && apt-get -y install make \
                                        dpkg \
                                        wget \
                                        bzip2 \
                                        libglib2.0-0 \
                                        libxext6 \
                                        libsm6 \
                                        libxrender1 \
                                        g++ \
                                        gcc \
                                        xvfb \
                                        libyaml-cpp-dev \
                                        git \
                                        cmake \
                                        vim \
                                        curl \
                                        ca-certificates \
                                        software-properties-common \
                                        python3 \
                                        python3-pip \
                                        gdb \
                                        libopenexr-dev \
                                        zlib1g-dev \
                                        xserver-xorg \
                                        freeglut3-dev \
                                        mesa-utils \
                                        libreadline-dev \
                                        gnuplot \
                                        gnuplot-qt \
                                        unzip \
                                        libboost-all-dev \
                                        libnss3 \
                                        libgconf-2-4 \
                                        libasound2 \
                                        libsecret-1-0 \
                                        libnss3 \
                                        libgconf-2-4 \
                                        libasound2 \
                                        libatk-adaptor \
                                        libgail-common \
                                        libcanberra-gtk-module \
                                        gtk2-engines \
                                        gtk2-engines-*

apt-get -y install --reinstall overlay-scrollbar-gtk2 \
                                gtk2-engines-murrine

# Install Visual Studio Code and relevant extensions
cd /
mkdir vscode && cd vscode && wget -O code_amd64 https://go.microsoft.com/fwlink/?LinkID=760868
dpkg -i code_amd64
code --install-extension ms-vscode.cpptools --user-data-dir='/vscode/'
code --install-extension vector-of-bool.cmake-tools --user-data-dir='/vscode/'
code --install-extension ms-python.python --user-data-dir='/vscode/'
rm code_amd64

构建容器后,我使用--nv标志将其插入其中。但是,这样做code . -s不会显示 Visual Studio Code GUI,并显示一堆错误,例如Gtk-Message: Failed to load module "unity-gtk-module"bus.cc(427)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directorydconf-CRITICAL **: unable to create directory '/run/user/1000/dconf': Permission denied. dconf will not work properly.。需要提到的是,执行glxgears工作按预期进行并显示齿轮正在运行。

sudo如果我使用(我几乎应该总是避免)进入我的奇点容器并运行code -s --user-data-dir='',我只会得到ERROR:browser_main_loop.cc(279)] Gtk: cannot open display: :0错误,其他警告/错误消失。glxgrears也显示了类似的错误:Error: couldn't open display :0尽管事实是在将外壳打入容器时echo $DISPLAY显示:0没有 sudo

所以我想知道,如何使用 Docker 或 Singularity 正确运行带有 GUI 的 VS Code?在互联网上进行一些搜索后,我确信我正在安装所有必要的模块,以便能够在 Singularity 中运行带有 GUI 的应用程序,但为什么 VS Code 没有发生这种情况?任何人都可以给我一些关于正在发生的事情的线索和/或提供关于如何在使用 Singularity 容器时运行 GUI 的解决方案。

答案1

我遇到了一些相同的问题,似乎 vscode/ Electron 中只有很多“东西”假设 udev/dbus 和 /run/user... 的访问权限可用。

我通过使用绑定命令解决了这个问题;如果这是愚蠢或危险的,请大喊,但这是我目前启动 vscode 的方式:

singularity run --nv -B /run/user/$(id -u):/run/user/$(id -u) vscode.simg

相关内容