Let's start with a quote from an old try:

"Our Xorg server doesn't run under the same uid as the client, the client
needs to create the shared memory area with mode 0666.

We are doing the same in misc/screen-shm. Of course, the consequence
here would be to do it for all Qt applications."

-- https://marc.info/?l=openbsd-ports&m=167110468109188&w=2

There was a veto from sthen@, which was perfectly okay and right.  For
error analysis and to exclude that this function is not used, I need the
shm mode from time to time. I would like to solve it with an environment
variable (QT_OPENBSD_SHM_MODE).

Is that something we can live with?

Feedback, OK?

diff --git a/x11/qt5/qtbase/Makefile b/x11/qt5/qtbase/Makefile
index 7a8676f3713..9fade59872e 100644
--- a/x11/qt5/qtbase/Makefile
+++ b/x11/qt5/qtbase/Makefile
@@ -11,6 +11,7 @@ PKGNAME-mysql =               qt5-mysql-${VERSION}
 PKGNAME-global =       qt5-global-${VERSION}
 PKGNAME-psql =         qt5-postgresql-${VERSION}
 PKGNAME-tds =          qt5-tds-${VERSION}
+REVISION-main =        0
 
 PKG_ARCH-global =      *
 PKG_ARCH-examples =    *
diff --git 
a/x11/qt5/qtbase/patches/patch-src_plugins_platforms_xcb_qxcbbackingstore_cpp 
b/x11/qt5/qtbase/patches/patch-src_plugins_platforms_xcb_qxcbbackingstore_cpp
new file mode 100644
index 00000000000..ea72538e556
--- /dev/null
+++ 
b/x11/qt5/qtbase/patches/patch-src_plugins_platforms_xcb_qxcbbackingstore_cpp
@@ -0,0 +1,15 @@
+The X serrver doesn't run under the same uid as the client, the client needs to
+create the shm mode 0666
+Index: src/plugins/platforms/xcb/qxcbbackingstore.cpp
+--- src/plugins/platforms/xcb/qxcbbackingstore.cpp.orig
++++ src/plugins/platforms/xcb/qxcbbackingstore.cpp
+@@ -406,7 +406,8 @@ void QXcbBackingStoreImage::createShmSegment(size_t se
+ bool QXcbBackingStoreImage::createSystemVShmSegment(xcb_connection_t *c, 
size_t segmentSize,
+                                                     xcb_shm_segment_info_t 
*shmInfo)
+ {
+-    const int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600);
++    const bool isOpenBsdShmMode = 
!QString::fromLocal8Bit(qgetenv("QT_OPENBSD_SHM_MODE")).isEmpty();
++    const int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 
isOpenBsdShmMode ? 0666 : 0600);
+     if (id == -1) {
+         qCWarning(lcQpaXcb, "shmget() failed (%d: %s) for size %zu", errno, 
strerror(errno), segmentSize);
+         return false;

Reply via email to