mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-18 00:10:04 +00:00
x11/lightdm: Fix VT/user switching
Submitted upstream: https://github.com/canonical/lightdm/pull/353 PR: 278457
This commit is contained in:
parent
658fe0bed2
commit
96b6500ac4
@ -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}/
|
||||
|
||||
|
99
x11/lightdm/files/patch-src_vt.c
Normal file
99
x11/lightdm/files/patch-src_vt.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user