--- XFree86-4.2.0/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c.fred 2001-10-31 23:50:30.000000000 +0100 +++ XFree86-4.2.0/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c 2002-08-14 15:22:56.000000000 +0200 @@ -76,6 +76,7 @@ xf86Info.vtno = VTnum; from = X_CMDLINE; } else { + struct vt_stat vtstat; i=0; while (tty0[i] != NULL) { @@ -87,9 +88,19 @@ FatalError( "xf86OpenConsole: Cannot open /dev/tty0 (%s)\n", strerror(errno)); - if ((ioctl(fd, VT_OPENQRY, &xf86Info.vtno) < 0) || - (xf86Info.vtno == -1)) { + + if ((ioctl(fd, VT_GETSTATE, &vtstat) < 0)) { FatalError("xf86OpenConsole: Cannot find a free VT\n"); + } else { + for(xf86Info.vtno=7; xf86Info.vtno<64; xf86Info.vtno++) { + if (!(vtstat.v_state & (1 << xf86Info.vtno))) { + break; + } + } + if (xf86Info.vtno == 64) { + FatalError("xf86OpenConsole: Cannot find a free VT\n"); + } + ErrorF("Using vt %d\n", xf86Info.vtno); } close(fd); }