All'avvio di X, cerca il VT inutilizzato più basso e si attacca ad esso. Il mio problema è che quando ci sono diversi processi X in esecuzione, devo essere in grado di identificare quale è quello attualmente attivo.
Questa è una domanda * BSD, perché su Linux è facile: X imposta il suo terminale di controllo su ttyN, o, su distribuzioni molto vecchie, è specificato sulla riga di comando come vtN. Quindi, sto eseguendo un servizio e vedo che il VT attualmente attivo è tty7, e ci sono due server X in esecuzione, è facile dire quale corrisponde al terminale corrente. (Questo è un caso ragionevole: forse l'utente ha usato la funzionalità 'switch user' di GNOME / KDE o ha eseguito due server usando startx.) Un'applicazione di esempio che potrebbe voler seguire il server X attivo è x11vnc(che è biforcuta dal software che sto sviluppando ).
Su FreeBSD, tuttavia, il terminale di controllo non ti dice nulla. Quando X viene avviato da ttyv1, questo rimane il terminale di controllo.
Aggiornare
Ho fatto la dovuta diligenza e ho letto il codice X. Dopo un po 'di caccia in giro, ora mi è più chiaro cosa sta succedendo.
In lnx_init.c , il server X fa setsiduna nuova sessione per se stesso, quindi apre un fd ttyNper eseguire subito uno VT_ACTIVATEioctl su di esso. Piuttosto standard; l'apertura di fd a un terminale senza processo di controllo da un processo senza terminale di controllo associa i due e il server mantiene aperto fd, quindi è garantito che il terminale rimarrà il terminale di controllo per il server X.
Ora, in bsd_init.c , l'apertura di fd su tty da utilizzare come framebuffer non lo rende un terminale di controllo (e in effetti, senza setsid, BSD Xserver avviato da xinitttyv2 manterrà ttyv2 come suo ctty!).