gh-87277: Don't look for X11 browsers on macOS in webbrowser (#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.
This commit is contained in:
Ronald Oussoren 2023-12-21 14:43:38 +01:00 committed by GitHub
parent 723f4d6698
commit ca8b1d0958
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 1 deletions

View File

@ -272,6 +272,17 @@ class BrowserRegistrationTest(unittest.TestCase):
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')

View File

@ -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)

View File

@ -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.