XModule "Not Installed" in Docker/Headless Linux

Hi Team

Running UI.Vision RPA in a Docker container (headless Linux) to execute macros via a REST API. The setup uses:

  • Debian Bullseye + Chromium (installed via apt)
  • UI.Vision extension v9.5.9 loaded as unpacked extension (–load-extension)
  • XModules AppImage extracted (no FUSE) using --appimage-extract
  • Xvfb virtual display + x11vnc for VNC access
  • Node.js API server that triggers macros via Chrome DevTools Protocol

Current Status:

  • Chromium launches with UI.Vision extension loaded
  • VNC shows Chromium desktop
  • UI.Vision panel opens, macros visible in sidebar

Issue:

XModule Settings → FileAccess → Status: Not Installed

Dockerfile:

FROM debian:bullseye

RUN apt-get update && apt-get install -y 
curl wget gnupg ca-certificates 
fonts-liberation libappindicator3-1 libasound2 
libatk-bridge2.0-0 libatk1.0-0 libcups2 libdbus-1-3 
libgdk-pixbuf2.0-0 libnspr4 libnss3 libx11-xcb1 
libxcomposite1 libxdamage1 libxrandr2 xdg-utils 
libgbm1 libxshmfence1 
xvfb x11vnc fluxbox supervisor unzip x11-utils 
python3 procps fuse libfuse2 squashfs-tools 
libgtk-3-0 libdbus-glib-1-2 libxt6 
libglib2.0-0 libstdc++6 libgcc-s1 dbus dbus-x11 
&& rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y chromium chromium-driver 
&& rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - 
&& apt-get install -y nodejs 
&& rm -rf /var/lib/apt/lists/*

COPY extract_crx.py /opt/extract_crx.py
RUN mkdir -p /opt/uivision/extension && 
cd /opt/uivision && 
wget -q -O uivision.crx 
“https://clients2.google.com/service/update2/crx?response=redirect&prodversion=120.0.0.0&acceptformat=crx2,crx3&x=id%3Dgcbalfbdmfieckjlnblleoemohcganoc%26uc” && 
python3 /opt/extract_crx.py && 
unzip -q uivision.zip -d extension && 
rm -f uivision.crx uivision.zip /opt/extract_crx.py && 
rm -rf /opt/uivision/extension/_metadata && 
sed -i ‘/“update_url”/d’ /opt/uivision/extension/manifest.json && 
ls /opt/uivision/extension/

RUN mkdir -p /opt/xmodules && cd /opt/xmodules && 
wget -q 
“https://download.ui.vision/x/uivision-xmodules-linux-v2.AppImage” && 
chmod +x uivision-xmodules-linux-v2.AppImage && 
./uivision-xmodules-linux-v2.AppImage --appimage-extract && 
ls /opt/xmodules/squashfs-root/usr/bin/

RUN mkdir -p /opt/xmodules/uivision-xmodules && 
echo ‘#!/bin/sh’ > /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘APPDIR=/opt/xmodules/squashfs-root’ >> /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘export APPDIR’ >> /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘export LD_LIBRARY_PATH=“$APPDIR/usr/lib:$APPDIR/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH”’ >> /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘export QT_QPA_PLATFORM=xcb’ >> /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘export DISPLAY=:99’ >> /opt/xmodules/uivision-xmodules/nmhost && 
echo ‘exec “$APPDIR/usr/bin/nmhost” “$@”’ >> /opt/xmodules/uivision-xmodules/nmhost && 
chmod +x /opt/xmodules/uivision-xmodules/nmhost && 
cat /opt/xmodules/uivision-xmodules/nmhost

ENV DISPLAY=:99
ENV CHROME_PATH=/usr/bin/chromium
ENV UIVISION_HOME=/home/chromeuser/uivision
ENV XDG_RUNTIME_DIR=/tmp/runtime-chromeuser

RUN useradd -m -d /home/chromeuser chromeuser && 
mkdir -p 
/home/chromeuser/macros 
/home/chromeuser/logs 
/home/chromeuser/chrome-data 
/home/chromeuser/uivision 
/home/chromeuser/datasources 
/home/chromeuser/.config/chromium/NativeMessagingHosts 
/tmp/runtime-chromeuser && 
chown -R chromeuser:chromeuser /home/chromeuser /opt/xmodules /tmp/runtime-chromeuser && 
chmod 700 /tmp/runtime-chromeuser

COPY fix_nmh.py /tmp/fix_nmh.py
RUN mkdir -p 
/etc/chromium/native-messaging-hosts 
/home/chromeuser/.config/chromium/NativeMessagingHosts && 
python3 /tmp/fix_nmh.py && 
chown -R chromeuser:chromeuser /home/chromeuser/.config && 
cat /etc/chromium/native-messaging-hosts/com.github.teamdocs.kcmd.json

COPY --chown=chromeuser:chromeuser macros/ /home/chromeuser/uivision/
RUN ln -sf /home/chromeuser/uivision /home/chromeuser/macros

COPY autorun.html /opt/uivision/autorun.html
COPY init-extension-config.sh /opt/uivision/init-extension-config.sh
RUN chmod +x /opt/uivision/init-extension-config.sh

COPY run-chromium.sh /opt/uivision/run-chromium.sh
RUN chmod +x /opt/uivision/run-chromium.sh

COPY package.json tsconfig.json /opt/uivision/
COPY src/ /opt/uivision/src/
RUN cd /opt/uivision && npm install && npm run build

COPY start-macro.sh /opt/start-macro.sh
RUN chmod +x /opt/start-macro.sh

COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

ENV MACRO_NAME=“SimpleOpenGoogle”
EXPOSE 5900 8000
ENTRYPOINT [“/usr/local/bin/docker-entrypoint.sh”]
CMD 

can someone help on this to achieve it correctly

Thanks

RAM