diff mbox series

systemd: add osc-context PACKAGECONFIG

Message ID 20260415082949.3446677-1-Qi.Chen@windriver.com
State Changes Requested
Headers show
Series systemd: add osc-context PACKAGECONFIG | expand

Commit Message

ChenQi April 15, 2026, 8:29 a.m. UTC
From: Chen Qi <Qi.Chen@windriver.com>

Add a new PACKAGECONFIG to give users the choice of whether to
have /etc/profile.d/80-systemd-osc-context.sh file or not.

This is because the /etc/profile.d/80-systemd-osc-context.sh[1] is setting
PS0 with OSC 3008 standard[2]. If a terminal (e.g., minicom) cannot
deal with this OSC 3008 standard, it will just output the whole contents.
This is quite annoying. See example output below:

  3008;start=9c578e41-1a0f-4b47-9a87-ab22adebe376;machineid=cc467af9bedc4d98a437e5d744928301;...

Below are steps of how to reproduce the issue with qemu:
1. IMAGE_INSTALL:append = " bash"
2. bitbake core-image-minimal
3. runqemu snapshot kvm nographic qemuparams="-serial pty"
4. minicom -D /dev/pts/X -b 115200 (/dev/pts/X is the one printed in the step 3)
5. [In minicom] type any command or just type "Enter" key

A new PR is also created for systemd upstream:
  https://github.com/systemd/systemd/pull/41647
If systemd accepts the PR, we can then use the new option. Otherwise, we'll need
to keep the way it is now.

[1] https://github.com/systemd/systemd/commit/dadbb34919abd3fefeb5b8ccc9794da9398a2503
[2] https://uapi-group.org/specifications/specs/osc_context/

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-core/systemd/systemd_259.5.bb | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Paul Barker April 15, 2026, 9:35 a.m. UTC | #1
On Wed, 2026-04-15 at 16:29 +0800, Qi.Chen@windriver.com wrote:
> From: Chen Qi <Qi.Chen@windriver.com>
> 
> Add a new PACKAGECONFIG to give users the choice of whether to
> have /etc/profile.d/80-systemd-osc-context.sh file or not.
> 
> This is because the /etc/profile.d/80-systemd-osc-context.sh[1] is setting
> PS0 with OSC 3008 standard[2]. If a terminal (e.g., minicom) cannot
> deal with this OSC 3008 standard, it will just output the whole contents.
> This is quite annoying. See example output below:
> 
>   3008;start=9c578e41-1a0f-4b47-9a87-ab22adebe376;machineid=cc467af9bedc4d98a437e5d744928301;...
> 
> Below are steps of how to reproduce the issue with qemu:
> 1. IMAGE_INSTALL:append = " bash"
> 2. bitbake core-image-minimal
> 3. runqemu snapshot kvm nographic qemuparams="-serial pty"
> 4. minicom -D /dev/pts/X -b 115200 (/dev/pts/X is the one printed in the step 3)
> 5. [In minicom] type any command or just type "Enter" key
> 
> A new PR is also created for systemd upstream:
>   https://github.com/systemd/systemd/pull/41647
> If systemd accepts the PR, we can then use the new option. Otherwise, we'll need
> to keep the way it is now.
> 
> [1] https://github.com/systemd/systemd/commit/dadbb34919abd3fefeb5b8ccc9794da9398a2503
> [2] https://uapi-group.org/specifications/specs/osc_context/
> 
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>

I think the best way to solve this problem is to set TERM for the serial
port in question, perhaps to something like `vt100` if you expect to be
connecting with minicom. That would have to be hardcoded in the inittab
or relevant systemd unit file as there's no negotiation of terminal type
when connecting over serial.

The `80-systemd-osc-context.sh` script in systemd also needs
modification, it assumes that anything other than TERM=dumb can support
OSC 3008 messages. We all know TERM and terminfo is a mess, but it's
equally messy to just assume support for features like this.

Adding a PACKAGECONFIG and/or an option to the systemd build system to
control whether this is installed is not a good solution - a target
system may have multiple types of terminal in use, some of which do
support OSC 3008.

Best regards,
diff mbox series

Patch

diff --git a/meta/recipes-core/systemd/systemd_259.5.bb b/meta/recipes-core/systemd/systemd_259.5.bb
index 6987d4ad54..7a2f7832d5 100644
--- a/meta/recipes-core/systemd/systemd_259.5.bb
+++ b/meta/recipes-core/systemd/systemd_259.5.bb
@@ -67,6 +67,7 @@  PACKAGECONFIG ??= " \
     nss \
     nss-mymachines \
     nss-resolve \
+    osc-context \
     quotacheck \
     randomseed \
     resolved \
@@ -161,6 +162,7 @@  PACKAGECONFIG[no-ntp-fallback] = "-Dntp-servers="
 PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false,,libnss-systemd"
 PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=enabled,-Dnss-mymachines=disabled"
 PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=enabled,-Dnss-resolve=disabled,,libnss-resolve"
+PACKAGECONFIG[osc-context] = ",,,"
 PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false"
 PACKAGECONFIG[openssl] = "-Dopenssl=enabled,-Dopenssl=disabled,openssl"
 PACKAGECONFIG[p11kit] = "-Dp11kit=enabled,-Dp11kit=disabled,p11-kit"
@@ -273,6 +275,13 @@  do_install() {
 		find ${D} -name \*getty-generator\* -delete
 	fi
 
+	if ! ${@bb.utils.contains('PACKAGECONFIG', 'osc-context', 'true', 'false', d)}; then
+		# Ensure there's no /etc/profile.d/80-systemd-osc-context.sh.
+		# Some programs such as minicom does not support this OSC 3008 standard.
+		rm -f ${D}${sysconfdir}/profile.d/80-systemd-osc-context.sh
+		rm -f ${D}${nonarch_libdir}/tmpfiles.d/20-systemd-osc-context.conf
+	fi
+
 	# Provide support for initramfs
 	[ ! -e ${D}/init ] && ln -s ${nonarch_libdir}/systemd/systemd ${D}/init
 	[ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${nonarch_libdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd