You are not logged in.

#1 2024-11-02 15:26:48

tekstryder
Member
Registered: 2013-02-14
Posts: 179

[SOLVED] Pure Wayland Session Gnome packages

NOTE: This thread is not open to opinions regarding X11 or Wayland. Please refrain from such.

I'm curious if any fellow forum folk have yet built a pure Wayland Gnome DE without support for an X11 session nor Xwayland? This is now possible as of Gnome 47.

I don't see anything in the AUR, hence this thread topic. That's understandable tho given it could be a burden to maintain due to user issues.

Not to be outdone by our friends over at Fedora, I'm thinking of giving it a go (locally, not for the AUR).

I'm in no way advocating for this to be the de facto standard for Arch. Xwayland is under active development.

With Gnome 46 and 47 I've been building mutter with meson_options: xwayland=false. Dead simple and mostly functionally equivalent. But, it leaves all the X11-related dependency bits laying around.

Seems the goal of the thread title could be achieved by modifying just 4 packages (gdm, gnome-session, gnome-shell, mutter)?

Last edited by tekstryder (2024-11-25 17:14:34)

Offline

#2 2024-11-02 18:42:24

tekstryder
Member
Registered: 2013-02-14
Posts: 179

Re: [SOLVED] Pure Wayland Session Gnome packages

I'll edit this post with the various PKGBUILD diffs and a couple other changes required, but I've removed the dependency on Xwayland after logging into my rebuilt Gnome 47.1 environment:

$ sudo pacman -Rns xorg-xwayland 
checking dependencies...

Package (8)           Old Version  Net Change

libfontenc            1.1.8-1       -0.03 MiB
libxcvt               0.1.2-2       -0.04 MiB
libxfont2             2.0.7-1       -0.23 MiB
xorg-fonts-encodings  1.1.0-1       -0.61 MiB
xorg-server-common    21.1.14-1     -0.12 MiB
xorg-setxkbmap        1.3.4-2       -0.03 MiB
xorg-xkbcomp          1.4.7-1       -0.21 MiB
xorg-xwayland         24.1.4-1      -2.19 MiB

Total Removed Size:  3.47 MiB

