<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - logind (215) not allowing more than one non-root Xorg server to open its own virtual terminal"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=81932#c1">Comment # 1</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - logind (215) not allowing more than one non-root Xorg server to open its own virtual terminal"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=81932">bug 81932</a>
              from <span class="vcard"><a class="email" href="mailto:bidulock@openss7.org" title="Brian Bidulock <bidulock@openss7.org>"> <span class="fn">Brian Bidulock</span></a>
</span></b>
        <pre>Woah, don't hit enter on the description line....

The problem experienced is when attemping to run two Xorg 1.16 servers non-root
from startx in seperate virtual terminals.  The first starts ok, the second
fails when attempting to open its virtual terminal.  From Xorg.*.log of the
second:

 [  8259.535] (II) systemd-logind: took control of session
/org/freedesktop/login1/session/c10
 [  8259.536] (II) xfree86: Adding drm device (/dev/dri/card0)
 [  8259.536] (II) systemd-logind: got fd for /dev/dri/card0 226:0 fd 12 paused
0
 ...
 [  8259.549] (++) using VT number 6
 [  8259.554] (--) controlling tty is VT number 6, auto-enabling KeepTty
 [  8259.554] (EE) 
 Fatal server error:
 [  8259.568] (EE) xf86OpenConsole: Cannot open virtual console 6 (Permission
denied)
 [  8259.573] (EE) 
 [  8259.578] (EE) 

>From journalctl:

 Jul 30 14:41:59 habeascorpus.pigworks.openss7.net login[8764]: LOGIN ON tty5
BY brian
 Jul 30 14:42:17 habeascorpus.pigworks.openss7.net systemd-logind[601]: cannot
mute VT 5 for session c15 (-16/17)

Looking at src/login/logind-session.c where this error message is generated, it
uses sigprocmask to block USR1 signal and calls sd_event_add_signal(). 
sd_event_add_signal() uses pthread_sigmask() to check that USR1 is blocked
(which it isn't for the second Xorg server) and returns -EBUSY (-16 in error
message).  sigprocmask() is for use only in single-threaded programs.  It
appears that sigprocmask() is blocking USR1 on the main thread and
pthread_sigmask() is checking it in the running thread.  This results in
sd_restore_vts() setting the permission on the virtual terminal back to root,
but the Xorg server is still allowed to take control of the session.  The
result is that xf86OpenConsole() has insufficient permissions to open the
virtual terminal.

Please correct.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the QA Contact for the bug.</li>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>