Previously every game shared one always-on Xvnc/fluxbox/websockify desktop, so starting two games at once meant they fought over focus on the same screen and the same ALSA device. Now: - server.sh no longer starts a shared desktop at all - it just runs setup_server.py. There's no default display anymore. - start_game() allocates a free display from GAME_DISPLAY_NUMS (:90-:99, one per MAX_CONCURRENT_GAMES=10 slot), spins up a fresh Xvnc+fluxbox+websockify for it, and launches the game with DISPLAY set to that display. All four processes are tracked together per game. - stop_game() tears down all four; is_running() does the same lazily if the game exited on its own (crash/quit), so a slot doesn't stay stuck just because nobody clicked Stop. - Starting past the 10-slot cap is refused with an error shown on that game's row instead of silently failing. - Each running game's row gets its own "Open Screen" link (client-side JS, since the port is only known once the game is actually started) instead of one global noVNC link. - run.sh publishes the whole 8090-8099 noVNC port range up front, since Docker can't add port mappings to an already-running container. Verified end-to-end: two different games running concurrently get fully independent Xvnc/fluxbox/websockify/game process sets and noVNC endpoints; stopping one leaves the other untouched; the capacity guard correctly refuses a start at the limit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NiNnj78HGx1KWyCCo39HSz
34 lines
1.1 KiB
Docker
34 lines
1.1 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM ich777/novnc-baseimage
|
|
|
|
ENV DISPLAY_NUM=99
|
|
ENV GAMES_HOME=/opt/games
|
|
ENV SCRIPTS_HOME=/opt/scripts
|
|
ENV PATH=${PATH}:${SCRIPTS_HOME}
|
|
|
|
# unzip/smbclient/python3 are needed at runtime: the games are no longer baked into the
|
|
# image, setup_server.py serves an HTML install UI (backed by smbget+unzip) that the user
|
|
# drives on ${SETUP_PORT} instead of anything being auto-downloaded at container start.
|
|
RUN apt-get update && \
|
|
apt-get -y install --no-install-recommends dosbox scummvm alsa-utils unzip smbclient python3 && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN openssl req -x509 -nodes -newkey rsa:2048 -keyout /tmp/novnc.key -out /tmp/novnc.pem -days 3650 -subj "/C=US/ST=NY/L=NY/O=NY/OU=NY/CN=NY emailAddress=email@example.com"
|
|
RUN touch /root/.Xauthority
|
|
|
|
RUN mkdir -p ${GAMES_HOME}
|
|
VOLUME ${GAMES_HOME}
|
|
|
|
ADD scripts ${SCRIPTS_HOME}
|
|
WORKDIR /
|
|
|
|
EXPOSE 60${DISPLAY_NUM}
|
|
EXPOSE 70${DISPLAY_NUM}
|
|
EXPOSE 8090-8099
|
|
EXPOSE 5900
|
|
|
|
ENTRYPOINT ["/opt/scripts/server_start.sh", "/opt/scripts/server.sh"]
|
|
|
|
# see also
|
|
# https://github.com/ich777/docker-krusader
|