Ketika X dimulai, ia mencari VT terendah yang tidak terpakai, dan menempel padanya. Masalah saya adalah ketika ada beberapa proses X yang sedang berjalan, saya harus dapat mengidentifikasi yang mana yang sedang aktif.
Ini adalah * pertanyaan BSD, karena di linux itu mudah: X mengatur terminal pengendali menjadi ttyN
, atau, pada distribusi yang sangat lama, itu ditentukan pada commandline sebagai vtN
. Jadi, saya menjalankan layanan dan saya melihat bahwa VT yang saat ini aktif adalah tty7
, dan ada dua server X yang berjalan, mudah untuk mengetahui mana yang sesuai dengan terminal saat ini. (Ini adalah kasus yang masuk akal: mungkin pengguna menggunakan fungsionalitas 'pengguna beralih' GNOME / KDE atau menjalankan dua server menggunakan startx
.) Contoh aplikasi yang mungkin ingin mengikuti server X aktif adalah x11vnc
(yang bercabang dari perangkat lunak yang saya kembangkan ).
Pada FreeBSD, terminal pengendali tidak memberi tahu Anda apa-apa. Ketika X dimulai dari ttyv1, itu tetap merupakan terminal pengendali.
Memperbarui
Saya telah melakukan uji tuntas dan membaca kode X. Setelah beberapa berburu, sekarang lebih jelas bagi saya apa yang terjadi.
Di lnx_init.c , server X tidak setsid
membuat sesi baru untuk dirinya sendiri, kemudian membuka fd untuk ttyN
langsung setelah melakukan VT_ACTIVATE
ioctl di atasnya. Cukup standar; membuka fd ke terminal tanpa proses pengontrolan dari proses tanpa terminal pengontrol menghubungkan keduanya, dan server membuat fd tetap terbuka, sehingga dijamin bahwa terminal akan tetap menjadi terminal pengendali untuk server X.
Sekarang, di bsd_init.c , membuka fd ke tty untuk digunakan sebagai framebuffer tidak menjadikannya terminal pengendali (dan bahkan, tanpa setsid
, BSD Xserver mulai dari xinit
ttyv2 akan menjadikan ttyv2 sebagai ctty!).