From patchwork Wed Sep 10 21:28:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69990 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBBFDCAC591 for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) by mx.groups.io with SMTP id smtpd.web10.31041.1757539786893575784 for ; Wed, 10 Sep 2025 14:29:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=bN/g5J3M; spf=pass (domain: ti.com, ip: 198.47.23.234, mailfrom: rs@ti.com) Received: from fllvem-sh03.itg.ti.com ([10.64.41.86]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTOI2227621; Wed, 10 Sep 2025 16:29:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539764; bh=8MRFHLGTD95iyBZgYVfcV9V1FMO6L+KSyiyA+4UiOeY=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=bN/g5J3MAWkG6d04hOkxdU4B899/u/+JrdFBwC5Exd0iNCzDy+gXYtcosxpo4xID3 Lw2Kztt5FxuedCuA3vpfMkFqkDMrW4zmyJeGpUeZRkKT8LtHFIbF2yXFk65U1J3pmJ 6OdKd8iMQXQROJqXbKuf8mdbjst8pkpbLP3NgWmk= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTOrx663505 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:24 -0500 Received: from DLEE214.ent.ti.com (157.170.170.117) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DLEE214.ent.ti.com (157.170.170.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiK1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 1/6] libx11: create tmpfile dir for x11 domain socket Date: Wed, 10 Sep 2025 16:28:42 -0500 Message-ID: <20250910212855.2480561-2-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223240 From: Randolph Sapp Register a volatile directory entry for the x11 domain socket when not using systemd. This will make sure the directory is always created with the correct permissions. Systemd already provides their own tmpfile.d entry for the same behavior. Currently some x11 related applications will create this directory if it doesn't already exist, but this is not true for everything. In addition, if the application in question isn't started as root, it's possible this directory can be owned by a non-root user. This isn't an issue by itself, but it can potentially lead to problems in a multi-user environment. Signed-off-by: Randolph Sapp --- meta/recipes-graphics/xorg-lib/libx11/99_x11 | 1 + meta/recipes-graphics/xorg-lib/libx11_1.8.12.bb | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-graphics/xorg-lib/libx11/99_x11 diff --git a/meta/recipes-graphics/xorg-lib/libx11/99_x11 b/meta/recipes-graphics/xorg-lib/libx11/99_x11 new file mode 100644 index 0000000000..53c5b49d10 --- /dev/null +++ b/meta/recipes-graphics/xorg-lib/libx11/99_x11 @@ -0,0 +1 @@ +d root root 1777 /tmp/.X11-unix none diff --git a/meta/recipes-graphics/xorg-lib/libx11_1.8.12.bb b/meta/recipes-graphics/xorg-lib/libx11_1.8.12.bb index 580e44889d..78713f4ac5 100644 --- a/meta/recipes-graphics/xorg-lib/libx11_1.8.12.bb +++ b/meta/recipes-graphics/xorg-lib/libx11_1.8.12.bb @@ -21,7 +21,8 @@ PE = "1" XORG_PN = "libX11" -SRC_URI += "file://disable_tests.patch" +SRC_URI += "file://disable_tests.patch \ + file://99_x11" SRC_URI[sha256sum] = "fa026f9bb0124f4d6c808f9aef4057aad65e7b35d8ff43951cef0abe06bb9a9a" @@ -35,7 +36,17 @@ PACKAGECONFIG[xcms] = "--enable-xcms,--disable-xcms" PACKAGES =+ "${PN}-xcb" -FILES:${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${datadir}/X11/Xcms.txt" +do_install:append() { + # temporary directory required for x11 domain sockets + # systemd provides their own definition using tmpfiles.d + if ${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', 'false', 'true', d)}; then + install -d ${D}${sysconfdir}/default/volatiles + install -m 0644 ${UNPACKDIR}/99_x11 ${D}${sysconfdir}/default/volatiles/99_x11 + fi +} + +FILES:${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${datadir}/X11/Xcms.txt \ + ${libdir}/tmpfiles.d/x11.conf ${sysconfdir}/default/volatiles/99_x11" FILES:${PN}-xcb += "${libdir}/libX11-xcb.so.*" FILES:${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale" From patchwork Wed Sep 10 21:28:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69991 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD9CDCAC583 for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) by mx.groups.io with SMTP id smtpd.web10.31040.1757539786846794860 for ; Wed, 10 Sep 2025 14:29:47 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@ti.com header.s=ti-com-17Q1 header.b=S2yu+0T1; spf=pass (domain: ti.com, ip: 198.47.23.235, mailfrom: rs@ti.com) Received: from fllvem-sh03.itg.ti.com ([10.64.41.86]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTNZq656962; Wed, 10 Sep 2025 16:29:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539763; bh=z9PDD0BhqxSbNi6OrMM41l8ekitZB/ssaRm3tc6LNEY=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=S2yu+0T1mnsUHCSMgGmV5UTH5S2pJB0FKZfxH0Ofkjt0TRTOzmQafisFMSK8NYFRK r8R7GR4+RzY2mrPnz/6lc646pZSmaz/cPyViB5+Pi748umbLt00SKZIKv6lhQ/Wx0I GTyTjgAvCEaJRKKxLW4IPx950Qx3RKwP4O2NFosU= Received: from DLEE114.ent.ti.com (dlee114.ent.ti.com [157.170.170.25]) by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTNdt663492 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:23 -0500 Received: from DLEE209.ent.ti.com (157.170.170.98) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DLEE209.ent.ti.com (157.170.170.98) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiL1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 2/6] go: fix sigaction usage on i386 platforms Date: Wed, 10 Sep 2025 16:28:43 -0500 Message-ID: <20250910212855.2480561-3-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea X-MIME-Autoconverted: from 8bit to quoted-printable by lelvem-ot02.ext.ti.com id 58ALTNZq656962 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223237 From: Randolph Sapp In upstream the following commit [1] was submitted to resolve issues with sigaction being used in linked libraries with cgo applications. runtime: when using cgo on 386, call C sigaction function This should address the previously reported issues with pam authentication of go applications on related x86 platforms. [1] https://github.com/golang/go/commit/c5737dc21bbac9fbefc35ac9313e66291d66b382 Signed-off-by: Randolph Sapp --- meta/recipes-devtools/go/go-1.25.0.inc | 1 + ...ng-cgo-on-386-call-C-sigaction-funct.patch | 247 ++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 meta/recipes-devtools/go/go/0001-runtime-when-using-cgo-on-386-call-C-sigaction-funct.patch diff --git a/meta/recipes-devtools/go/go-1.25.0.inc b/meta/recipes-devtools/go/go-1.25.0.inc index f562fbb34b..1558b4623d 100644 --- a/meta/recipes-devtools/go/go-1.25.0.inc +++ b/meta/recipes-devtools/go/go-1.25.0.inc @@ -16,5 +16,6 @@ SRC_URI += "\ file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \ file://0010-cmd-go-clear-GOROOT-for-func-ldShared-when-trimpath-.patch \ file://0011-cmd-link-stop-forcing-binutils-gold-dependency-on-aa.patch \ + file://0001-runtime-when-using-cgo-on-386-call-C-sigaction-funct.patch \ " SRC_URI[main.sha256sum] = "4bd01e91297207bfa450ea40d4d5a93b1b531a5e438473b2a06e18e077227225" diff --git a/meta/recipes-devtools/go/go/0001-runtime-when-using-cgo-on-386-call-C-sigaction-funct.patch b/meta/recipes-devtools/go/go/0001-runtime-when-using-cgo-on-386-call-C-sigaction-funct.patch new file mode 100644 index 0000000000..d063e850a8 --- /dev/null +++ b/meta/recipes-devtools/go/go/0001-runtime-when-using-cgo-on-386-call-C-sigaction-funct.patch @@ -0,0 +1,247 @@ +From c5737dc21bbac9fbefc35ac9313e66291d66b382 Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Fri, 5 Sep 2025 22:24:37 -0700 +Subject: [PATCH] runtime: when using cgo on 386, call C sigaction function + +On 386 the C sigaction function assumes that the caller does not set +the SA_RESTORER flag. It does not copy the C sa_restorer field to +the kernel sa_restorer field. The effect is that the kernel sees +the SA_RESTORER flag but a NULL sa_restorer field, and the program +crashes when returning from a signal handler. + +On the other hand, the C sigaction function will return the SA_RESTORER +flag and the sa_restorer field stored in the kernel. + +This means that if the Go runtime installs a signal handler, +with SA_RESTORER as is required when calling the kernel, +and the Go program calls C code that calls the C sigaction function +to query the current signal handler, that C code will get a result +that it can't pass back to sigaction. + +This CL fixes the problem by using the C sigaction function +for 386 programs that use cgo. This reuses the functionality +used on amd64 and other GOARCHs to support the race detector. + +See #75253, or runtime/testdata/testprogcgo/eintr.go, for sample +code that used to fail on 386. No new test case is required, +we just remove the skip we used to have for eintr.go. + +Fixes #75253 + +Change-Id: I803059b1fb9e09e9fbb43f68eccb6a59a92c2991 +Reviewed-on: https://go-review.googlesource.com/c/go/+/701375 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Cherry Mui +Reviewed-by: Dmitri Shuralyov +Auto-Submit: Ian Lance Taylor +Upstream-Status: Backport [https://github.com/golang/go/commit/c5737dc21bbac9fbefc35ac9313e66291d66b382] +--- + src/runtime/cgo/gcc_sigaction.c | 8 ++++---- + src/runtime/cgo/sigaction.go | 2 +- + src/runtime/cgo_sigaction.go | 6 +++++- + src/runtime/crash_cgo_test.go | 11 ----------- + src/runtime/os_freebsd.go | 6 ++++++ + src/runtime/os_linux.go | 18 +++++++++++++++++- + src/runtime/sigaction.go | 2 +- + src/runtime/sys_linux_386.s | 19 +++++++++++++++++++ + 8 files changed, 53 insertions(+), 19 deletions(-) + +diff --git a/src/runtime/cgo/gcc_sigaction.c b/src/runtime/cgo/gcc_sigaction.c +index 7cbef7db11..ad48a88dc1 100644 +--- a/src/runtime/cgo/gcc_sigaction.c ++++ b/src/runtime/cgo/gcc_sigaction.c +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build linux && (amd64 || arm64 || loong64 || ppc64le) ++//go:build linux && (386 || amd64 || arm64 || loong64 || ppc64le) + + #include + #include +@@ -17,7 +17,7 @@ + // to and from struct sigaction — are specific to ${goos}/${goarch}. + typedef struct { + uintptr_t handler; +- uint64_t flags; ++ unsigned long flags; + #ifdef __loongarch__ + uint64_t mask; + uintptr_t restorer; +@@ -57,7 +57,7 @@ x_cgo_sigaction(intptr_t signum, const go_sigaction_t *goact, go_sigaction_t *ol + sigaddset(&act.sa_mask, (int)(i+1)); + } + } +- act.sa_flags = (int)(goact->flags & ~(uint64_t)SA_RESTORER); ++ act.sa_flags = (int)(goact->flags & ~(unsigned long)SA_RESTORER); + } + + ret = sigaction((int)signum, goact ? &act : NULL, oldgoact ? &oldact : NULL); +@@ -79,7 +79,7 @@ x_cgo_sigaction(intptr_t signum, const go_sigaction_t *goact, go_sigaction_t *ol + oldgoact->mask |= (uint64_t)(1)<flags = (uint64_t)oldact.sa_flags; ++ oldgoact->flags = (unsigned long)oldact.sa_flags; + } + + _cgo_tsan_release(); +diff --git a/src/runtime/cgo/sigaction.go b/src/runtime/cgo/sigaction.go +index dc3f5fd255..90034bad32 100644 +--- a/src/runtime/cgo/sigaction.go ++++ b/src/runtime/cgo/sigaction.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build (linux && (amd64 || arm64 || loong64 || ppc64le)) || (freebsd && amd64) ++//go:build (linux && (386 || amd64 || arm64 || loong64 || ppc64le)) || (freebsd && amd64) + + package cgo + +diff --git a/src/runtime/cgo_sigaction.go b/src/runtime/cgo_sigaction.go +index 5c644587f0..f725dbef4d 100644 +--- a/src/runtime/cgo_sigaction.go ++++ b/src/runtime/cgo_sigaction.go +@@ -3,8 +3,10 @@ + // license that can be found in the LICENSE file. + + // Support for sanitizers. See runtime/cgo/sigaction.go. ++// Also used on linux/386 to clear the SA_RESTORER flag ++// when using cgo; see issue #75253. + +-//go:build (linux && (amd64 || arm64 || loong64 || ppc64le)) || (freebsd && amd64) ++//go:build (linux && (386 || amd64 || arm64 || loong64 || ppc64le)) || (freebsd && amd64) + + package runtime + +@@ -42,6 +44,8 @@ func sigaction(sig uint32, new, old *sigactiont) { + + var ret int32 + ++ fixSigactionForCgo(new) ++ + var g *g + if mainStarted { + g = getg() +diff --git a/src/runtime/crash_cgo_test.go b/src/runtime/crash_cgo_test.go +index c5d7303261..b77ff8dafd 100644 +--- a/src/runtime/crash_cgo_test.go ++++ b/src/runtime/crash_cgo_test.go +@@ -842,17 +842,6 @@ func TestEINTR(t *testing.T) { + switch runtime.GOOS { + case "plan9", "windows": + t.Skipf("no EINTR on %s", runtime.GOOS) +- case "linux": +- if runtime.GOARCH == "386" { +- // On linux-386 the Go signal handler sets +- // a restorer function that is not preserved +- // by the C sigaction call in the test, +- // causing the signal handler to crash when +- // returning the normal code. The test is not +- // architecture-specific, so just skip on 386 +- // rather than doing a complicated workaround. +- t.Skip("skipping on linux-386; C sigaction does not preserve Go restorer") +- } + } + if runtime.GOOS == "freebsd" && race.Enabled { + t.Skipf("race + cgo freebsd not supported. See https://go.dev/issue/73788.") +diff --git a/src/runtime/os_freebsd.go b/src/runtime/os_freebsd.go +index ab859cfb47..68d895b95d 100644 +--- a/src/runtime/os_freebsd.go ++++ b/src/runtime/os_freebsd.go +@@ -457,6 +457,12 @@ func sysSigaction(sig uint32, new, old *sigactiont) { + } + } + ++// fixSigactionForCgo is needed for Linux. ++// ++//go:nosplit ++func fixSigactionForCgo(new *sigactiont) { ++} ++ + // asmSigaction is implemented in assembly. + // + //go:noescape +diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go +index c9d25a5be8..f9fe1b5f33 100644 +--- a/src/runtime/os_linux.go ++++ b/src/runtime/os_linux.go +@@ -486,7 +486,8 @@ func setsig(i uint32, fn uintptr) { + sigfillset(&sa.sa_mask) + // Although Linux manpage says "sa_restorer element is obsolete and + // should not be used". x86_64 kernel requires it. Only use it on +- // x86. ++ // x86. Note that on 386 this is cleared when using the C sigaction ++ // function via cgo; see fixSigactionForCgo. + if GOARCH == "386" || GOARCH == "amd64" { + sa.sa_restorer = abi.FuncPCABI0(sigreturn__sigaction) + } +@@ -562,6 +563,21 @@ func sysSigaction(sig uint32, new, old *sigactiont) { + //go:noescape + func rt_sigaction(sig uintptr, new, old *sigactiont, size uintptr) int32 + ++// fixSigactionForCgo is called when we are using cgo to call the ++// C sigaction function. On 386 the C function does not expect the ++// SA_RESTORER flag to be set, and in some cases will fail if it is set: ++// it will pass the SA_RESTORER flag to the kernel without passing ++// the sa_restorer field. Since the C function will handle SA_RESTORER ++// for us, we need not pass it. See issue #75253. ++// ++//go:nosplit ++func fixSigactionForCgo(new *sigactiont) { ++ if GOARCH == "386" && new != nil { ++ new.sa_flags &^= _SA_RESTORER ++ new.sa_restorer = 0 ++ } ++} ++ + func getpid() int + func tgkill(tgid, tid, sig int) + +diff --git a/src/runtime/sigaction.go b/src/runtime/sigaction.go +index 2027ae80bf..1a99f7f3ec 100644 +--- a/src/runtime/sigaction.go ++++ b/src/runtime/sigaction.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-//go:build (linux && !amd64 && !arm64 && !loong64 && !ppc64le) || (freebsd && !amd64) ++//go:build (linux && !386 && !amd64 && !arm64 && !loong64 && !ppc64le) || (freebsd && !amd64) + + package runtime + +diff --git a/src/runtime/sys_linux_386.s b/src/runtime/sys_linux_386.s +index d53be243fe..8e832687e0 100644 +--- a/src/runtime/sys_linux_386.s ++++ b/src/runtime/sys_linux_386.s +@@ -410,6 +410,25 @@ TEXT runtime·rt_sigaction(SB),NOSPLIT,$0 + MOVL AX, ret+16(FP) + RET + ++// Call the function stored in _cgo_sigaction using the GCC calling convention. ++TEXT runtime·callCgoSigaction(SB),NOSPLIT,$0-16 ++ MOVL _cgo_sigaction(SB), AX ++ MOVL sig+0(FP), BX ++ MOVL new+4(FP), CX ++ MOVL old+8(FP), DX ++ MOVL SP, SI // align stack to call C function ++ SUBL $32, SP ++ ANDL $~15, SP ++ MOVL BX, 0(SP) ++ MOVL CX, 4(SP) ++ MOVL DX, 8(SP) ++ MOVL SI, 12(SP) ++ CALL AX ++ MOVL 12(SP), BX ++ MOVL BX, SP ++ MOVL AX, ret+12(FP) ++ RET ++ + TEXT runtime·sigfwd(SB),NOSPLIT,$12-16 + MOVL fn+0(FP), AX + MOVL sig+4(FP), BX +-- +2.51.0 + From patchwork Wed Sep 10 21:28:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69989 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFF0CCAC58E for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) by mx.groups.io with SMTP id smtpd.web10.31042.1757539786894071637 for ; Wed, 10 Sep 2025 14:29:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=caVG8fLq; spf=pass (domain: ti.com, ip: 198.47.23.234, mailfrom: rs@ti.com) Received: from fllvem-sh03.itg.ti.com ([10.64.41.86]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTOBi227617; Wed, 10 Sep 2025 16:29:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539764; bh=EIfBgOsq6dMEutbxJbhyQauX6xZ2qss/f9wnOTNVcAc=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=caVG8fLqVI/EGfctBYaSGsKvD1rUpsoeAfYeYeegE9eZX0wL8xZ5BEEoT6/bOHgth DsUKDd83TC/JVxbZV9t6recxF7wwqhemYLorE4CLQeSdr+A850xJZqsWS+ylPGYMAM 8rqlf/1LOyKm7fG1m4mscBjfriCMDOvc2VVbudtg= Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35]) by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTNeT663493 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:23 -0500 Received: from DFLE210.ent.ti.com (10.64.6.68) by DFLE114.ent.ti.com (10.64.6.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE210.ent.ti.com (10.64.6.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiM1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 3/6] emptty: add version 0.14.0 Date: Wed, 10 Sep 2025 16:28:44 -0500 Message-ID: <20250910212855.2480561-4-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223238 From: Randolph Sapp Add emptty, a "Dead simple CLI Display Manager on TTY". This is a relatively lightweight display manager that supports x11 as well as wayland through both a CLI and an automatic login mechanism. This can effectively replace the custom init scripts for both x11 (xserver-nodm-init) and wayland (weston-init) with a single tool with more verbose logging capabilities. This is split into two recipes. The emptty package provides the binary and various agnostic configs while the emptty-conf package provides the default configuration for the application itself. This RPROVIDES virtual-emptty-conf, allowing other recipes to provide their own configurations to override the default behavior. Signed-off-by: Randolph Sapp --- .../conf/distro/include/default-providers.inc | 1 + meta/conf/distro/include/maintainers.inc | 2 + meta/recipes-graphics/emptty/emptty-conf.bb | 14 +++++ meta/recipes-graphics/emptty/emptty.inc | 26 +++++++++ .../recipes-graphics/emptty/emptty/emptty.tab | 1 + meta/recipes-graphics/emptty/emptty/pamconf | 10 ++++ meta/recipes-graphics/emptty/emptty_0.14.0.bb | 53 +++++++++++++++++++ 7 files changed, 107 insertions(+) create mode 100644 meta/recipes-graphics/emptty/emptty-conf.bb create mode 100644 meta/recipes-graphics/emptty/emptty.inc create mode 100644 meta/recipes-graphics/emptty/emptty/emptty.tab create mode 100644 meta/recipes-graphics/emptty/emptty/pamconf create mode 100644 meta/recipes-graphics/emptty/emptty_0.14.0.bb diff --git a/meta/conf/distro/include/default-providers.inc b/meta/conf/distro/include/default-providers.inc index 3f113543cd..820a5d1342 100644 --- a/meta/conf/distro/include/default-providers.inc +++ b/meta/conf/distro/include/default-providers.inc @@ -69,3 +69,4 @@ PREFERRED_PROVIDER_virtual/nativesdk-libsdl2 ?= "nativesdk-libsdl2" PREFERRED_RPROVIDER_virtual-libegl-icd ?= "mesa" PREFERRED_RPROVIDER_virtual-libglx-icd ?= "mesa" PREFERRED_RPROVIDER_virtual-x-terminal-emulator ?= "rxvt-unicode" +PREFERRED_RPROVIDER_virtual-emptty-conf ?= "emptty-conf" diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 8f23091256..fb2d347521 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -171,6 +171,8 @@ RECIPE_MAINTAINER:pn-efivar = "Ross Burton " RECIPE_MAINTAINER:pn-efibootmgr = "Ross Burton " RECIPE_MAINTAINER:pn-elfutils = "Zang Ruochen " RECIPE_MAINTAINER:pn-ell = "Zang Ruochen " +RECIPE_MAINTAINER:pn-emptty = "Randolph Sapp " +RECIPE_MAINTAINER:pn-emptty-conf = "Randolph Sapp " RECIPE_MAINTAINER:pn-enchant2 = "Anuj Mittal " RECIPE_MAINTAINER:pn-encodings = "Unassigned " RECIPE_MAINTAINER:pn-epiphany = "Unassigned " diff --git a/meta/recipes-graphics/emptty/emptty-conf.bb b/meta/recipes-graphics/emptty/emptty-conf.bb new file mode 100644 index 0000000000..0aacb086cd --- /dev/null +++ b/meta/recipes-graphics/emptty/emptty-conf.bb @@ -0,0 +1,14 @@ +require emptty.inc + +SUMMARY += " (Default config)" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install () { + oe_runmake -C ${S}/src/${GO_IMPORT} DESTDIR=${D} install-config +} + +FILES:${PN}-conf = "${sysconfdir}/emptty/conf" +CONFFILES:${PN}-conf = "${sysconfdir}/emptty/conf" +RPROVIDES:${PN}-conf += "virtual-emptty-conf" diff --git a/meta/recipes-graphics/emptty/emptty.inc b/meta/recipes-graphics/emptty/emptty.inc new file mode 100644 index 0000000000..11d5770f3a --- /dev/null +++ b/meta/recipes-graphics/emptty/emptty.inc @@ -0,0 +1,26 @@ +SUMMARY = "Dead simple CLI Display Manager on TTY" +DESCRIPTION = "Emptty is a simple display manager with a command line greeter \ +It supports both X11 and Wayland sessions, exporting required variables and \ +creating user paths as necessary." + +HOMEPAGE = "https://github.com/tvrzna/emptty" +BUGTRACKER = "https://github.com/tvrzna/emptty/issues" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=d1e4d12c7d1d17367ba5668706a405ba" + +S = "${UNPACKDIR}" + +FILESEXTRAPATHS:append = ":${THISDIR}/emptty" + +GO_IMPORT = "github.com/tvrzna/emptty" +GO_IMPORT_pam = "github.com/msteinert/pam" +SRC_URI = "\ + git://${GO_IMPORT}.git;protocol=https;branch=master;destsuffix=src/${GO_IMPORT} \ + git://${GO_IMPORT_pam}.git;protocol=https;branch=master;name=pam;destsuffix=src/${GO_IMPORT_pam} \ + file://pamconf \ + file://emptty.tab \ + " +SRCREV = "d162bef75fadc8ae1d8e33dbb3de5e2795a196e0" +SRCREV_pam = "50ded1b0e7864b9bf75005eb945a8ec826bcf69d" + +SRCREV_FORMAT .= "_pam" diff --git a/meta/recipes-graphics/emptty/emptty/emptty.tab b/meta/recipes-graphics/emptty/emptty/emptty.tab new file mode 100644 index 0000000000..6359c7224d --- /dev/null +++ b/meta/recipes-graphics/emptty/emptty/emptty.tab @@ -0,0 +1 @@ +7:5:respawn:/usr/bin/emptty -t 7 -d diff --git a/meta/recipes-graphics/emptty/emptty/pamconf b/meta/recipes-graphics/emptty/emptty/pamconf new file mode 100644 index 0000000000..9cbfd6c4a5 --- /dev/null +++ b/meta/recipes-graphics/emptty/emptty/pamconf @@ -0,0 +1,10 @@ +#%PAM-1.0 +auth sufficient pam_succeed_if.so user ingroup nopasswdlogin +auth include common-auth +-auth optional pam_gnome_keyring.so +-auth optional pam_kwallet5.so +account include common-account +session include common-session +-session optional pam_gnome_keyring.so auto_start +-session optional pam_kwallet5.so auto_start force_run +password include common-password diff --git a/meta/recipes-graphics/emptty/emptty_0.14.0.bb b/meta/recipes-graphics/emptty/emptty_0.14.0.bb new file mode 100644 index 0000000000..11d306a56d --- /dev/null +++ b/meta/recipes-graphics/emptty/emptty_0.14.0.bb @@ -0,0 +1,53 @@ +require emptty.inc + +PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam x11', d)}" +PACKAGECONFIG[pam] = ",,libpam,pam-plugin-succeed-if" +PACKAGECONFIG[x11] = ",,virtual/libx11" + +DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'pam', '', 'virtual/crypt', d)}" + +GO_TAGS = "" +GO_TAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'pam', '', ',nopam', d)}" +GO_TAGS:append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', '', ',noxlib', d)}" + +GOBUILDFLAGS:append = " -tags=${GO_TAGS}" + +export GO111MODULE = "off" + +inherit go + +DEPENDS += "gzip" + +do_install () { + # general collateral + install -Dm755 ${B}/${GO_BUILD_BINDIR}/emptty ${D}${bindir}/emptty + install -d ${D}${mandir}/man1 + gzip -cn ${S}/src/${GO_IMPORT}/res/emptty.1 > ${D}${mandir}/man1/emptty.1.gz + + # pam config + if "${@bb.utils.contains('PACKAGECONFIG','pam','true','false',d)}" + then + install -Dm644 ${S}/pamconf ${D}${sysconfdir}/pam.d/emptty + fi + + # init services + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)} + then + oe_runmake -C ${S}/src/${GO_IMPORT} DESTDIR=${D} install-systemd + else + install -Dm644 ${S}/emptty.tab ${D}${sysconfdir}/inittab.d/emptty.tab + fi +} + +FILES:${PN} = "\ + ${systemd_system_unitdir}/emptty.service \ + ${sysconfdir}/inittab.d/emptty.tab \ + ${bindir}/emptty \ + ${mandir}/man1/emptty.1.gz \ + ${sysconfdir}/pam.d/emptty \ +" + +RDEPENDS:${PN} += "virtual-emptty-conf" +SYSTEMD_SERVICE:${PN} = "emptty.service" + +inherit systemd From patchwork Wed Sep 10 21:28:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69992 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id DAF81CAC592 for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) by mx.groups.io with SMTP id smtpd.web11.30848.1757539792760385686 for ; Wed, 10 Sep 2025 14:29:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=kjMqiwHV; spf=pass (domain: ti.com, ip: 198.47.19.245, mailfrom: rs@ti.com) Received: from lelvem-sh01.itg.ti.com ([10.180.77.71]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTONM147177; Wed, 10 Sep 2025 16:29:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539764; bh=jnqT38CYOF2D4H85gbfl3zi/XoUWqTvOspbQMa+wKE0=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=kjMqiwHVd4i6j3+FScEFjZPPtcOqqiLxc9ajqPu9D4YGTt+zDs98niZoTqm/OvdoH mCn1Z/y3VMQ4XTArSF/5QsremBtDVYfBC2ZqJ54ZzaHbXmZ9mXSgKH6j9C+wVoAigr FATYhAAXd97VeCSmnMm1djabna/TXUwGF1ekO1hw= Received: from DFLE113.ent.ti.com (dfle113.ent.ti.com [10.64.6.34]) by lelvem-sh01.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTNYd016900 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:23 -0500 Received: from DFLE215.ent.ti.com (10.64.6.73) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE215.ent.ti.com (10.64.6.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiN1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 4/6] weston-init: convert to virtual-emptty-conf Date: Wed, 10 Sep 2025 16:28:45 -0500 Message-ID: <20250910212855.2480561-5-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223243 From: Randolph Sapp Convert this script package into a simple config for emptty using the same weston user but leveraging the nopasswdlogin session provided by emptty. Runtime provide virtual-emptty-conf as we need to set parameters for the default session. Signed-off-by: Randolph Sapp --- meta/lib/oeqa/runtime/cases/weston.py | 18 +++-- meta/recipes-graphics/wayland/weston-init.bb | 61 +++------------ .../wayland/weston-init/emptty.conf | 77 +++++++++++++++++++ .../recipes-graphics/wayland/weston-init/init | 54 ------------- .../wayland/weston-init/weston-autologin | 11 --- .../wayland/weston-init/weston-socket.sh | 20 ----- .../wayland/weston-init/weston-start | 76 ------------------ .../wayland/weston-init/weston.env | 0 .../wayland/weston-init/weston.service | 71 ----------------- .../wayland/weston-init/weston.socket | 14 ---- 10 files changed, 101 insertions(+), 301 deletions(-) create mode 100644 meta/recipes-graphics/wayland/weston-init/emptty.conf delete mode 100644 meta/recipes-graphics/wayland/weston-init/init delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston-autologin delete mode 100755 meta/recipes-graphics/wayland/weston-init/weston-socket.sh delete mode 100755 meta/recipes-graphics/wayland/weston-init/weston-start delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.env delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.service delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.socket diff --git a/meta/lib/oeqa/runtime/cases/weston.py b/meta/lib/oeqa/runtime/cases/weston.py index ee4d336482..69be1f65e3 100644 --- a/meta/lib/oeqa/runtime/cases/weston.py +++ b/meta/lib/oeqa/runtime/cases/weston.py @@ -37,7 +37,7 @@ class WestonTest(OERuntimeTestCase): def run_weston_init(self): if 'systemd' in self.tc.td['VIRTUAL-RUNTIME_init_manager']: - self.target.run('systemd-run --collect --unit=weston-ptest.service --uid=0 -p PAMName=login -p TTYPath=/dev/tty6 -E XDG_RUNTIME_DIR=/tmp -E WAYLAND_DISPLAY=wayland-0 /usr/bin/weston --socket=wayland-1 --log=%s' % self.weston_log_file) + self.target.run(self.get_weston_command('systemd-run --collect --unit=weston-ptest.service --uid=0 -p PAMName=login -p TTYPath=/dev/tty6 -E XDG_RUNTIME_DIR -E WAYLAND_DISPLAY /usr/bin/weston --socket=wayland-2 --log=%s' % self.weston_log_file)) else: self.target.run(self.get_weston_command('openvt -- weston --socket=wayland-2 --log=%s' % self.weston_log_file)) @@ -55,12 +55,18 @@ class WestonTest(OERuntimeTestCase): @OEHasPackage(['wayland-utils']) def test_wayland_info(self): - if 'systemd' in self.tc.td['VIRTUAL-RUNTIME_init_manager']: - command = 'XDG_RUNTIME_DIR=/run wayland-info' - else: - command = self.get_weston_command('wayland-info') + command = self.get_weston_command('wayland-info') status, output = self.target.run(command) - self.assertEqual(status, 0, msg='wayland-info error: %s' % output) + msg = 'wayland-info error: %s' % output + + # dump last 20 lines of emptty log in case of failure + log_cmd = 'tail -n 20 /var/log/emptty/7.log' + msg += '\n\n===== start: snippet =====\n\n' + msg += 'file: /var/log/emptty/7.log\n\n' + msg += '\n\n%s\n\n' % self.target.run(log_cmd)[1] + msg += '\n\n===== end: snippet =====\n\n' + + self.assertEqual(status, 0, msg=msg) @OEHasPackage(['weston']) def test_weston_can_initialize_new_wayland_compositor(self): diff --git a/meta/recipes-graphics/wayland/weston-init.bb b/meta/recipes-graphics/wayland/weston-init.bb index fc817d113f..6caf2a0387 100644 --- a/meta/recipes-graphics/wayland/weston-init.bb +++ b/meta/recipes-graphics/wayland/weston-init.bb @@ -1,17 +1,13 @@ -SUMMARY = "Startup script and systemd unit file for the Weston Wayland compositor" +SUMMARY = "Autologin package for the Weston Wayland compositor" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" PACKAGE_ARCH = "${MACHINE_ARCH}" -SRC_URI = "file://init \ - file://weston.env \ +SRC_URI = "\ file://weston.ini \ - file://weston.service \ - file://weston.socket \ - file://weston-socket.sh \ - file://weston-autologin \ - file://weston-start" + file://emptty.conf \ +" S = "${UNPACKDIR}" @@ -27,32 +23,8 @@ DEFAULTBACKEND ??= "" DEFAULTBACKEND:qemuall ?= "drm" do_install() { - # Install weston-start script - if [ "${VIRTUAL-RUNTIME_init_manager}" != "systemd" ]; then - install -Dm755 ${S}/weston-start ${D}${bindir}/weston-start - sed -i 's,@DATADIR@,${datadir},g' ${D}${bindir}/weston-start - sed -i 's,@LOCALSTATEDIR@,${localstatedir},g' ${D}${bindir}/weston-start - install -Dm755 ${S}/init ${D}/${sysconfdir}/init.d/weston - sed -i 's#ROOTHOME#${ROOT_HOME}#' ${D}/${sysconfdir}/init.d/weston - fi - - # Install Weston systemd service - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - install -D -p -m0644 ${S}/weston.service ${D}${systemd_system_unitdir}/weston.service - install -D -p -m0644 ${S}/weston.socket ${D}${systemd_system_unitdir}/weston.socket - install -D -p -m0644 ${S}/weston-socket.sh ${D}${sysconfdir}/profile.d/weston-socket.sh - sed -i -e s:/etc:${sysconfdir}:g \ - -e s:/usr/bin:${bindir}:g \ - -e s:/var:${localstatedir}:g \ - ${D}${systemd_system_unitdir}/weston.service - fi - - if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then - install -D -p -m0644 ${S}/weston-autologin ${D}${sysconfdir}/pam.d/weston-autologin - fi - install -D -p -m0644 ${S}/weston.ini ${D}${sysconfdir}/xdg/weston/weston.ini - install -Dm644 ${S}/weston.env ${D}${sysconfdir}/default/weston + install -D -p -m0644 ${S}/emptty.conf ${D}${sysconfdir}/emptty/conf if [ -n "${DEFAULTBACKEND}" ]; then sed -i -e "/^\[core\]/a backend=${DEFAULTBACKEND}-backend.so" ${D}${sysconfdir}/xdg/weston/weston.ini @@ -73,9 +45,7 @@ do_install() { install -dm 755 -o weston -g weston ${D}/home/weston } -INHIBIT_UPDATERCD_BBCLASS = "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', '1', '', d)}" - -inherit update-rc.d systemd useradd +inherit useradd USERADD_PACKAGES = "${PN}" @@ -83,23 +53,16 @@ USERADD_PACKAGES = "${PN}" # require ${THISDIR}/required-distro-features.inc -RDEPENDS:${PN} = "weston kbd ${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'weston-xwayland', '', d)}" - -INITSCRIPT_NAME = "weston" -INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ." +RDEPENDS:${PN} = "emptty weston kbd ${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'weston-xwayland', '', d)}" FILES:${PN} += "\ ${sysconfdir}/xdg/weston/weston.ini \ - ${sysconfdir}/profile.d/weston-socket.sh \ - ${systemd_system_unitdir}/weston.service \ - ${systemd_system_unitdir}/weston.socket \ - ${sysconfdir}/default/weston \ - ${sysconfdir}/pam.d/ \ + ${sysconfdir}/emptty/conf \ /home/weston \ " -CONFFILES:${PN} += "${sysconfdir}/xdg/weston/weston.ini ${sysconfdir}/default/weston" +CONFFILES:${PN} += "${sysconfdir}/xdg/weston/weston.ini ${sysconfdir}/emptty/conf" +RPROVIDES:${PN} += "virtual-emptty-conf" -SYSTEMD_SERVICE:${PN} = "weston.service weston.socket" -USERADD_PARAM:${PN} = "--home /home/weston --shell /bin/sh --user-group -G video,input,render,seat,wayland weston" -GROUPADD_PARAM:${PN} = "-r wayland; -r render; -r seat" +USERADD_PARAM:${PN} = "--home /home/weston --shell /bin/sh --user-group -G video,input,render,seat,nopasswdlogin weston" +GROUPADD_PARAM:${PN} = "-r nopasswdlogin; -r render; -r seat" diff --git a/meta/recipes-graphics/wayland/weston-init/emptty.conf b/meta/recipes-graphics/wayland/weston-init/emptty.conf new file mode 100644 index 0000000000..1918cc02a7 --- /dev/null +++ b/meta/recipes-graphics/wayland/weston-init/emptty.conf @@ -0,0 +1,77 @@ +# TTY, where emptty will start. +TTY_NUMBER=7 + +# Enables switching to defined TTY number. +SWITCH_TTY=true + +# Enables printing of /etc/issue in daemon mode. +PRINT_ISSUE=true + +# Enables printing of default motd, /etc/emptty/motd or /etc/emptty/motd-gen.sh. +PRINT_MOTD=true + +# Preselected user, if AUTOLOGIN is enabled, this user is logged in. +DEFAULT_USER=weston + +# Enables Autologin, if DEFAULT_USER is defined and part of nopasswdlogin group. Possible values are "true" or "false". +AUTOLOGIN=true + +# The default session used, if Autologin is enabled. If session is not found in list of session, it proceeds to manual selection. +AUTOLOGIN_SESSION=Weston + +# If Autologin is enabled and session does not start correctly, the number of retries in short period is kept to eventually stop the infinite loop of restarts. -1 is for infinite retries, 0 is for no retry. +# AUTOLOGIN_MAX_RETRY=2 + +# Default LANG, if user does not have set own in init script. +#LANG=en_US.UTF-8 + +# Starts desktop with calling "dbus-launch". +DBUS_LAUNCH=true + +# Starts Xorg desktop with calling "~/.xinitrc" script, if is true, file exists and selected WM/DE is Xorg session, it overrides DBUS_LAUNCH. +XINITRC_LAUNCH=false + +# Prints available WM/DE each on new line instead of printing on single line. +VERTICAL_SELECTION=false + +# Defines the way, how is logging handled. Possible values are "rotate", "appending" or "disabled". +#LOGGING=rotate + +# Overrides path of log file +#LOGGING_FILE=/var/log/emptty/[TTY_NUMBER].log + +# Arguments passed to Xorg server. +#XORG_ARGS= + +# Allows to use dynamic motd script to generate custom MOTD. +#DYNAMIC_MOTD=false + +# Allows to override default path to dynamic motd. +#DYNAMIC_MOTD_PATH=/etc/emptty/motd-gen.sh + +# Allows to override default path to static motd. +#MOTD_PATH=/etc/emptty/motd + +# Foreground color, available only in daemon mode. +#FG_COLOR=LIGHT_BLACK + +# Background color, available only in daemon mode. +#BG_COLOR=BLACK + +# Enables numlock in daemon mode. Possible values are "true" or "false". +#ENABLE_NUMLOCK=false + +# Defines the way, how is logging of session errors handled. Possible values are "rotate", "appending" or "disabled". +SESSION_ERROR_LOGGING=rotate + +# Overrides path of session errors log file +#SESSION_ERROR_LOGGING_FILE=/var/log/emptty/session-errors.[TTY_NUMBER].log + +# If set true, it will not use `.emptty-xauth` file, but the standard `~/.Xauthority` file. This allows to handle xauth issues. +#DEFAULT_XAUTHORITY=false + +#If set true, Xorg will be started as rootless, if system allows and emptty is running in daemon mode. +#ROOTLESS_XORG=false + +#If set true, environmental groups are printed to differ Xorg/Wayland/Custom/UserCustom desktops. +IDENTIFY_ENVS=false diff --git a/meta/recipes-graphics/wayland/weston-init/init b/meta/recipes-graphics/wayland/weston-init/init deleted file mode 100644 index a5c54e001e..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/init +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh -# -### BEGIN INIT INFO -# Provides: weston -# Required-Start: $local_fs $remote_fs -# Required-Stop: $local_fs $remote_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -### END INIT INFO - -if test -e /etc/default/weston ; then - . /etc/default/weston -fi - -killproc() { - pid=`/bin/pidof $1` - [ "$pid" != "" ] && kill $pid -} - -read CMDLINE < /proc/cmdline -for x in $CMDLINE; do - case $x in - weston=false) - echo "Weston disabled" - exit 0; - ;; - esac -done - -case "$1" in - start) - . /etc/profile - export HOME=ROOTHOME - - WESTON_USER=weston weston-start $OPTARGS & - ;; - - stop) - echo "Stopping Weston" - killproc weston - ;; - - restart) - $0 stop - sleep 1 - $0 start - ;; - - *) - echo "usage: $0 { start | stop | restart }" - ;; -esac - -exit 0 diff --git a/meta/recipes-graphics/wayland/weston-init/weston-autologin b/meta/recipes-graphics/wayland/weston-init/weston-autologin deleted file mode 100644 index f6e6d106de..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/weston-autologin +++ /dev/null @@ -1,11 +0,0 @@ -auth required pam_nologin.so -auth required pam_unix.so try_first_pass nullok - -account required pam_nologin.so -account required pam_unix.so - -session required pam_env.so -session required pam_unix.so --session optional pam_systemd.so type=wayland class=user desktop=weston --session optional pam_loginuid.so - diff --git a/meta/recipes-graphics/wayland/weston-init/weston-socket.sh b/meta/recipes-graphics/wayland/weston-init/weston-socket.sh deleted file mode 100755 index 86389d63a3..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/weston-socket.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# set weston variables for use with global weston socket -global_socket="/run/wayland-0" -if [ -e "$global_socket" ]; then - weston_group=$(stat -c "%G" "$global_socket") - if [ "$(id -u)" = "0" ]; then - export WAYLAND_DISPLAY="$global_socket" - else - case "$(groups "$USER")" in - *"$weston_group"*) - export WAYLAND_DISPLAY="$global_socket" - ;; - *) - ;; - esac - fi - unset weston_group -fi -unset global_socket diff --git a/meta/recipes-graphics/wayland/weston-init/weston-start b/meta/recipes-graphics/wayland/weston-init/weston-start deleted file mode 100755 index 3b13a0047a..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/weston-start +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# Copyright (C) 2016 O.S. Systems Software LTDA. -# Copyright (C) 2016 Freescale Semiconductor - -export PATH="/sbin:/usr/sbin:/bin:/usr/bin" - -usage() { - cat <] -EOF -} - -## Module support -modules_dir=@DATADIR@/weston-start - -# Add weston extra argument -add_weston_argument() { - weston_args="$weston_args $1" -} - -## Add module to --modules argument -add_weston_module() { - if [[ "x${weston_modules}" == "x" ]]; then - weston_modules="--modules " - fi; - weston_modules+="${1}," -} - -if [ -n "$WAYLAND_DISPLAY" ]; then - echo "ERROR: A Wayland compositor is already running, nested Weston instance is not supported yet." - exit 1 -fi - -if [ -n "$WESTON_USER" ]; then - if [ -z "$WESTON_GROUP" ]; then - # no explicit WESTON_GROUP given, therefore use WESTON_USER - export WESTON_GROUP="${WESTON_USER}" - fi -fi - -weston_args=$* - -# Load and run modules -if [ -d "$modules_dir" ]; then - for m in "$modules_dir"/*; do - # Skip backup files - if [ "`echo $m | sed -e 's/\~$//'`" != "$m" ]; then - continue - fi - - # process module - . $m - if [[ x"{$weston_modules}" != "x" ]]; then - add_weston_argument "${weston_modules}" - fi; - done -fi - -if test -z "$XDG_RUNTIME_DIR"; then - export XDG_RUNTIME_DIR=/run/user/`id -u ${WESTON_USER}` - if test -d "$XDG_RUNTIME_DIR"; then - # Check permissions on existing directory - if [ "$(stat -c %u-%a "$XDG_RUNTIME_DIR")" != "$(id -u ${WESTON_USER})-700" ]; then - echo "ERROR: $XDG_RUNTIME_DIR has incorrect permissions" - exit 1 - fi - else - mkdir --mode 0700 --parents $XDG_RUNTIME_DIR - if [ -n "$WESTON_USER" ] - then - chown $WESTON_USER:$WESTON_GROUP $XDG_RUNTIME_DIR - fi - fi -fi - -su -c "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR weston $weston_args --log=/tmp/weston.log" $WESTON_USER diff --git a/meta/recipes-graphics/wayland/weston-init/weston.env b/meta/recipes-graphics/wayland/weston-init/weston.env deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/meta/recipes-graphics/wayland/weston-init/weston.service b/meta/recipes-graphics/wayland/weston-init/weston.service deleted file mode 100644 index 80745998ed..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/weston.service +++ /dev/null @@ -1,71 +0,0 @@ -# This is a system unit for launching Weston with auto-login as the -# user configured here. -# -# Weston must be built with systemd support, and your weston.ini must load -# the plugin systemd-notify.so. -[Unit] -Description=Weston, a Wayland compositor, as a system service -Documentation=man:weston(1) man:weston.ini(5) -Documentation=http://wayland.freedesktop.org/ - -# Make sure we are started after logins are permitted. -Requires=systemd-user-sessions.service -After=systemd-user-sessions.service - -# If Plymouth is used, we want to start when it is on its way out. -After=plymouth-quit-wait.service - -# D-Bus is necessary for contacting logind. Logind is required. -Wants=dbus.socket -After=dbus.socket - -# Ensure the socket is present -Requires=weston.socket - -# Since we are part of the graphical session, make sure we are started before -# it is complete. -Before=graphical.target - -# Prevent starting on systems without virtual consoles, Weston requires one -# for now. -ConditionPathExists=/dev/tty0 - -[Service] -# Requires systemd-notify.so Weston plugin. -Type=notify -EnvironmentFile=/etc/default/weston -ExecStart=/usr/bin/weston --modules=systemd-notify.so - -# Optional watchdog setup -#TimeoutStartSec=60 -#WatchdogSec=20 - -# The user to run Weston as. -User=weston -Group=weston - -# Make sure the working directory is the users home directory -WorkingDirectory=/home/weston - -# Set up a full user session for the user, required by Weston. -PAMName=weston-autologin - -# A virtual terminal is needed. -TTYPath=/dev/tty7 -TTYReset=yes -TTYVHangup=yes -TTYVTDisallocate=yes - -# Fail to start if not controlling the tty. -StandardInput=tty-fail -StandardOutput=journal -StandardError=journal - -# Log this user with utmp, letting it show up with commands 'w' and 'who'. -UtmpIdentifier=tty7 -UtmpMode=user - -[Install] -# Note: If you only want weston to start on-demand, remove this line with a -# service drop file -WantedBy=graphical.target diff --git a/meta/recipes-graphics/wayland/weston-init/weston.socket b/meta/recipes-graphics/wayland/weston-init/weston.socket deleted file mode 100644 index c1bdc83c05..0000000000 --- a/meta/recipes-graphics/wayland/weston-init/weston.socket +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Weston socket -RequiresMountsFor=/run - -[Socket] -ListenStream=/run/wayland-0 -SocketMode=0775 -SocketUser=weston -SocketGroup=wayland -RemoveOnStop=yes - -[Install] -WantedBy=sockets.target - From patchwork Wed Sep 10 21:28:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69988 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6C6ACA0FED for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) by mx.groups.io with SMTP id smtpd.web10.31044.1757539787247695826 for ; Wed, 10 Sep 2025 14:29:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=DyU5hO7i; spf=pass (domain: ti.com, ip: 198.47.19.246, mailfrom: rs@ti.com) Received: from fllvem-sh03.itg.ti.com ([10.64.41.86]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTO46600941; Wed, 10 Sep 2025 16:29:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539764; bh=6HkPSmq0BGSSTISz/1ww59KxCcwU8u48aDoFbPM/dzo=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=DyU5hO7i7Xzv+2MxGQeIB8mM5VENcpADbYImM3H0PXZ9Ic659HJXkB3GqEQS7gInW x0eCIKu1vaoM8TFt46CJIc5IS8hF+ia+gLaDVfowUx1U5YoBkapMt2iQlGOUcl3gV2 wTr5tUC1jxnBZQab1YUVbjTx4SJanS5Gxf1sFdic= Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35]) by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTNeU663493 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:24 -0500 Received: from DFLE208.ent.ti.com (10.64.6.66) by DFLE114.ent.ti.com (10.64.6.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE208.ent.ti.com (10.64.6.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiO1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 5/6] weston: remove deprecated weston-start scripts Date: Wed, 10 Sep 2025 16:28:46 -0500 Message-ID: <20250910212855.2480561-6-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223242 From: Randolph Sapp The weston-start scripts are not parsed unless using the old version of weston-init. These files are no longer required since weston-init moved to a virtual-emptty-conf. Signed-off-by: Randolph Sapp --- .../wayland/weston/systemd-notify.weston-start | 9 --------- .../wayland/weston/xwayland.weston-start | 6 ------ meta/recipes-graphics/wayland/weston_14.0.2.bb | 10 ---------- 3 files changed, 25 deletions(-) delete mode 100644 meta/recipes-graphics/wayland/weston/systemd-notify.weston-start delete mode 100644 meta/recipes-graphics/wayland/weston/xwayland.weston-start diff --git a/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start b/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start deleted file mode 100644 index a97e7b38d9..0000000000 --- a/meta/recipes-graphics/wayland/weston/systemd-notify.weston-start +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# SPDX-FileCopyrightText: Huawei Inc. -# SPDX-License-Identifier: Apache-2.0 - - -if [[ -x "/usr/lib/weston/systemd-notify.so" ]]; then - add_weston_module "systemd-notify.so" -fi diff --git a/meta/recipes-graphics/wayland/weston/xwayland.weston-start b/meta/recipes-graphics/wayland/weston/xwayland.weston-start deleted file mode 100644 index 342ac8d129..0000000000 --- a/meta/recipes-graphics/wayland/weston/xwayland.weston-start +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -if type Xwayland >/dev/null 2>/dev/null; then - mkdir -m 775 -p /tmp/.X11-unix - chown root:video /tmp/.X11-unix -fi diff --git a/meta/recipes-graphics/wayland/weston_14.0.2.bb b/meta/recipes-graphics/wayland/weston_14.0.2.bb index 451fb961a1..7a9d7f63f0 100644 --- a/meta/recipes-graphics/wayland/weston_14.0.2.bb +++ b/meta/recipes-graphics/wayland/weston_14.0.2.bb @@ -9,8 +9,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \ SRC_URI = "https://gitlab.freedesktop.org/wayland/weston/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz \ file://weston.png \ file://weston.desktop \ - file://xwayland.weston-start \ - file://systemd-notify.weston-start \ " SRC_URI[sha256sum] = "b47216b3530da76d02a3a1acbf1846a9cd41d24caa86448f9c46f78f20b6e0ac" @@ -107,14 +105,6 @@ do_install:append() { install ${UNPACKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps fi - if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then - install -Dm 644 ${UNPACKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland - fi - - if [ "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'yes', 'no', d)}" = "yes" ]; then - install -Dm 644 ${UNPACKDIR}/systemd-notify.weston-start ${D}${datadir}/weston-start/systemd-notify - fi - if [ "${@bb.utils.contains('PACKAGECONFIG', 'launch', 'yes', 'no', d)}" = "yes" ]; then chmod u+s ${D}${bindir}/weston-launch fi From patchwork Wed Sep 10 21:28:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Randolph Sapp X-Patchwork-Id: 69993 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id CF5B3CAC58F for ; Wed, 10 Sep 2025 21:29:54 +0000 (UTC) Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) by mx.groups.io with SMTP id smtpd.web10.31043.1757539787057049646 for ; Wed, 10 Sep 2025 14:29:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=At5pYf5/; spf=pass (domain: ti.com, ip: 198.47.23.235, mailfrom: rs@ti.com) Received: from fllvem-sh03.itg.ti.com ([10.64.41.86]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTP id 58ALTOnU656966; Wed, 10 Sep 2025 16:29:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1757539764; bh=+b4PMf+wFdKIaZ3GJvzFLTyF+95R56AZi/45TXrdUWw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=At5pYf5/8hHnGkSnWuBbJizzkr9vGqWgaAtTHrNDqN+08Qjh0cBISH557oCI0CL2u UGwCtRkLRrBsqeg+G5IHc/Y3vracvpA6CelGh7myzMHo4UvWwFDAVgGYMu5gU/tCKX NvpDFavFwDOeV2WUiIY4AilyBj5S2Y3YQwcJ1vls= Received: from DFLE112.ent.ti.com (dfle112.ent.ti.com [10.64.6.33]) by fllvem-sh03.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 58ALTOAe663498 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Wed, 10 Sep 2025 16:29:24 -0500 Received: from DFLE200.ent.ti.com (10.64.6.58) by DFLE112.ent.ti.com (10.64.6.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.55; Wed, 10 Sep 2025 16:29:23 -0500 Received: from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE200.ent.ti.com (10.64.6.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Wed, 10 Sep 2025 16:29:23 -0500 Received: from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.144]) by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 58ALTNiP1102015; Wed, 10 Sep 2025 16:29:23 -0500 From: To: Mathieu Dubois-Briand , , , , , , , , , CC: , Subject: [oe-core][PATCHv7 6/6] xserver-nodm-init: convert to virtual-emptty-conf Date: Wed, 10 Sep 2025 16:28:47 -0500 Message-ID: <20250910212855.2480561-7-rs@ti.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250910212855.2480561-1-rs@ti.com> References: <20250910212855.2480561-1-rs@ti.com> MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 10 Sep 2025 21:29:54 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223241 From: Randolph Sapp Convert this script package into a simple config for emptty. This is capable of using either the root user or the underprivileged xuser account based on the same ROOTLESS_X variable. The xuser will leverage the nopasswdlogin session provided by emptty for automatic logins. Runtime provide virtual-emptty-conf as we need to set parameters for the default session. This also gets rid of the xuser security/capability override since emptty sets up required components as root before decending into the specified user. This does not currently handle loading of autostart applications in "/etc/xdg/autostart". License-Update: GPLv2 scripts were replaced with MIT based config files Signed-off-by: Randolph Sapp --- meta/conf/distro/include/maintainers.inc | 4 +- meta/lib/oeqa/runtime/cases/xorg.py | 8 + .../x11-common/xserver-nodm-init/X11/Xsession | 38 -- .../X11/Xsession.d/13xdgbasedirs.sh | 19 - .../X11/Xsession.d/89xdgautostart.sh | 7 - .../X11/Xsession.d/90XWindowManager.sh | 7 - .../x11-common/xserver-nodm-init/Xserver | 25 -- .../xserver-nodm-init/capability.conf | 2 - .../xserver-nodm-init/default.desktop | 5 + .../xserver-nodm-init/emptty.conf.in} | 8 +- .../xserver-nodm-init/gplv2-license.patch | 355 ------------------ .../x11-common/xserver-nodm-init/xserver-nodm | 75 ---- .../xserver-nodm-init/xserver-nodm.conf.in | 7 - .../xserver-nodm-init/xserver-nodm.service.in | 11 - .../x11-common/xserver-nodm-init_3.0.bb | 57 +-- .../user-creation/xuser-account_0.1.bb | 3 +- 16 files changed, 37 insertions(+), 594 deletions(-) delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/13xdgbasedirs.sh delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/89xdgautostart.sh delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/90XWindowManager.sh delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/Xserver delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf create mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/default.desktop copy meta/recipes-graphics/{wayland/weston-init/emptty.conf => x11-common/xserver-nodm-init/emptty.conf.in} (95%) delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/gplv2-license.patch delete mode 100755 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.conf.in delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index fb2d347521..7c89c3a54c 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -926,12 +926,12 @@ RECIPE_MAINTAINER:pn-xorgproto = "Unassigned " RECIPE_MAINTAINER:pn-xprop = "Unassigned " RECIPE_MAINTAINER:pn-xrandr = "Unassigned " RECIPE_MAINTAINER:pn-xrestop = "Unassigned " -RECIPE_MAINTAINER:pn-xserver-nodm-init = "Unassigned " +RECIPE_MAINTAINER:pn-xserver-nodm-init = "Randolph Sapp " RECIPE_MAINTAINER:pn-xserver-xf86-config = "Unassigned " RECIPE_MAINTAINER:pn-xserver-xorg = "Unassigned " RECIPE_MAINTAINER:pn-xset = "Unassigned " RECIPE_MAINTAINER:pn-xtrans = "Unassigned " -RECIPE_MAINTAINER:pn-xuser-account = "Unassigned " +RECIPE_MAINTAINER:pn-xuser-account = "Randolph Sapp " RECIPE_MAINTAINER:pn-xvinfo = "Unassigned " RECIPE_MAINTAINER:pn-xwayland = "Unassigned " RECIPE_MAINTAINER:pn-xwininfo = "Unassigned " diff --git a/meta/lib/oeqa/runtime/cases/xorg.py b/meta/lib/oeqa/runtime/cases/xorg.py index 09afb1e3d1..8593be5b77 100644 --- a/meta/lib/oeqa/runtime/cases/xorg.py +++ b/meta/lib/oeqa/runtime/cases/xorg.py @@ -20,4 +20,12 @@ class XorgTest(OERuntimeTestCase): status, output = self.target.run(cmd) msg = ('Xorg does not appear to be running %s' % self.target.run(self.tc.target_cmds['ps'])[1]) + + # dump last 20 lines of emptty log in case of failure + log_cmd = 'tail -n 20 /var/log/emptty/7.log' + msg += '\n\n===== start: snippet =====\n\n' + msg += 'file: /var/log/emptty/7.log\n\n' + msg += '\n\n%s\n\n' % self.target.run(log_cmd)[1] + msg += '\n\n===== end: snippet =====\n\n' + self.assertEqual(status, 0, msg=msg) diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession b/meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession deleted file mode 100644 index 0b73127ae1..0000000000 --- a/meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -if [ -x /usr/bin/dbus-launch ]; then - # As this is the X session script, always start a new DBus session. - eval `dbus-launch --sh-syntax --exit-with-session -+ Copyright (C) -+ -+ 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., -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ -+Also add information on how to contact you by electronic and paper mail. -+ -+If the program is interactive, make it output a short notice like this -+when it starts in an interactive mode: -+ -+ Gnomovision version 69, Copyright (C) year name of author -+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -+ This is free software, and you are welcome to redistribute it -+ under certain conditions; type `show c' for details. -+ -+The hypothetical commands `show w' and `show c' should show the appropriate -+parts of the General Public License. Of course, the commands you use may -+be called something other than `show w' and `show c'; they could even be -+mouse-clicks or menu items--whatever suits your program. -+ -+You should also get your employer (if you work as a programmer) or your -+school, if any, to sign a "copyright disclaimer" for the program, if -+necessary. Here is a sample; alter the names: -+ -+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program -+ `Gnomovision' (which makes passes at compilers) written by James Hacker. -+ -+ , 1 April 1989 -+ Ty Coon, President of Vice -+ -+This General Public License does not permit incorporating your program into -+proprietary programs. If your program is a subroutine library, you may -+consider it more useful to permit linking proprietary applications with the -+library. If this is what you want to do, use the GNU Lesser General -+Public License instead of this License. diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm b/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm deleted file mode 100755 index 116bb278bc..0000000000 --- a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# -### BEGIN INIT INFO -# Provides: xserver -# Required-Start: $local_fs $remote_fs dbus -# Required-Stop: $local_fs $remote_fs -# Default-Start: 5 -# Default-Stop: 0 1 2 3 6 -### END INIT INFO - -killproc() { # kill the named process(es) - pid=`/bin/pidof $1` - [ "$pid" != "" ] && kill $pid -} - -read CMDLINE < /proc/cmdline -for x in $CMDLINE; do - case $x in - x11=false) - echo "X Server disabled" - exit 0; - ;; - esac -done - -case "$1" in - start) - . /etc/profile - - #default for USER - . /etc/default/xserver-nodm - echo "Starting Xserver" - if [ "$USER" != "root" ]; then - # setting for rootless X - chmod o+w /var/log - chmod g+r /dev/tty[0-3] - # hidraw device is probably needed - if [ -e /dev/hidraw0 ]; then - chmod o+rw /dev/hidraw* - fi - # Make sure that the Xorg has the cap_sys_admin capability which is - # needed for setting the drm master - if ! grep -q "^auth.*pam_cap\.so" /etc/pam.d/su; then - echo "auth optional pam_cap.so" >>/etc/pam.d/su - fi - if ! /usr/sbin/getcap $XSERVER | grep -q cap_sys_admin; then - /usr/sbin/setcap cap_sys_admin+eip $XSERVER - fi - fi - - # Using su rather than sudo as latest 1.8.1 cause failure [YOCTO #1211] - su -l -c '/etc/xserver-nodm/Xserver &' $USER - # Wait for the desktop to say its finished loading - # before loading the rest of the system - # dbus-wait org.matchbox_project.desktop Loaded - ;; - - stop) - echo "Stopping XServer" - killproc xinit - sleep 1 - chvt 1 & - ;; - - restart) - $0 stop - $0 start - ;; - - *) - echo "usage: $0 { start | stop | restart }" - ;; -esac - -exit 0 diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.conf.in b/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.conf.in deleted file mode 100644 index 4a9670d8d2..0000000000 --- a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.conf.in +++ /dev/null @@ -1,7 +0,0 @@ -# common environment file for sysvinit and systemd - -XSERVER=/usr/bin/Xorg -DISPLAY=:0 -ARGS=" -br -pn @BLANK_ARGS@ @NO_CURSOR_ARG@ " -HOME=@HOME@ -USER=@USER@ diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in b/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in deleted file mode 100644 index 87dc4f8fcd..0000000000 --- a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Xserver startup without a display manager - -[Service] -EnvironmentFile=/etc/default/xserver-nodm -User=@USER@ -ExecStart=/etc/xserver-nodm/Xserver -Restart=always - -[Install] -Alias=display-manager.service diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb index 169269eefb..ea3a90db7c 100644 --- a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb +++ b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb @@ -1,23 +1,17 @@ SUMMARY = "Simple Xserver Init Script (no dm)" -LICENSE = "GPL-2.0-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" SECTION = "x11" -SRC_URI = "file://xserver-nodm \ - file://Xserver \ - file://X11 \ - file://gplv2-license.patch \ - file://xserver-nodm.service.in \ - file://xserver-nodm.conf.in \ - file://capability.conf \ -" +SRC_URI = "file://emptty.conf.in \ + file://default.desktop" S = "${UNPACKDIR}" # Since we refer to ROOTLESS_X which is normally enabled per-machine PACKAGE_ARCH = "${MACHINE_ARCH}" -inherit update-rc.d systemd features_check +inherit features_check REQUIRED_DISTRO_FEATURES = "x11 ${@oe.utils.conditional('ROOTLESS_X', '1', 'pam', '', d)}" @@ -27,45 +21,26 @@ PACKAGECONFIG[blank] = "" PACKAGECONFIG[nocursor] = "" do_install() { - install -d ${D}${sysconfdir}/default - install xserver-nodm.conf.in ${D}${sysconfdir}/default/xserver-nodm - install -d ${D}${sysconfdir}/xserver-nodm - install Xserver ${D}${sysconfdir}/xserver-nodm/Xserver - install -d ${D}${sysconfdir}/X11/Xsession.d - install X11/Xsession.d/* ${D}${sysconfdir}/X11/Xsession.d/ - install X11/Xsession ${D}${sysconfdir}/X11/ + install -D -p -m0644 ${S}/emptty.conf.in ${D}${sysconfdir}/emptty/conf + install -D -p -m0644 ${S}/default.desktop ${D}${datadir}/xsessions/default.desktop BLANK_ARGS="${@bb.utils.contains('PACKAGECONFIG', 'blank', '', '-s 0 -dpms', d)}" NO_CURSOR_ARG="${@bb.utils.contains('PACKAGECONFIG', 'nocursor', '-nocursor', '', d)}" + ROOTLESS_X_ARG="${@oe.utils.conditional('ROOTLESS_X', '1', 'true', 'false', d)}" if [ "${ROOTLESS_X}" = "1" ] ; then - XUSER_HOME="/home/xuser" XUSER="xuser" - install -D capability.conf ${D}${sysconfdir}/security/capability.conf - sed -i "s:@USER@:${XUSER}:" ${D}${sysconfdir}/security/capability.conf else - XUSER_HOME=${ROOT_HOME} XUSER="root" fi - sed -i "s:@HOME@:${XUSER_HOME}:; s:@USER@:${XUSER}:; s:@BLANK_ARGS@:${BLANK_ARGS}:" \ - ${D}${sysconfdir}/default/xserver-nodm - sed -i "s:@NO_CURSOR_ARG@:${NO_CURSOR_ARG}:" ${D}${sysconfdir}/default/xserver-nodm - - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - install -d ${D}${systemd_system_unitdir} - install -m 0644 ${S}/xserver-nodm.service.in ${D}${systemd_system_unitdir}/xserver-nodm.service - sed -i "s:@USER@:${XUSER}:" ${D}${systemd_system_unitdir}/xserver-nodm.service - fi - - if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then - install -d ${D}${sysconfdir}/init.d - install xserver-nodm ${D}${sysconfdir}/init.d - fi + sed -i "s:@USER@:${XUSER}:" ${D}${sysconfdir}/emptty/conf + sed -i "s:@NO_CURSOR_ARG@:${NO_CURSOR_ARG}:" ${D}${sysconfdir}/emptty/conf + sed -i "s:@BLANK_ARGS@:${BLANK_ARGS}:" ${D}${sysconfdir}/emptty/conf + sed -i "s:@ROOTLESS_X_ARG@:${ROOTLESS_X_ARG}:" ${D}${sysconfdir}/emptty/conf } -RDEPENDS:${PN} = "xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account libcap libcap-bin', '', d)}" - -INITSCRIPT_NAME = "xserver-nodm" -INITSCRIPT_PARAMS = "start 9 5 . stop 20 0 1 2 3 6 ." -SYSTEMD_SERVICE:${PN} = "xserver-nodm.service" +FILES:${PN} = "${sysconfdir}/emptty/conf \ + ${datadir}/xsessions/default.desktop" +RDEPENDS:${PN} = "emptty xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account libcap libcap-bin', '', d)}" +RPROVIDES:${PN} += "virtual-emptty-conf" RCONFLICTS:${PN} = "xserver-common (< 1.34-r9) x11-common" diff --git a/meta/recipes-support/user-creation/xuser-account_0.1.bb b/meta/recipes-support/user-creation/xuser-account_0.1.bb index 04f506e7a3..f1e4cb674f 100644 --- a/meta/recipes-support/user-creation/xuser-account_0.1.bb +++ b/meta/recipes-support/user-creation/xuser-account_0.1.bb @@ -24,7 +24,8 @@ FILES:${PN} = "${sysconfdir}/dbus-1/system.d/system-xuser.conf" USERADD_PACKAGES = "${PN}" USERADD_PARAM:${PN} = "--create-home \ - --groups video,tty,audio,input,shutdown,disk \ + --groups video,tty,audio,input,shutdown,disk,nopasswdlogin \ --user-group xuser" +GROUPADD_PARAM:${PN} = "-r nopasswdlogin" ALLOW_EMPTY:${PN} = "1"