_exit(EX_OSERR);
}
+static void
+usage(void)
+{
+ fprintf(stderr, "Syntax:\n");
+ fprintf(stderr, " vncsession [-D] <username> <display>\n");
+ exit(EX_USAGE);
+}
+
int
main(int argc, char **argv)
{
const char *username, *display;
- if ((argc != 3) || (argv[2][0] != ':')) {
- fprintf(stderr, "Syntax:\n");
- fprintf(stderr, " %s <username> <display>\n", argv[0]);
- return EX_USAGE;
+ int opt, forking = 1;
+
+ while ((opt = getopt(argc, argv, "D")) != -1) {
+ switch (opt) {
+ case 'D':
+ forking = 0;
+ break;
+ default:
+ usage();
+ }
}
- username = argv[1];
- display = argv[2];
+ if ((argc != optind + 2) || (argv[optind +1][0] != ':'))
+ usage();
+
+ username = argv[argc - 2];
+ display = argv[argc - 1];
if (geteuid() != 0) {
fprintf(stderr, "This program needs to be run as root!\n");
return EX_OSERR;
}
- if (begin_daemon() == -1)
- return EX_OSERR;
+ if (forking) {
+ if (begin_daemon() == -1)
+ return EX_OSERR;
+ }
openlog("vncsession", LOG_PID, LOG_AUTH);
fclose(f);
}
- finish_daemon();
+ if (forking)
+ finish_daemon();
while (1) {
int status;
vncsession \- start a VNC server
.SH SYNOPSIS
.B vncsession
+.RI [-D]
.RI < username >
.RI <: display# >
.SH DESCRIPTION
is rarely called directly and is normally started by the system service
manager.
+.SH -D OPTION
+.B vncsession
+by default forks and detaches. If the -D option is used, it does not fork and
+detach. This option is provided for use with system service managers that
+require services to run in the foreground. This option is not intended for
+debugging in a login shell from a terminal or for running
+.B vncsession
+from a terminal as an ordinary user.
+
.SH FILES
Several VNC-related files are found in the directory $HOME/.vnc:
.TP