Skip to content

Docker: Fluxbox not rendering Chinese characters via VNC view #2817

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/actions/get-latest-upstream/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ runs:
AUTH_HEADER="Authorization: token ${{ inputs.gh_cli_token }}"
if [ "${{ inputs.release }}" = "true" ]; then
echo "Getting the latest stable release."
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == false)] | .[0].tag_name')
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[]? | select(.prerelease == false)] | .[0].tag_name')
else
echo "Getting the latest Nightly release."
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == true)] | .[0].tag_name' || echo "")
if [ -z "${RELEASE}" ]; then
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[]? | select(.prerelease == true)] | .[0].tag_name' || echo "")
if [ -z "${RELEASE}" ] || [ "${RELEASE}" = "null" ]; then
echo "Nightly release not found, getting the latest stable release."
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == false)] | .[0].tag_name')
RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[]? | select(.prerelease == false)] | .[0].tag_name')
fi
fi
jar_file=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases/tags/${RELEASE} | jq -r '.assets[] | select(.name | endswith(".jar")) | .name' | tail -n 1)
Expand Down
28 changes: 20 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -377,17 +377,23 @@ tag_latest:
docker tag $(NAME)/session-queue:$(TAG_VERSION) $(NAME)/session-queue:latest
docker tag $(NAME)/event-bus:$(TAG_VERSION) $(NAME)/event-bus:latest
docker tag $(NAME)/node-base:$(TAG_VERSION) $(NAME)/node-base:latest
docker tag $(NAME)/node-chrome:$(TAG_VERSION) $(NAME)/node-chrome:latest
docker tag $(NAME)/node-chromium:$(TAG_VERSION) $(NAME)/node-chromium:latest
docker tag $(NAME)/node-edge:$(TAG_VERSION) $(NAME)/node-edge:latest
docker tag $(NAME)/node-firefox:$(TAG_VERSION) $(NAME)/node-firefox:latest
docker tag $(NAME)/node-docker:$(TAG_VERSION) $(NAME)/node-docker:latest
docker tag $(NAME)/standalone-chrome:$(TAG_VERSION) $(NAME)/standalone-chrome:latest
docker tag $(NAME)/standalone-chromium:$(TAG_VERSION) $(NAME)/standalone-chromium:latest
docker tag $(NAME)/standalone-edge:$(TAG_VERSION) $(NAME)/standalone-edge:latest
docker tag $(NAME)/standalone-firefox:$(TAG_VERSION) $(NAME)/standalone-firefox:latest
docker tag $(NAME)/standalone-docker:$(TAG_VERSION) $(NAME)/standalone-docker:latest
docker tag $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) $(NAME)/video:latest
case "$(PLATFORMS)" in *linux/amd64*) \
docker tag $(NAME)/node-chrome:$(TAG_VERSION) $(NAME)/node-chrome:latest && \
docker tag $(NAME)/standalone-chrome:$(TAG_VERSION) $(NAME)/standalone-chrome:latest && \
docker tag $(NAME)/node-edge:$(TAG_VERSION) $(NAME)/node-edge:latest && \
docker tag $(NAME)/standalone-edge:$(TAG_VERSION) $(NAME)/standalone-edge:latest \
;; \
*) \
echo "Tagged other images, except Chrome and Edge Node/Standalone don't support platform $(PLATFORMS)" ; \
;; \
esac

release_ffmpeg_latest:
docker push $(NAME)/ffmpeg:latest
Expand Down Expand Up @@ -427,17 +433,23 @@ tag_nightly:
docker tag $(NAME)/session-queue:$(TAG_VERSION) $(NAME)/session-queue:nightly
docker tag $(NAME)/event-bus:$(TAG_VERSION) $(NAME)/event-bus:nightly
docker tag $(NAME)/node-base:$(TAG_VERSION) $(NAME)/node-base:nightly
docker tag $(NAME)/node-chrome:$(TAG_VERSION) $(NAME)/node-chrome:nightly
docker tag $(NAME)/node-chromium:$(TAG_VERSION) $(NAME)/node-chromium:nightly
docker tag $(NAME)/node-edge:$(TAG_VERSION) $(NAME)/node-edge:nightly
docker tag $(NAME)/node-firefox:$(TAG_VERSION) $(NAME)/node-firefox:nightly
docker tag $(NAME)/node-docker:$(TAG_VERSION) $(NAME)/node-docker:nightly
docker tag $(NAME)/standalone-chrome:$(TAG_VERSION) $(NAME)/standalone-chrome:nightly
docker tag $(NAME)/standalone-chromium:$(TAG_VERSION) $(NAME)/standalone-chromium:nightly
docker tag $(NAME)/standalone-edge:$(TAG_VERSION) $(NAME)/standalone-edge:nightly
docker tag $(NAME)/standalone-firefox:$(TAG_VERSION) $(NAME)/standalone-firefox:nightly
docker tag $(NAME)/standalone-docker:$(TAG_VERSION) $(NAME)/standalone-docker:nightly
docker tag $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) $(NAME)/video:nightly
case "$(PLATFORMS)" in *linux/amd64*) \
docker tag $(NAME)/node-chrome:$(TAG_VERSION) $(NAME)/node-chrome:nightly && \
docker tag $(NAME)/standalone-chrome:$(TAG_VERSION) $(NAME)/standalone-chrome:nightly && \
docker tag $(NAME)/node-edge:$(TAG_VERSION) $(NAME)/node-edge:nightly && \
docker tag $(NAME)/standalone-edge:$(TAG_VERSION) $(NAME)/standalone-edge:nightly \
;; \
*) \
echo "Tagged other images, except Chrome and Edge Node/Standalone don't support platform $(PLATFORMS)" ; \
;; \
esac

