Wenn X gestartet wird, sucht es nach dem niedrigsten nicht verwendeten VT und hängt daran an. Mein Problem ist, dass ich bei mehreren laufenden X-Prozessen feststellen muss, welcher der aktuell aktiven ist.
Dies ist eine * BSD-Frage, da es unter Linux einfach ist: X setzt sein steuerndes Terminal auf ttyNoder bei sehr alten Distributionen in der Befehlszeile als vtN. Ich führe also einen Dienst aus und sehe, dass die derzeit aktive VT aktiv ist tty7und zwei X-Server ausgeführt werden. Es ist leicht zu erkennen, welcher dem aktuellen Terminal entspricht. (Dies ist ein vernünftiger Fall: Möglicherweise hat der Benutzer die GNOME / KDE-Funktion "Benutzer wechseln" verwendet oder zwei Server ausgeführt startx.) Eine Beispielanwendung, die möglicherweise dem aktiven X-Server folgen möchte, ist x11vnc(die aus der von mir entwickelten Software stammt) ).
Unter FreeBSD sagt Ihnen das steuernde Terminal jedoch nichts. Wenn X von ttyv1 aus gestartet wird, bleibt dies das steuernde Terminal.
Aktualisieren
Ich habe die Due Diligence durchgeführt und den X-Code gelesen. Nach einigem Herumjagen ist mir jetzt klarer, was los ist.
In lnx_init.c erstellt der X-Server setsideine neue Sitzung für sich selbst und öffnet anschließend eine fd ttyN, um eine VT_ACTIVATEioctl darauf auszuführen. Ziemlich normal; Das Öffnen des fd für ein Terminal ohne Steuerungsprozess von einem Prozess ohne steuerndes Terminal verbindet die beiden, und der Server hält den fd offen, sodass garantiert ist, dass das Terminal das steuernde Terminal für den X-Server bleibt.
Wenn Sie in bsd_init.c das fd für das tty öffnen , das als Framebuffer verwendet werden soll, wird es nicht zu einem steuernden Terminal (und tatsächlich setsidbehält BSD Xserver, das von xinitttyv2 aus gestartet wurde, ttyv2 als ctty bei!).