:: Do you want to remove these packages? [Y/n] 
:: Processing package changes...
(1/8) removing xorg-xwayland                                                                                                                                                                     [########################################################################################################################] 100%
(2/8) removing xorg-server-common                                                                                                                                                                [########################################################################################################################] 100%
(3/8) removing xorg-xkbcomp                                                                                                                                                                      [########################################################################################################################] 100%
(4/8) removing xorg-setxkbmap                                                                                                                                                                    [########################################################################################################################] 100%
(5/8) removing libxfont2                                                                                                                                                                         [########################################################################################################################] 100%
(6/8) removing libfontenc                                                                                                                                                                        [########################################################################################################################] 100%
(7/8) removing xorg-fonts-encodings                                                                                                                                                              [########################################################################################################################] 100%
(8/8) removing libxcvt                                                                                                                                                                           [########################################################################################################################] 100%
:: Running post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating fontconfig cache...
(3/3) Updating the desktop file MIME type cache...

EDIT #1: gdm

NOTE: I added a required patch that has since landed after gdm 47.0 was tagged

--- PKGBUILD-GDM-ARCH	2024-11-02 14:47:37.106557798 -0400
+++ PKGBUILD-GDM-MFM	2024-11-02 12:06:58.392470129 -0400
@@ -8,7 +8,7 @@
   libgdm
 )
 pkgver=47.0
-pkgrel=1
+pkgrel=1.1
 pkgdesc="Display manager and login screen"
 url="https://gitlab.gnome.org/GNOME/gdm"
 arch=(x86_64)
@@ -28,10 +28,6 @@
   keyutils
   libcanberra
   libgudev
-  libx11
-  libxau
-  libxcb
-  libxdmcp
   pam
   systemd
   systemd-libs
@@ -46,28 +42,22 @@
   meson
   plymouth
   yelp-tools
-  xorg-server
-  xorg-xhost
-  xorg-xrdb
-)
-optdepends=(
-  'xorg-server: X session support'
-  'xorg-xhost: X session support'
-  'xorg-xrdb: X session support'
 )
+
 checkdepends=(check)
 source=(
   "git+https://gitlab.gnome.org/GNOME/gdm.git#tag=${pkgver/[a-z]/.&}"
-  0001-Xsession-Don-t-start-ssh-agent-by-default.patch
+  088a2af5ffe8c817d64cea020698a58d1059e4ae.patch
 )
 b2sums=('68e4833abdeb0c1f6bf64ddf35b725b06d379e26e7c4f757e5a958786803605bc072e1a224d7249f00bdf752e7db91bb95f81ca792f5a71f428a906a09457d12'
-        'f7e868fdd7cc121433de1572583eb728f4d186cd4f52c6d6c8f2ccf4a3cf781144ff71f704f13571ddb97a1ff4ec55cfa3df25d38737ad19da21e84ddc2d3ee4')
+        'SKIP')
 
 prepare() {
   cd gdm
 
-  # Don't start ssh-agent by default
-  git apply -3 ../0001-Xsession-Don-t-start-ssh-agent-by-default.patch
+  # daemon: Don't check for installed XWayland if Wayland-only 
+  # https://gitlab.gnome.org/GNOME/gdm/-/commit/088a2af5ffe8c817d64cea020698a58d1059e4ae
+  git apply -3 ../088a2af5ffe8c817d64cea020698a58d1059e4ae.patch
 }
 
 build() {
@@ -75,7 +65,8 @@
     -D dbus-sys="/usr/share/dbus-1/system.d"
     -D default-pam-config=arch
     -D default-path="/usr/local/bin:/usr/local/sbin:/usr/bin"
-    -D gdm-xsession=true
+    -D gdm-xsession=false
+    -D x11-support=false
     -D ipv6=true
     -D run-dir=/run/gdm
     -D selinux=disabled
@@ -105,7 +96,6 @@
   backup=(
     etc/gdm/PostSession/Default
     etc/gdm/PreSession/Default
-    etc/gdm/Xsession
     etc/gdm/custom.conf
     etc/pam.d/gdm-autologin
     etc/pam.d/gdm-fingerprint

EDIT #2: gnome-session

NOTE: I pulled in a patch that has since landed after gnome-session 47.0.1 was tagged. Not required.

--- PKGBUILD-GNOME-SESSION-ARCH   2024-11-02 14:56:58.590490409 -0400
+++ PKGBUILD-GNOME-SESSION-MFM    2024-11-02 12:14:58.718977371 -0400
@@ -3,7 +3,7 @@
 
 pkgname=gnome-session
 pkgver=47.0.1
-pkgrel=1
+pkgrel=1.1
 pkgdesc="The GNOME Session Handler"
 url="https://gitlab.gnome.org/GNOME/gnome-session"
 arch=(x86_64)
@@ -23,9 +23,6 @@
   libgl
   libice
   libsm
-  libx11
-  libxcomposite
-  libxtst
   systemd
   systemd-libs
   xdg-desktop-portal-gnome
@@ -42,14 +39,25 @@
   xtrans
 )
 groups=(gnome)
-source=("git+https://gitlab.gnome.org/GNOME/gnome-session.git#tag=${pkgver/[a-z]/.&}")
-b2sums=('66034808c7c395c6c8fd9285dd6cc8602c0f1a65b4b0fd980b3bd4192420b25dc076d69e71a1be79247670504132734bc71e8b05ef5419294e4913d42bb1ff9e')
+source=(
+  "git+https://gitlab.gnome.org/GNOME/gnome-session.git#tag=${pkgver/[a-z]/.&}"
+  6452b8b4f8bb674726ffc547b018be5a4998c7f3.patch
+)
+b2sums=('66034808c7c395c6c8fd9285dd6cc8602c0f1a65b4b0fd980b3bd4192420b25dc076d69e71a1be79247670504132734bc71e8b05ef5419294e4913d42bb1ff9e'
+        'SKIP')
 
 prepare() {
   cd $pkgname
+  
+  # gnome-session wrapper: Avoid running as a subprocess 
+  # https://gitlab.gnome.org/GNOME/gnome-session/-/commit/6452b8b4f8bb674726ffc547b018be5a4998c7f3
+  git apply -3 ../6452b8b4f8bb674726ffc547b018be5a4998c7f3.patch
 }
 
 build() {
+  local meson_options=(
+    -D x11=false
+  )
   arch-meson $pkgname build
   meson compile -C build
 }

EDIT #3: mutter

NOTE: Added build-time dependency on (libxcvt). The cvt binary is used by src/backends/native/gen-default-modes.py at build time to generate a header file containing a list of display modes (drmModeModeInfo).

--- PKGBUILD-MUTTER-ARCH  2024-11-02 15:05:39.720280547 -0400
+++ PKGBUILD-MUTTER-MFM   2024-11-02 15:10:00.338501516 -0400
@@ -9,7 +9,7 @@
   mutter-docs
 )
 pkgver=47.1
-pkgrel=1
+pkgrel=1.1
 pkgdesc="Window manager and compositor for GNOME"
 url="https://gitlab.gnome.org/GNOME/mutter"
 arch=(x86_64)
@@ -46,21 +46,6 @@
   libsm
   libsysprof-capture
   libwacom
-  libx11
-  libxau
-  libxcb
-  libxcomposite
-  libxcursor
-  libxdamage
-  libxext
-  libxfixes
-  libxi
-  libxinerama
-  libxkbcommon
-  libxkbcommon-x11
-  libxkbfile
-  libxrandr
-  libxtst
   mesa
   pango
   pipewire
@@ -69,7 +54,6 @@
   startup-notification
   systemd-libs
   wayland
-  xorg-xwayland
 )
 makedepends=(
   egl-wayland
@@ -77,6 +61,7 @@
   git
   glib2-devel
   gobject-introspection
+  libxcvt
   meson
   sysprof
   wayland-protocols
@@ -101,6 +86,8 @@
     -D libdisplay_info=enabled
     -D tests=disabled
     -D wayland_eglstream=true
+    -D xwayland=false
+    -D x11=false
   )
 
   CFLAGS="${CFLAGS/-O2/-O3} -fno-semantic-interposition"

EDIT #4: gnome-shell

--- PKGBUILD-GNOME-SHELL-ARCH	2024-11-02 15:16:36.307269156 -0400
+++ PKGBUILD-GNOME-SHELL-MFM	2024-11-02 14:45:04.389595871 -0400
@@ -9,7 +9,7 @@
   gnome-shell-docs
 )
 pkgver=47.1
-pkgrel=1
+pkgrel=1.1
 epoch=1
 pkgdesc="Next generation desktop shell"
 url="https://gitlab.gnome.org/GNOME/gnome-shell"
@@ -50,8 +50,6 @@
   libpulse
   libsecret
   libsoup3
-  libx11
-  libxfixes
   mutter
   pango
   polkit

Please let me know if you spot any issues, or have suggestions for improvement!

I'll give it a few days for feedback before marking as solved.

Last edited by tekstryder (2024-11-02 22:24:55)

Offline

#3 2024-11-02 23:05:52

Lone_Wolf
Administrator
From: Netherlands, Europe
Registered: 2005-10-04
Posts: 13,038

Re: [SOLVED] Pure Wayland Session Gnome packages

$ pactree --sync --reverse --depth 1 libx11 | grep gnome
├─gnome-applets
├─gnome-control-center
├─gnome-flashback
├─gnome-mplayer
├─gnome-panel
├─gnome-session
├─gnome-settings-daemon
├─gnome-shell
├─gnome-terminal
├─xdg-desktop-portal-gnome
$ 

you covered gnome-shell, but not the other packages. Maybe settle for gnome without xwayland for now ?


Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.

clean chroot building not flexible enough ?
Try clean chroot manager by graysky

Offline

#4 2024-11-02 23:31:48

tekstryder
Member
Registered: 2013-02-14
Posts: 179

Re: [SOLVED] Pure Wayland Session Gnome packages

Lone_Wolf wrote:

you covered gnome-shell, but not the other packages. Maybe settle for gnome without xwayland for now ?

Remove that | grep gnome and you'll see why I did not pursue libx11 as a whole. smile

I'll adjust the phrasing of my OP/goal slightly. There is no longer an X11 session available with the packages I built. This is in parity with the current Fedora 41 release.

The other packages you listed I've either not got installed and/or have no requirement of an X11 or Xwayland session.

$ pactree --reverse --depth 1 libx11 | grep gnome
├─gnome-control-center
├─gnome-settings-daemon
├─xdg-desktop-portal-gnome

They're all happy in native Wayland. As mentioned in the OP I've been running an Xwayland-less native Wayland session for a couple years now (during Gnome 44 and 45 I used the --no-X11 startup option to block Xwayland in the session... then began building mutter myself for 46 and 47 with meson option).

Also note no more xorg-server*:

$ pacman -Qs xorg
local/xorg-xmessage 1.0.7-1
    Display a message or query in a window
local/xorg-xprop 1.2.7-1 (xorg-apps xorg)
    Property displayer for X
local/xorg-xrdb 1.2.2-2 (xorg-apps xorg)
    X server resource database utility
local/xorg-xset 1.2.5-2 (xorg-apps xorg)
    User preference utility for X
local/xorgproto 2024.1-2
    combined X.Org X11 Protocol headers

EDIT1: Clarified thread title and OP to better reflect goal. Thanks!
EDIT2: A few more snippets regarding package/dependency changes (kinda the whole point of the thread).

Last edited by tekstryder (2024-11-03 01:55:26)

Offline

#5 2024-11-25 17:14:17

tekstryder
Member
Registered: 2013-02-14
Posts: 179

Re: [SOLVED] Pure Wayland Session Gnome packages

As expected, using the pure Wayland packages for Gnome's session has been entirely uneventful.

I'll continue building these packages locally in perpetuity unless/until Arch ever defaults to dropping X11/Xwayland from Gnome packaging officially.


warning: gdm: local (47.0-99) is newer than extra (47.0-2)*
warning: gnome-session: local (47.0.1-1.1) is newer than extra (47.0.1-1)
warning: gnome-shell: local (1:47.2-1.1) is newer than extra (1:47.1-1)
warning: libgdm: local (47.0-99) is newer than extra (47.0-2)
warning: mutter: local (47.2-1.1) is newer than extra (47.1-1)

Now running Gnome 47.2.

* Note GDM has a few new X11-less-related MRs recently merged, so just building from git head for now until next 47 tag or if 47 is branched.

Marking this as [SOLVED].

Offline

Board footer

Powered by FluxBB