The displayfd option is very handy and useful. However, in some environments where many servers are running (for example in an automated build environment using Xvfb) it is often desirable to be able to specify an initial offset for the display search.
For example if it is known that the first 100 displays are already taken it isn't currently possible to start at 101 therefore each subsequent Xvfb launch would re-try all displays from :0 to :100. This patch adds an optional offset option to the displayfd parameter that allows it to specify the initial display number to start the search from. The format is: -displayfd fd[:<offset>] The patch also updates the help as well as the Xserver man page accordingly. Signed-off-by: Bernhard Miklautz <bernhard.mikla...@thincast.com> --- dix/globals.c | 1 + include/opaque.h | 1 + man/Xserver.man | 7 ++++--- os/connection.c | 2 +- os/utils.c | 9 ++++++++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dix/globals.c b/dix/globals.c index f36a938..fd2f991 100644 --- a/dix/globals.c +++ b/dix/globals.c @@ -128,6 +128,7 @@ int monitorResolution = 0; const char *display; int displayfd = -1; +int displayoffset = 0; Bool explicit_display = FALSE; char *ConnectionInfo; diff --git a/include/opaque.h b/include/opaque.h index 0ba0d64..4a29b66 100644 --- a/include/opaque.h +++ b/include/opaque.h @@ -52,6 +52,7 @@ extern _X_EXPORT int defaultScreenSaverBlanking; extern _X_EXPORT int defaultScreenSaverAllowExposures; extern _X_EXPORT const char *display; extern _X_EXPORT int displayfd; +extern _X_EXPORT int displayoffset; extern _X_EXPORT Bool explicit_display; extern _X_EXPORT int defaultBackingStore; diff --git a/man/Xserver.man b/man/Xserver.man index 506e5bb..45f2285 100644 --- a/man/Xserver.man +++ b/man/Xserver.man @@ -127,12 +127,13 @@ Not obeyed by all servers. .B \-core causes the server to generate a core dump on fatal errors. .TP 8 -.B \-displayfd \fIfd\fP +.B \-displayfd \fIfd[:offset]\fP specifies a file descriptor in the launching process. Rather than specify a display number, the X server will attempt to listen on successively higher display numbers, and upon finding a free one, will write the display number back -on this file descriptor as a newline-terminated string. The \-pn option is -ignored when using \-displayfd. +on this file descriptor as a newline-terminated string. If the optional parameter +\fIoffset\fP is set the search for a free display number is started at offset instead of +the default 0. The \-pn option is ignored when using \-displayfd. .TP 8 .B \-deferglyphs \fIwhichfonts\fP specifies the types of fonts for which the server should attempt to use diff --git a/os/connection.c b/os/connection.c index 4c1ba4b..30bea75 100644 --- a/os/connection.c +++ b/os/connection.c @@ -419,7 +419,7 @@ CreateWellKnownSockets(void) } else { /* -displayfd and no explicit display number */ Bool found = 0; - for (i = 0; i < 65536 - X_TCP_PORT; i++) { + for (i = displayoffset; i < 65536 - X_TCP_PORT; i++) { if (TryCreateSocket(i, &partial) && !partial) { found = 1; break; diff --git a/os/utils.c b/os/utils.c index 5871ef8..813b73e 100644 --- a/os/utils.c +++ b/os/utils.c @@ -549,7 +549,8 @@ UseMsg(void) ErrorF("-cc int default color visual class\n"); ErrorF("-nocursor disable the cursor\n"); ErrorF("-core generate core dump on fatal error\n"); - ErrorF("-displayfd fd file descriptor to write display number to when ready to connect\n"); + ErrorF("-displayfd fd[:<offset>] file descriptor to write display " \ + "number to when ready to connect\n"); ErrorF("-dpi int screen resolution in dots per inch\n"); #ifdef DPMSExtension ErrorF("-dpms disables VESA DPMS monitor control\n"); @@ -783,7 +784,13 @@ ProcessCommandLine(int argc, char *argv[]) } else if (strcmp(argv[i], "-displayfd") == 0) { if (++i < argc) { + char *tmp; displayfd = atoi(argv[i]); + if ((tmp = strchr(argv[i], ':'))) { + displayoffset = atoi(tmp+1); + if (displayoffset < 0) + displayoffset = 0; + } #ifdef LOCK_SERVER nolock = TRUE; #endif -- 2.1.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel