git: 96b6500ac4d9 - main - x11/lightdm: Fix VT/user switching

From: Guido Falsi <madpilot_at_FreeBSD.org>
Date: Sun, 21 Apr 2024 13:28:11 UTC
The branch main has been updated by madpilot:

URL: https://cgit.FreeBSD.org/ports/commit/?id=96b6500ac4d9de0d37c54823d4d0764890718f74

commit 96b6500ac4d9de0d37c54823d4d0764890718f74
Author:     Tijl Coosemans <tijl@FreeBSD.org>
AuthorDate: 2024-04-21 13:27:18 +0000
Commit:     Guido Falsi <madpilot@FreeBSD.org>
CommitDate: 2024-04-21 13:27:18 +0000

    x11/lightdm: Fix VT/user switching
    
    Submitted upstream: https://github.com/canonical/lightdm/pull/353
    
    PR:     278457
---
 x11/lightdm/Makefile             |  2 +-
 x11/lightdm/files/patch-src_vt.c | 99 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 1 deletion(-)

diff --git a/x11/lightdm/Makefile b/x11/lightdm/Makefile
index 3be758e97f2e..737751f9d759 100644
--- a/x11/lightdm/Makefile
+++ b/x11/lightdm/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	lightdm
 PORTVERSION=	1.32.0
-PORTREVISION=	5
+PORTREVISION=	6
 CATEGORIES=	x11
 MASTER_SITES=	https://github.com/canonical/${PORTNAME}/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/
 
diff --git a/x11/lightdm/files/patch-src_vt.c b/x11/lightdm/files/patch-src_vt.c
new file mode 100644
index 000000000000..a41bfc74fd41
--- /dev/null
+++ b/x11/lightdm/files/patch-src_vt.c
@@ -0,0 +1,99 @@
+--- src/vt.c.orig	2019-08-04 22:29:55 UTC
++++ src/vt.c
+@@ -16,6 +16,9 @@
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
++#ifdef __FreeBSD__
++#include <sys/consio.h>
++#endif
+ #ifdef __linux__
+ #include <linux/vt.h>
+ #endif
+@@ -23,31 +26,56 @@
+ #include "vt.h"
+ #include "configuration.h"
+ 
++#if defined(__FreeBSD__)
++#define CONSOLE "/dev/console"
++#else
++#define CONSOLE "/dev/tty0"
++#endif
++
+ static GList *used_vts = NULL;
+ 
+ static gint
+ open_tty (void)
+ {
+-    int fd = g_open ("/dev/tty0", O_RDONLY | O_NOCTTY, 0);
++    int fd = g_open (CONSOLE, O_RDONLY | O_NOCTTY, 0);
+     if (fd < 0)
+-        g_warning ("Error opening /dev/tty0: %s", strerror (errno));
++        g_warning ("Error opening " CONSOLE ": %s", strerror (errno));
+     return fd;
+ }
+ 
+ gboolean
+ vt_can_multi_seat (void)
+ {
++#if defined(__linux__)
+     /* Quick check to see if we can multi seat.  This is intentionally the
+        same check logind does, just without actually reading from the files.
+        Existence will prove whether we have CONFIG_VT built into the kernel. */
+     return access ("/dev/tty0", F_OK) == 0 &&
+            access ("/sys/class/tty/tty0/active", F_OK) == 0;
++#else
++    return FALSE;
++#endif
+ }
+ 
+ gint
+ vt_get_active (void)
+ {
+-#ifdef __linux__
++#if defined(__FreeBSD__)
++    int active, res;
++    int tty_fd = open_tty ();
++
++    if (tty_fd >= 0)
++    {
++        res = ioctl (tty_fd, VT_GETACTIVE, &active);
++        close (tty_fd);
++        if (res == 0)
++            return active;
++
++        g_warning ("Error using VT_GETACTIVE on " CONSOLE ": %s", strerror (errno));
++    }
++
++    return -1;
++#elif defined(__linux__)
+     /* Pretend always active */
+     if (getuid () != 0)
+         return 1;
+@@ -73,7 +101,7 @@ vt_set_active (gint number)
+ void
+ vt_set_active (gint number)
+ {
+-#ifdef __linux__
++#if defined(__FreeBSD__) || defined(__linux__)
+     g_debug ("Activating VT %d", number);
+ 
+     /* Pretend always active */
+@@ -86,7 +114,7 @@ vt_set_active (gint number)
+         int n = number;
+         if (ioctl (tty_fd, VT_ACTIVATE, n) < 0)
+         {
+-            g_warning ("Error using VT_ACTIVATE %d on /dev/tty0: %s", n, strerror (errno));
++            g_warning ("Error using VT_ACTIVATE %d on " CONSOLE ": %s", n, strerror (errno));
+             close (tty_fd);
+             return;
+         }
+@@ -101,7 +129,7 @@ vt_set_active (gint number)
+             {
+                 if (errno == EINTR)
+                     continue;
+-                g_warning ("Error using VT_WAITACTIVE %d on /dev/tty0: %s", n, strerror (errno));
++                g_warning ("Error using VT_WAITACTIVE %d on " CONSOLE ": %s", n, strerror (errno));
+             }
+             break;
+         }