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 ttyN
oder 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 tty7
und 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 setsid
eine neue Sitzung für sich selbst und öffnet anschließend eine fd ttyN
, um eine VT_ACTIVATE
ioctl 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 setsid
behält BSD Xserver, das von xinit
ttyv2 aus gestartet wurde, ttyv2 als ctty bei!).