The common/terminal.c changes are just a minor cleanup for consistency
with the FreeBSD code, I suspect the current port would work just as
well.

The hopefully more useful part of the diff: using the rc script and
the instructions in the README I get working VT switching both from
the wayland/greetd prompt and from a "startxfce4 --wayland" session
using labwc.  If you're using greetd please test with the diff I sent
earlier today.  For some reason startcagebreak.sh appears to error out
and go back to the greetd prompt.  Hopefully the debugging
instructions in the README will prove useful.  I haven't tested other
compositors.

It would be tempting to add a _seatd group instead of telling users to
add a local one, but well, it wouldn't remove the need for explicit
configuration steps and we're short on uids/gids (tm).

Thoughts?  ok?


Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/seatd/Makefile,v
diff -u -p -r1.9 Makefile
--- Makefile    19 Oct 2025 08:27:21 -0000      1.9
+++ Makefile    2 Jan 2026 13:39:31 -0000
@@ -1,6 +1,7 @@
 COMMENT        =       minimal seat management daemon and universal library
 
 V =            0.9.1
+REVISION =     0
 DISTNAME =     seatd-$V
 CATEGORIES =   sysutils
 
Index: patches/patch-common_terminal_c
===================================================================
RCS file: /cvs/ports/sysutils/seatd/patches/patch-common_terminal_c,v
diff -u -p -r1.3 patch-common_terminal_c
--- patches/patch-common_terminal_c     19 Oct 2025 08:27:21 -0000      1.3
+++ patches/patch-common_terminal_c     2 Jan 2026 13:52:16 -0000
@@ -16,14 +16,23 @@ Index: common/terminal.c
  #else
  #error Unsupported platform
  #endif
-@@ -147,12 +153,25 @@ static int get_tty_path(int tty, char path[static TTYP
+@@ -147,6 +153,23 @@ static int get_tty_path(int tty, char path[static TTYP
        }
        return 0;
  }
 +#elif defined(__OpenBSD__)
 +static int get_tty_path(int tty, char path[static TTYPATHLEN]) {
 +      assert(tty >= 0);
-+      if (snprintf(path, TTYPATHLEN, "/dev/ttyC%d", tty - 1) == -1) {
++
++      // On OpenBSD ttyC0 maps to VT 1.
++      // We subtract one from the requested TTY number to compensate. If the
++      // user asked for TTY 0 (which is special on Linux), we just give them
++      // the first tty.
++      if (tty > 0) {
++              tty--;
++      }
++
++      if (snprintf(path, TTYPATHLEN, "/dev/ttyC%d", tty) == -1) {
 +              return -1;
 +      }
 +      return 0;
@@ -31,18 +40,7 @@ Index: common/terminal.c
  #else
  #error Unsupported platform
  #endif
- 
- int terminal_open(int vt) {
-       char path[TTYPATHLEN];
-+#ifdef __OpenBSD__
-+      if (vt == 0) {
-+              snprintf(path, sizeof(path), "/dev/ttyC0");
-+      } else
-+#endif
-       if (get_tty_path(vt, path) == -1) {
-               log_errorf("Could not generate tty path: %s", strerror(errno));
-               return -1;
-@@ -166,7 +185,7 @@ int terminal_open(int vt) {
+@@ -166,7 +189,7 @@ int terminal_open(int vt) {
  }
  
  int terminal_current_vt(int fd) {
@@ -51,7 +49,7 @@ Index: common/terminal.c
        struct vt_stat st;
        int res = ioctl(fd, VT_GETSTATE, &st);
        if (res == -1) {
-@@ -201,7 +220,19 @@ int terminal_set_process_switching(int fd, bool enable
+@@ -201,7 +224,19 @@ int terminal_set_process_switching(int fd, bool enable
                .acqsig = enable ? SIGUSR2 : 0,
                .frsig = FRSIG,
        };
@@ -72,7 +70,7 @@ Index: common/terminal.c
        if (ioctl(fd, VT_SETMODE, &mode) == -1) {
                log_errorf("Could not set VT mode to %s process switching: %s",
                           enable ? "enable" : "disable", strerror(errno));
-@@ -241,12 +272,23 @@ int terminal_ack_acquire(int fd) {
+@@ -241,12 +276,23 @@ int terminal_ack_acquire(int fd) {
  }
  
  int terminal_set_keyboard(int fd, bool enable) {
@@ -96,7 +94,7 @@ Index: common/terminal.c
  #if defined(__FreeBSD__)
        struct termios tios;
        if (tcgetattr(fd, &tios) == -1) {
-@@ -268,11 +310,22 @@ int terminal_set_keyboard(int fd, bool enable) {
+@@ -268,11 +314,22 @@ int terminal_set_keyboard(int fd, bool enable) {
  }
  
  int terminal_set_graphics(int fd, bool enable) {
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/sysutils/seatd/pkg/PLIST,v
diff -u -p -r1.1.1.1 PLIST
--- pkg/PLIST   13 Aug 2023 08:36:22 -0000      1.1.1.1
+++ pkg/PLIST   2 Jan 2026 15:40:37 -0000
@@ -1,3 +1,4 @@
+@rcscript ${RCDIR}/seatd
 @bin bin/seatd
 @bin bin/seatd-launch
 include/libseat.h
@@ -5,3 +6,4 @@ include/libseat.h
 lib/pkgconfig/libseat.pc
 @man man/man1/seatd-launch.1
 @man man/man1/seatd.1
+share/doc/pkg-readmes/${PKGSTEM}
Index: pkg/README
===================================================================
RCS file: pkg/README
diff -N pkg/README
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/README  2 Jan 2026 15:43:25 -0000
@@ -0,0 +1,36 @@
++-------------------------------------------------------------------------------
+| Running ${PKGSTEM} on OpenBSD
++-------------------------------------------------------------------------------
+
+seatd provides VT switching and device access to clients
+using libseat.  It is particularly useful for wayland-based
+applications.
+
+Setup
+=====
+
+By default seatd's UNIX socket is only accessible by root.
+Add a new group "seat" and add authorized to use seatd to that group:
+
+  # group add seat
+  # user mod -G seat _greetd
+  # user mod -G seat jdoe
+
+Startup
+=======
+
+Enable seatd so that it starts before services that need it.
+Tell it to use the group we created above.
+
+  # rcctl enable seatd
+  # rcctl order seatd
+  # rcctl set seatd flags -g seat
+
+Debugging
+=========
+
+To debug or report issues, start seatd in the foreground with
+a more verbose log level.
+
+  # rcctl stop seatd
+  # seatd -g seat -l debug
Index: pkg/seatd.rc
===================================================================
RCS file: pkg/seatd.rc
diff -N pkg/seatd.rc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/seatd.rc        2 Jan 2026 15:46:04 -0000
@@ -0,0 +1,8 @@
+#!/bin/ksh
+
+daemon="${TRUEPREFIX}/bin/seatd"
+
+. /etc/rc.d/rc.subr
+
+rc_bg=YES
+rc_cmd $1


-- 
jca

Reply via email to