Cuando X comienza, busca el VT no utilizado más bajo y se le asigna. Mi problema es que cuando hay varios procesos X en ejecución, necesito poder identificar cuál es el actualmente activo.
Esta es una pregunta * BSD, porque en Linux es fácil: X establece que su terminal de control sea ttyN
, o, en distribuciones muy antiguas, se especifica en la línea de comandos como vtN
. Entonces, estoy ejecutando un servicio y veo que el VT actualmente activo es tty7
, y hay dos servidores X ejecutándose, es fácil saber cuál corresponde al terminal actual. (Este es un caso razonable: quizás el usuario usó la funcionalidad 'cambiar de usuario' de GNOME / KDE o ejecutó dos servidores usando startx
). Una aplicación de ejemplo que podría querer seguir al servidor X activo es x11vnc
(que está bifurcada por el software que estoy desarrollando )
Sin embargo, en FreeBSD, el terminal de control no le dice nada. Cuando X se inicia desde ttyv1, ese sigue siendo el terminal de control.
Actualizar
Hice la diligencia debida y leí el código X. Después de buscar un poco, ahora es más claro para mí lo que está sucediendo.
En lnx_init.c , el servidor X hace setsid
una sesión nueva para sí mismo, luego abre un archivo fd ttyN
para realizar un VT_ACTIVATE
ioctl en él. Bastante estándar; abrir el fd a un terminal sin proceso de control desde un proceso sin terminal de control asocia los dos, y el servidor mantiene el fd abierto, por lo que se garantiza que el terminal seguirá siendo el terminal de control para el servidor X.
Ahora, en bsd_init.c , abrir el fd en el tty para usarlo como framebuffer no lo convierte en un terminal de control (y, de hecho, sin setsid
BSD Xserver iniciado desde xinit
ttyv2 mantendrá ttyv2 como su ctty!).