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 setsid
una nuova sessione per se stesso, quindi apre un fd ttyN
per eseguire subito uno VT_ACTIVATE
ioctl 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 xinit
ttyv2 manterrà ttyv2 come suo ctty!).