release_nightly: release_grid_scaler_nightly
docker push $(NAME)/base:nightly
Expand Down
38 changes: 21 additions & 17 deletions NodeBase/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ LABEL authors=${AUTHORS}
# Inputs: heads, tags
ARG NOVNC_SOURCE="tags"
# Inputs: master, "v1.4.0"
ARG NOVNC_VERSION="v1.5.0"
ARG NOVNC_VERSION="v1.6.0"
# Inputs: heads, tags
ARG WEBSOCKIFY_SOURCE="tags"
# Inputs: master, "v0.11.0"
ARG WEBSOCKIFY_VERSION="v0.12.0"
ARG WEBSOCKIFY_VERSION="v0.13.0"
ARG LANG_WHICH=en
ARG LANG_WHERE=US
ARG ENCODING=UTF-8
Expand Down Expand Up @@ -77,21 +77,6 @@ ENV LANG_WHICH=${LANG_WHICH} \

RUN apt-get update -qqy \
&& apt-get -qqy --no-install-recommends install \
#==============
# Xvfb
#==============
xvfb \
libxcb1 \
xauth \
pulseaudio \
#=====
# VNC
#=====
x11vnc x11-utils \
#=========
# Fluxbox (a fast, lightweight and responsive window manager)
#=========
fluxbox eterm hsetroot feh \
#==============================
# Locale and encoding settings
#==============================
Expand All @@ -107,13 +92,32 @@ RUN apt-get update -qqy \
fonts-wqy-zenhei \
fonts-tlwg-loma-otf \
fonts-noto-color-emoji \
fonts-noto-cjk \
fonts-indic \
#==============
# Xvfb
#==============
xvfb \
libxcb1 \
xauth \
pulseaudio \
#=====
# VNC
#=====
x11vnc x11-utils \
#=========
# Fluxbox (a fast, lightweight and responsive window manager)
#=========
fluxbox eterm hsetroot feh \
#==============================
# shared system certificate support
#==============================
p11-kit \
p11-kit-modules \
&& locale-gen ${LANGUAGE} \
&& dpkg-reconfigure --frontend noninteractive locales \
# For Fluxbox style, use fonts-wqy-zenhei which has a large international language coverage
&& sed -i 's/Ubuntu-/WenQuanYi Zen Hei-/g' /usr/share/fluxbox/styles/ubuntu-light \
&& apt-get -qyy autoremove \
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
&& apt-get -qyy clean
Expand Down
59 changes: 59 additions & 0 deletions tests/docker-compose-v3-get-started-arm64.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# To execute this docker compose yml file use `docker compose -f docker-compose-v3-video-arm64.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-v3-video-arm64.yml down`
services:
chrome:
deploy:
mode: replicated
replicas: 1
image: selenium/node-chromium:latest
shm_size: 2gb
ports:
- "5900:5900"
depends_on:
- selenium-hub
volumes:
- /tmp/videos:/videos
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_RECORD_VIDEO=true
- SE_VIDEO_FILE_NAME=auto
- SE_NODE_GRID_URL=http://selenium-hub:4444

firefox:
deploy:
mode: replicated
replicas: 1
image: selenium/node-firefox:latest
shm_size: 2gb
ports:
- "5901:5900"
depends_on:
- selenium-hub
volumes:
- /tmp/videos:/videos
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_RECORD_VIDEO=true
- SE_VIDEO_FILE_NAME=auto
- SE_NODE_GRID_URL=http://selenium-hub:4444

selenium-hub:
image: selenium/hub:latest
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"

# File browser to manage the videos from local volume
file_browser:
image: filebrowser/filebrowser:latest
container_name: file_browser
restart: always
ports:
- "8081:80"
volumes:
- /tmp/videos:/srv
environment:
- FB_NOAUTH=true
37 changes: 37 additions & 0 deletions tests/get_started.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import sys
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.edge.options import Options as EdgeOptions

if len(sys.argv) < 2:
print("Usage: python3 get_started.py [chrome|firefox|edge]")
sys.exit(1)
browser = sys.argv[1].lower()
if browser not in ["chrome", "firefox", "edge"]:
print("Unsupported browser. Use 'chrome', 'firefox', or 'edge'.")
sys.exit(1)

if len(sys.argv) > 2:
GRID_URL = sys.argv[2]
else:
GRID_URL = "http://localhost:4444/wd/hub"

options = None
if browser == "chrome":
options = ChromeOptions()
elif browser == "firefox":
options = FirefoxOptions()
elif browser == "edge":
options = EdgeOptions()

driver = webdriver.Remote(
command_executor=GRID_URL,
options=options,
)

driver.get('https://www.google.com/')
print(driver.title)
time.sleep(100)
driver.quit()
Loading