feat: add Linux Flatpak browser paths to DevToolsActivePort discovery

On Linux systems where Chromium/Chrome is installed via Flatpak, the
tool fails entirely because Flatpak sandboxes each app under its own
XDG config directory (~/.var/app/<app-id>/config/) instead of the
standard ~/.config/ location.

Failure on a Fedora Silverblue / Bluefin system with Flatpak Chromium:

  $ node cdp.mjs pages
  No DevToolsActivePort found. Enable remote debugging at
  chrome://inspect/#remote-debugging
  (exit code 1)

This happens even when Chromium is running with --remote-debugging-port,
because the DevToolsActivePort file is written to:

  ~/.var/app/org.chromium.Chromium/config/chromium/DevToolsActivePort

instead of the expected:

  ~/.config/chromium/DevToolsActivePort

Flatpak-packaged Chromium-based browsers use the following paths:
  - org.chromium.Chromium  → chromium
  - com.google.Chrome      → google-chrome
  - com.brave.Browser      → BraveSoftware/Brave-Browser
  - com.microsoft.Edge     → microsoft-edge
  - com.vivaldi.Vivaldi    → vivaldi

Add these as candidates in getWsUrl() alongside the existing Linux
~/.config/ paths and the macOS ~/Library/Application Support/ paths.
With this fix, no CDP_PORT_FILE workaround is required on Flatpak-based
desktop distributions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
Petr Štetiar
2026-03-17 19:00:03 +01:00
parent 6a27bea16f
commit 59199f1464
+12
View File
@@ -48,6 +48,14 @@ function getWsUrl() {
'vivaldi', 'vivaldi-snapshot',
'BraveSoftware/Brave-Browser', 'microsoft-edge',
];
// Linux Flatpak: ~/.var/app/<app-id>/config/<name>/DevToolsActivePort
const flatpakBrowsers = [
['org.chromium.Chromium', 'chromium'],
['com.google.Chrome', 'google-chrome'],
['com.brave.Browser', 'BraveSoftware/Brave-Browser'],
['com.microsoft.Edge', 'microsoft-edge'],
['com.vivaldi.Vivaldi', 'vivaldi'],
];
const candidates = [
process.env.CDP_PORT_FILE,
...macBrowsers.flatMap(b => [
@@ -58,6 +66,10 @@ function getWsUrl() {
resolve(home, '.config', b, 'DevToolsActivePort'),
resolve(home, '.config', b, 'Default/DevToolsActivePort'),
]),
...flatpakBrowsers.flatMap(([appId, name]) => [
resolve(home, '.var/app', appId, 'config', name, 'DevToolsActivePort'),
resolve(home, '.var/app', appId, 'config', name, 'Default/DevToolsActivePort'),
]),
// Windows: %LOCALAPPDATA%/<name>/User Data/DevToolsActivePort
...(IS_WINDOWS ? ['Google/Chrome', 'BraveSoftware/Brave-Browser', 'Microsoft/Edge'].flatMap(b => {
const base = process.env.LOCALAPPDATA || resolve(home, 'AppData/Local');