Remove DISPLAY env var from image (#625)

To avoid a strange chromium bug:
https://issues.chromium.org/issues/40209037 which causes WebGL to fail
in headless mode if DISPLAY if set. Instead, just set DISPLAY directly
for Xvfb, x11vnc and pass in `--display=` to browser if running in
headful mode.
This commit is contained in:
Ilya Kreymer 2024-06-25 13:53:43 -07:00 committed by GitHub
parent 92ad800fe4
commit 2ab58c0ea3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 13 additions and 6 deletions

View file

@ -6,8 +6,7 @@ FROM ${BROWSER_IMAGE_BASE}
# needed to add args to main build stage
ARG BROWSER_VERSION
ENV DISPLAY=:99 \
GEOMETRY=1360x1020x16 \
ENV GEOMETRY=1360x1020x16 \
BROWSER_VERSION=${BROWSER_VERSION} \
BROWSER_BIN=google-chrome \
OPENSSL_CONF=/app/openssl.conf \

View file

@ -45,6 +45,7 @@ import {
ADD_LINK_FUNC,
BEHAVIOR_LOG_FUNC,
DEFAULT_SELECTORS,
DISPLAY,
} from "./util/constants.js";
import { AdBlockRules, BlockRules } from "./util/blockrules.js";
@ -508,7 +509,7 @@ export class Crawler {
child_process.spawn(
"Xvfb",
[
process.env.DISPLAY || "",
DISPLAY,
"-listen",
"tcp",
"-screen",

View file

@ -15,6 +15,7 @@ import { Browser } from "./util/browser.js";
import { initStorage } from "./util/storage.js";
import { CDPSession, Page, PuppeteerLifeCycleEvent } from "puppeteer-core";
import { getInfoString } from "./util/file_reader.js";
import { DISPLAY } from "./util/constants.js";
const profileHTML = fs.readFileSync(
new URL("../html/createProfile.html", import.meta.url),
@ -143,7 +144,7 @@ async function main() {
if (!params.headless) {
logger.debug("Launching XVFB");
child_process.spawn("Xvfb", [
process.env.DISPLAY || "",
DISPLAY,
"-listen",
"tcp",
"-screen",
@ -169,7 +170,7 @@ async function main() {
"-passwd",
process.env.VNC_PASS || "",
"-display",
process.env.DISPLAY || "",
DISPLAY,
]);
}

View file

@ -9,7 +9,7 @@ import path from "path";
import { LogContext, logger } from "./logger.js";
import { initStorage } from "./storage.js";
import type { ServiceWorkerOpt } from "./constants.js";
import { DISPLAY, type ServiceWorkerOpt } from "./constants.js";
import puppeteer, {
Frame,
@ -93,6 +93,10 @@ export class Browser {
args.push("--disable-site-isolation-trials");
}
if (!headless) {
args.push(`--display=${DISPLAY}`);
}
let defaultViewport = null;
if (process.env.GEOMETRY) {

View file

@ -33,3 +33,5 @@ export const DEFAULT_SELECTORS = [
isAttribute: false,
},
];
export const DISPLAY = ":99";