Skip to content

Commit

Permalink
pythongh-87277: Don't look for X11 browsers on macOS in webbrowser (p…
Browse files Browse the repository at this point in the history
…ython#24480)


The installation of XQuartz on macOS will unconditionally
set the $DISPLAY variable. The X11 server will be launched
when a program tries to access the display.  This results
in launching the X11 server when using the webbrowser module,
even though X11 browsers won't be used in practice.
  • Loading branch information
ronaldoussoren authored and ryan-duve committed Dec 26, 2023
1 parent cf884d8 commit cc55511
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
11 changes: 11 additions & 0 deletions Lib/test/test_webbrowser.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,17 @@ def test_register_preferred(self):
self._check_registration(preferred=True)


@unittest.skipUnless(sys.platform == "darwin", "macOS specific test")
def test_no_xdg_settings_on_macOS(self):
# On macOS webbrowser should not use xdg-settings to
# look for X11 based browsers (for those users with
# XQuartz installed)
with mock.patch("subprocess.check_output") as ck_o:
webbrowser.register_standard_browsers()

ck_o.assert_not_called()


class ImportTest(unittest.TestCase):
def test_register(self):
webbrowser = import_helper.import_fresh_module('webbrowser')
Expand Down
7 changes: 6 additions & 1 deletion Lib/webbrowser.py
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,12 @@ def register_standard_browsers():
register("microsoft-edge", None, Edge("MicrosoftEdge.exe"))
else:
# Prefer X browsers if present
if os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY"):
#
# NOTE: Do not check for X11 browser on macOS,
# XQuartz installation sets a DISPLAY environment variable and will
# autostart when someone tries to access the display. Mac users in
# general don't need an X11 browser.
if sys.platform != "darwin" and (os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY")):
try:
cmd = "xdg-settings get default-web-browser".split()
raw_result = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
webbrowser: Don't look for X11 browsers on macOS. Those are generally not
used and probing for them can result in starting XQuartz even if it isn't
used otherwise.

0 comments on commit cc55511

Please sign in to comment.