Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xwayland-run for openSUSE:Factory checked in at 2026-06-02 16:10:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xwayland-run (Old) and /work/SRC/openSUSE:Factory/.xwayland-run.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xwayland-run" Tue Jun 2 16:10:13 2026 rev:5 rq:1356709 version:0.0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/xwayland-run/xwayland-run.changes 2024-07-15 19:49:54.633080924 +0200 +++ /work/SRC/openSUSE:Factory/.xwayland-run.new.1937/xwayland-run.changes 2026-06-02 16:11:31.360771361 +0200 @@ -1,0 +2,17 @@ +Tue Jun 2 09:34:23 UTC 2026 - Enrico Belleri <[email protected]> + +- Update to 0.0.6: + + xwfb-run: Send the command errors to standrd stderr + + wlheadless: Use the first configuration file found + + wlheadless: Consider and prefer XDG_CONFIG_HOME + + Support the phoc compositor + + mutter: Check for different virtual monitor syntax + + wlheadless: Set sensible defaults for XDG dirs + + wlheadless: Wait for the compositor up to 150 secs + + weston: Add support for the "--fake-seat" option in weston 15 +- Add phoc to available possible compositors +- Fix python3 shebang +- Delete 0001-wlheadless-Ignore-os.waitpid-1-0-error.patch: + merged upstream + +------------------------------------------------------------------- Old: ---- 0001-wlheadless-Ignore-os.waitpid-1-0-error.patch xwayland-run-0.0.4.tar.gz New: ---- xwayland-run-0.0.6.tar.gz ----------(Old B)---------- Old:- Fix python3 shebang - Delete 0001-wlheadless-Ignore-os.waitpid-1-0-error.patch: merged upstream ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xwayland-run.spec ++++++ --- /var/tmp/diff_new_pack.bUXcxT/_old 2026-06-02 16:11:31.904793587 +0200 +++ /var/tmp/diff_new_pack.bUXcxT/_new 2026-06-02 16:11:31.908793751 +0200 @@ -17,24 +17,21 @@ Name: xwayland-run -Version: 0.0.4 +Version: 0.0.6 Release: 0 Summary: Set of utilities to run headless X/Wayland clients - License: GPL-2.0-or-later URL: https://gitlab.freedesktop.org/ofourdan/xwayland-run Source0: %{url}/-/archive/%{version}/%{name}-%{version}.tar.gz -# https://gitlab.freedesktop.org/ofourdan/xwayland-run/-/merge_requests/19 -Patch0001: 0001-wlheadless-Ignore-os.waitpid-1-0-error.patch - BuildArch: noarch BuildRequires: meson >= 0.60.0 -BuildRequires: git-core BuildRequires: python3-devel -Requires: (weston or cage or kwin6 or kwin5 or mutter or gnome-kiosk) + +Requires: (weston or cage or kwin6 or kwin5 or mutter or gnome-kiosk or phoc) Requires: xorg-x11-server-wayland + %if 0%{?suse_version} && 0%{?suse_version} < 1600 Requires: dbus-1 %else @@ -57,19 +54,16 @@ xwayland-run contains a set of small utilities revolving around running Xwayland and various Wayland compositor headless. - %prep -%autosetup -S git - +%autosetup %build %meson %{?sle_version:-Dcompositor=mutter} %meson_build - %install %meson_install - +%python3_fix_shebang %files %license COPYING @@ -83,4 +77,3 @@ %{_mandir}/man1/xwfb-run.1* %{python3_sitelib}/wlheadless/ - ++++++ xwayland-run-0.0.4.tar.gz -> xwayland-run-0.0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/README.md new/xwayland-run-0.0.6/README.md --- old/xwayland-run-0.0.4/README.md 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/README.md 2026-04-28 17:01:07.000000000 +0200 @@ -29,6 +29,7 @@ * [kwin](https://invent.kde.org/plasma/kwin) * [gnome-kiosk](https://gitlab.gnome.org/GNOME/gnome-kiosk) * [mutter](https://gitlab.gnome.org/GNOME/mutter) + * [phoc](https://gitlab.gnome.org/World/Phosh/phoc) It should be possible to add more compositors to this list by creating additional modules for supporting those. @@ -82,7 +83,7 @@ ``` The compositor must be supported by `wlheadless-run`, which currently includes -the following compositors: `weston`, `cage`, `kwin`, `mutter`, `gnome-kiosk`. +the following compositors: `weston`, `cage`, `kwin`, `mutter`, `gnome-kiosk`, `phoc`. The given compositor arguments must be supported by the specified Wayland compositor and will be added to the command line when starting the compositor. That allows for @@ -219,7 +220,8 @@ ``` The file is searched in `wlheadless/` relative to the paths specified in the -standard environment variables `XDG_DATA_HOME` and `XDG_DATA_DIRS`. +standard environment variables `XDG_CONFIG_HOME`, `XDG_DATA_HOME` and +`XDG_DATA_DIRS`. Building -------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/man/wlheadless-run.man new/xwayland-run-0.0.6/man/wlheadless-run.man --- old/xwayland-run-0.0.4/man/wlheadless-run.man 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/man/wlheadless-run.man 2026-04-28 17:01:07.000000000 +0200 @@ -40,8 +40,8 @@ Sets the default compositor to use. .PP The file is searched in \fBwlheadless\fP directory relative to the paths -specified in the standard environment variables \fBXDG_DATA_HOME\fP and -\fBXDG_DATA_DIRS\fP. +specified in the standard environment variables \fBXDG_CONFIG_HOME\fP, +\fBXDG_DATA_HOME\fP and \fBXDG_DATA_DIRS\fP. .PP .NF [DEFAULT] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/man/xwfb-run.man new/xwayland-run-0.0.6/man/xwfb-run.man --- old/xwayland-run-0.0.4/man/xwfb-run.man 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/man/xwfb-run.man 2026-04-28 17:01:07.000000000 +0200 @@ -72,8 +72,8 @@ Sets the default compositor to use. .PP The file is searched in \fBwlheadless\fP directory relative to the paths -specified in the standard environment variables \fBXDG_DATA_HOME\fP and -\fBXDG_DATA_DIRS\fP. +specified in the standard environment variables \fBXDG_CONFIG_HOME\fP, +\fBXDG_DATA_HOME\fP and \fBXDG_DATA_DIRS\fP. .PP .NF [DEFAULT] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/meson.build new/xwayland-run-0.0.6/meson.build --- old/xwayland-run-0.0.4/meson.build 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/meson.build 2026-04-28 17:01:07.000000000 +0200 @@ -1,5 +1,5 @@ project('xwayland-run', - version: '0.0.4', + version: '0.0.6', license: 'GPL-2.0-or-later', meson_version: '>= 0.60.0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/cage.py new/xwayland-run-0.0.6/src/wlheadless/cage.py --- old/xwayland-run-0.0.4/src/wlheadless/cage.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/cage.py 2026-04-28 17:01:07.000000000 +0200 @@ -44,7 +44,7 @@ def spawn_client(self, command_args): - """Helper function to spawn mutter and the client at once.""" + """Helper function to spawn the compositor and the client at once.""" environ['WLR_BACKENDS'] = 'headless' compositor=self.compositor compositor.extend(self.compositor_args) @@ -54,7 +54,7 @@ def spawn_xwayland(self, xserver_args=[]): - """Helper function to spawn mutter and Xwayland at once.""" + """Helper function to spawn the compositor and Xwayland at once.""" environ['WLR_BACKENDS'] = 'headless' compositor=self.compositor compositor.extend(self.compositor_args) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/gnome-kiosk.py new/xwayland-run-0.0.6/src/wlheadless/gnome-kiosk.py --- old/xwayland-run-0.0.4/src/wlheadless/gnome-kiosk.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/gnome-kiosk.py 2026-04-28 17:01:07.000000000 +0200 @@ -69,7 +69,7 @@ wayland_display = 'wayland-' + format(getpid()) environ['WAYLAND_DISPLAY'] = wayland_display # Add at least one virtual monitor if none is specified - if not '--virtual-monitor' in compositor_args: + if not any('--virtual-monitor' in args for args in compositor_args): compositor_args.extend(['--virtual-monitor', '1024x768']) compositor = self.compositor # The option '--no-x11' might not be supported if mutter was built diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/meson.build new/xwayland-run-0.0.6/src/wlheadless/meson.build --- old/xwayland-run-0.0.4/src/wlheadless/meson.build 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/meson.build 2026-04-28 17:01:07.000000000 +0200 @@ -4,6 +4,7 @@ 'gnome-kiosk.py', 'kwin.py', 'mutter.py', + 'phoc.py', 'weston.py', 'wlheadless_common.py', 'xwayland.py' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/mutter.py new/xwayland-run-0.0.6/src/wlheadless/mutter.py --- old/xwayland-run-0.0.4/src/wlheadless/mutter.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/mutter.py 2026-04-28 17:01:07.000000000 +0200 @@ -83,7 +83,7 @@ def run_compositor(self, compositor_args = []): """Starts the Wayland compositor.""" # Add at least one virtual monitor if none is specified - if not '--virtual-monitor' in compositor_args: + if not any('--virtual-monitor' in args for args in compositor_args): compositor_args.extend(['--virtual-monitor', '1024x768']) # Just save the given args for when we shall actually spawn the compositor. self.compositor_args = compositor_args diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/phoc.py new/xwayland-run-0.0.6/src/wlheadless/phoc.py --- old/xwayland-run-0.0.4/src/wlheadless/phoc.py 1970-01-01 01:00:00.000000000 +0100 +++ new/xwayland-run-0.0.6/src/wlheadless/phoc.py 2026-04-28 17:01:07.000000000 +0200 @@ -0,0 +1,71 @@ +# +# Copyright © 2025 The Phosh Developers +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. +# +# Guido Günther <[email protected]> +# + +""" Abstraction for running a Wayland client on phoc headless. """ + +from os import environ, getpid +from wlheadless.wlheadless_common import WlheadlessCommon +from wlheadless.xwayland import Xwayland + + +class Wlheadless: + + """ + Abstraction for running a Wayland client on phoc headless. + """ + + def __call__(self): + return self + + def __init__(self): + self.compositor_args = [] + self.compositor = [ + 'phoc', + ] + self.wlheadless_common = WlheadlessCommon() + self.xwayland = Xwayland() + + + def spawn_client(self, command_args): + """Helper function to spawn the Wayland client.""" + return self.wlheadless_common.run_command(command_args) + + + def spawn_xwayland(self, xserver_args = []): + """Helper function to spawn Xwayland.""" + xserver_args.extend(['-fullscreen']) + return self.xwayland.spawn_xwayland(xserver_args) + + + def wait_compositor(self): + """Waits for the compositor to start.""" + return self.wlheadless_common.wait_compositor() + + + def run_compositor(self, compositor_args = []): + """Helper function to spawn phoc.""" + wayland_display = 'wayland-' + format(getpid()) + environ['WAYLAND_DISPLAY'] = wayland_display + environ['WLR_BACKENDS'] = 'headless' + compositor = self.compositor + compositor.extend(self.compositor_args) + compositor.extend(['--socket', format(wayland_display)]) + return self.wlheadless_common.run_compositor(compositor) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/weston.py new/xwayland-run-0.0.6/src/wlheadless/weston.py --- old/xwayland-run-0.0.4/src/wlheadless/weston.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/weston.py 2026-04-28 17:01:07.000000000 +0200 @@ -45,6 +45,7 @@ ] self.wlheadless_common = WlheadlessCommon() self.xwayland = Xwayland() + self.options = self.wlheadless_common.get_command_output(['weston', '-h']) def spawn_client(self, command_args): @@ -68,5 +69,9 @@ environ['WAYLAND_DISPLAY'] = wayland_display compositor = self.compositor compositor.extend(compositor_args) + if '--fake-seat' in self.options: + compositor.extend(['--fake-seat']) + else: + print('Warning, "weston" does not support the "--fake-seat" option\n') compositor.extend(['--socket', format(wayland_display)]) return self.wlheadless_common.run_compositor(compositor) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/wlheadless/wlheadless_common.py new/xwayland-run-0.0.6/src/wlheadless/wlheadless_common.py --- old/xwayland-run-0.0.4/src/wlheadless/wlheadless_common.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/wlheadless/wlheadless_common.py 2026-04-28 17:01:07.000000000 +0200 @@ -76,10 +76,17 @@ def get_compositor(self): """ Read the configuration for the default compositor """ dirs = [] - dirs.extend(os.getenv('XDG_DATA_HOME', '').split(':')) - dirs.extend(os.getenv('XDG_DATA_DIRS', '').split(':')) + home = os.getenv('HOME', '') + xdg_config_home = home + '/.config' + xdg_data_home = home + '/.local/share' + xdg_data_dirs = '/usr/local/share/:/usr/share/' + dirs.extend(os.getenv('XDG_CONFIG_HOME', xdg_config_home).split(':')) + dirs.extend(os.getenv('XDG_DATA_HOME', xdg_data_home).split(':')) + dirs.extend(os.getenv('XDG_DATA_DIRS', xdg_data_dirs).split(':')) config = configparser.ConfigParser() - config.read([os.path.join(d, 'wlheadless', 'wlheadless.conf') for d in dirs]) + for d in dirs: + if config.read(os.path.join(d, 'wlheadless', 'wlheadless.conf')): + break return config.get('DEFAULT', 'Compositor', fallback = 'weston') @@ -108,7 +115,7 @@ def wait_compositor(self): """ Waits for the compositor to start """ - for _ in range(0, 3): + for _ in range(0, 150): try: self.__try_connect() return 0 @@ -133,7 +140,10 @@ def __cleanup_tempdir(self): """ Removes our temporary XDG_RUNTIME_DIR directory if empty. """ if self.xdg_runtime_dir: - os.waitpid(-1, 0) + try: + os.waitpid(-1, 0) + except ChildProcessError: + pass try: rmtree(self.xdg_runtime_dir) except OSError as error: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xwayland-run-0.0.4/src/xwfb-run.py new/xwayland-run-0.0.6/src/xwfb-run.py --- old/xwayland-run-0.0.4/src/xwfb-run.py 2024-06-28 15:57:52.000000000 +0200 +++ new/xwayland-run-0.0.6/src/xwfb-run.py 2026-04-28 17:01:07.000000000 +0200 @@ -113,6 +113,7 @@ if args.server_num: xserver_args.append(':' + args.server_num) +saved_stderr_fd = os.dup(sys.stderr.fileno()) with open(args.error_file, 'a') as logfile: os.close(sys.stderr.fileno()) os.dup2(logfile.fileno(), sys.stderr.fileno()) @@ -135,6 +136,8 @@ sleep(args.wait) status = os.EX_DATAERR + os.dup2(saved_stderr_fd, sys.stderr.fileno()) + os.close(saved_stderr_fd) try: status = wlheadless_common.run_command(args.command) except Exception as error:
