Hi, I hacked a small patch that fixes this problem with udev for me. I don't really like this solution, but openvt from console-utils uses the same way. And, as far as I can see, there aren't many other options.
hälsningar, emanuel ========================== diff -du ../../vlock-2.1/src/vlock.h ./vlock.h --- ../../vlock-2.1/src/vlock.h 2007-09-08 20:04:25.000000000 +0200 +++ ./vlock.h 2007-11-13 19:54:26.000000000 +0100 @@ -14,13 +14,14 @@ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #define CONSOLE "/dev/ttyv0" #else -#define CONSOLE "/dev/tty0" +#define CONSOLE "/dev/console" #endif /* template for the device of a given virtual console */ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #define VTNAME "/dev/ttyv%x" #else #define VTNAME "/dev/tty%d" +#define UDEVVTNAME "/dev/vc/%d" #endif /* hard coded paths */ diff -du ../../vlock-2.1/src/vlock-new.c ./vlock-new.c --- ../../vlock-2.1/src/vlock-new.c 2007-09-08 20:04:25.000000000 +0200 +++ ./vlock-new.c 2007-11-13 20:52:11.000000000 +0100 @@ -14,10 +14,12 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <sys/wait.h> #include <sys/types.h> +#include <errno.h> #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <sys/consio.h> @@ -53,8 +55,9 @@ /* Get the device name for the given console number. * Returns the device name or NULL on error. */ -static char *get_console_name(int n) { - static char name[sizeof VTNAME + 2]; +static char *get_console_name(char* vtbase, int n) { + /* instead of 25 the original uses "sizeof VTNAME" - would need to check both... */ + static char name[25]; size_t namelen; if (n <= 0) @@ -62,9 +65,9 @@ /* format the virtual terminal filename from the number */ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - namelen = snprintf(name, sizeof name, VTNAME, n-1); + namelen = snprintf(name, sizeof name, vtbase, n-1); #else - namelen = snprintf(name, sizeof name, VTNAME, n); + namelen = snprintf(name, sizeof name, vtbase, n); #endif if (namelen > sizeof name) { @@ -117,10 +120,18 @@ } /* get the device name for the new virtual console */ - vtname = get_console_name(vtno); + vtname = get_console_name(VTNAME, vtno); /* open the free virtual terminal */ - if ((vtfd = open(vtname, O_RDWR)) < 0) { + vtfd = open(vtname, O_RDWR); + if ((vtfd == -1) && (errno == ENOENT)) + { + /* Maybe we're on a system with udev/devfs */ + vtname = get_console_name(UDEVVTNAME, vtno); + vtfd = open (vtname, O_RDWR); + } + + if (vtfd < 0) { perror("vlock-new: cannot open new console"); exit (111); }