Não é possível executar o código do Visual Studio com GUI ao usar um contêiner de Singularidade: obter erros de gtk, dbus e dconf

0

Estou tentando evitar a instalação de muitas dependências de outro software (Blender) no meu laptop executando um Ubuntu 16.04. Portanto, decidi criar um contêiner de Singularidade que tenha essas dependências para que eu possa compilar o Blender por meio desse contêiner. Então, meu objetivo é também ter o VS Code no contêiner, executá-lo visualmente, compilar o Blender na minha máquina localmente e fazer a depuração / edição de código, etc. Veja como eu construo meu contêiner com o VS Code instalado nele:

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

Depois de construir o container, eu o utilizo usando o sinalizador --nv . No entanto, fazer code . -s não mostra a GUI de código do Visual Studio e mostra vários erros, como 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 directory e dconf-CRITICAL **: unable to create directory '/run/user/1000/dconf': Permission denied. dconf will not work properly. . É necessário mencionar que a execução de glxgears funciona conforme o esperado e mostra as engrenagens sendo executadas.

Se eu fizer o shell em meu contêiner de singularidade usando sudo (que eu deveria quase sempre evitar) e executar code -s --user-data-dir='' , recebo apenas ERROR:browser_main_loop.cc(279)] Gtk: cannot open display: :0 como erro e os outros avisos / erros desaparecem. glxgrears também mostra um erro semelhante: Error: couldn't open display :0 apesar do fato de echo $DISPLAY mostrar :0 ao descartar no contêiner com e sem sudo .

Então, pergunto-me, como posso executar corretamente o VS Code com GUI usando o Docker ou o Singularity? Fazer alguma pesquisa na Internet meio que me convenceu de que estou instalando todos os módulos necessários para poder executar um aplicativo com GUI em Singularity, mas por que isso não está acontecendo com o VS Code? Alguém pode me dar algumas dicas sobre o que está acontecendo e / ou fornecer uma solução sobre como eu posso executar a GUI ao usar um contêiner de singularidade.

    
por Amir 25.07.2018 / 16:35

1 resposta

0

Eu me deparei com alguns dos mesmos problemas e parece que há um monte de "coisas" em vscode / elétron que assumem que o udev / dbus e o acesso ao / run / user ... estarão disponíveis.

Eu resolvi o problema usando um comando bind; por favor, grite se isso é estúpido ou perigoso, mas aqui está como eu inicio o vscode no momento:

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