chiark / gitweb /
logind: allow users to override their own suspend/sleep inhibitors
[elogind.git] / src / login / multi-seat-x.c
index 8f3aacdd3a07447e7ad5ccb9576d8b4aae8b54b9..59f70882d41104ea0e863f5aee7914621b4056d3 100644 (file)
@@ -6,16 +6,16 @@
   Copyright 2011 Lennart Poettering
 
   systemd 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
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
   (at your option) any later version.
 
   systemd 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.
+  Lesser General Public License for more details.
 
-  You should have received a copy of the GNU General Public License
+  You should have received a copy of the GNU Lesser General Public License
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
@@ -25,6 +25,7 @@
 #include <libudev.h>
 
 #include "util.h"
+#include "mkdir.h"
 
 int main(int argc, char *argv[]) {
 
@@ -46,6 +47,9 @@ int main(int argc, char *argv[]) {
          * device assigned to a seat and write a configuration file
          * from it and then spawn the real X server. */
 
+        /* If this file is removed, don't forget to remove the code
+         * that invokes this in gdm and other display managers. */
+
         for (i = 1; i < argc; i++)
                 if (streq(argv[i], "-seat"))
                         seat = argv[i+1];
@@ -89,11 +93,11 @@ int main(int argc, char *argv[]) {
 
                 dn = udev_device_get_devnode(d);
 
-                if (!dn) {
+                if (dn) {
                         device_node = strdup(dn);
                         if (!device_node) {
                                 udev_device_unref(d);
-                                log_error("Out of memory.");
+                                log_oom();
                                 goto fail;
                         }
                 }
@@ -109,7 +113,7 @@ int main(int argc, char *argv[]) {
                 goto fail;
         }
 
-        r = safe_mkdir("/run/systemd/multi-session-x", 0755, 0, 0);
+        r = mkdir_safe_label("/run/systemd/multi-session-x", 0755, 0, 0);
         if (r < 0) {
                 log_error("Failed to create directory: %s", strerror(-r));
                 goto fail;
@@ -117,7 +121,7 @@ int main(int argc, char *argv[]) {
 
         path = strappend("/run/systemd/multi-session-x/", seat);
         if (!path) {
-                log_error("Out of memory");
+                log_oom();
                 goto fail;
         }
 
@@ -136,6 +140,11 @@ int main(int argc, char *argv[]) {
                 "Section \"ServerFlags\"\n"
                 "        Option \"AutoAddDevices\" \"True\"\n"
                 "        Option \"AllowEmptyInput\" \"True\"\n"
+                "        Option \"DontVTSwitch\" \"True\"\n"
+                "EndSection\n"
+                "Section \"InputClass\"\n"
+                "        Identifier \"Force Input Devices to Seat\"\n"
+                "        Option \"GrabDevice\" \"True\"\n"
                 "EndSection\n",
                 device_node);